]> Cypherpunks.ru repositories - gostls13.git/commitdiff
gc: reject import paths containing special characters
authorAnthony Martin <ality@pbrane.org>
Fri, 24 Feb 2012 19:48:36 +0000 (14:48 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 24 Feb 2012 19:48:36 +0000 (14:48 -0500)
Also allow multiple invalid import statements in a
single file.

Fixes #3021. The changes to go/parser and the
language specifcation have already been committed.

R=rsc, gri
CC=golang-dev
https://golang.org/cl/5672084

src/cmd/gc/go.h
src/cmd/gc/go.y
src/cmd/gc/lex.c
src/cmd/gc/subr.c
src/cmd/gc/y.tab.c
src/cmd/gc/y.tab.h
src/cmd/gc/yerr.h
test/import5.go

index 81be4d25b1624197d32535888a2108d73f5aaebd..c34852643786cf18b67509b4fef823fa2948d6fd 100644 (file)
@@ -1171,6 +1171,7 @@ Type*     getthisx(Type *t);
 int    implements(Type *t, Type *iface, Type **missing, Type **have, int *ptr);
 void   importdot(Pkg *opkg, Node *pack);
 int    is64(Type *t);
+int    isbadimport(Strlit *s);
 int    isblank(Node *n);
 int    isblanksym(Sym *s);
 int    isfixedarray(Type *t);
index 91f939219ccc78b459c9acf19d05066ca8bfa897..f95058721415ae70d7d411f85eeeb51b1cecb5b6 100644 (file)
@@ -205,7 +205,15 @@ import_stmt:
                my->lastlineno = $1;
                my->block = 1;  // at top level
        }
-
+|      import_here import_there
+       {
+               // When an invalid import path is passed to importfile,
+               // it calls yyerror and then sets up a fake import with
+               // no package statement. This allows us to test more
+               // than one invalid import statement in a single file.
+               if(nerrors == 0)
+                       fatal("phase error in import");
+       }
 
 import_stmt_list:
        import_stmt
index 924865b939e565ee7d4b17499a009d86ec4e8e03..140153a646709ebe257238ae5324808e55917856 100644 (file)
@@ -573,6 +573,13 @@ findpkg(Strlit *name)
        return 0;
 }
 
+static void
+fakeimport(void)
+{
+       importpkg = mkpkg(strlit("fake"));
+       cannedimports("fake.6", "$$\n");
+}
+
 void
 importfile(Val *f, int line)
 {
@@ -589,17 +596,19 @@ importfile(Val *f, int line)
 
        if(f->ctype != CTSTR) {
                yyerror("import statement not a string");
+               fakeimport();
                return;
        }
 
-       if(strlen(f->u.sval->s) != f->u.sval->len) {
-               yyerror("import path contains NUL");
-               errorexit();
+       if(f->u.sval->len == 0) {
+               yyerror("import path is empty");
+               fakeimport();
+               return;
        }
-       
-       if(strchr(f->u.sval->s, '\\')) {
-               yyerror("import path contains backslash; use slash");
-               errorexit();
+
+       if(isbadimport(f->u.sval)) {
+               fakeimport();
+               return;
        }
 
        // The package name main is no longer reserved,
index 12ac6fcb97f0175b1e7b0e630c67a29032344a0b..6eb7734f0f878392140382368c0d481aad3a5f54 100644 (file)
@@ -3559,11 +3559,9 @@ mkpkg(Strlit *path)
 {
        Pkg *p;
        int h;
-       
-       if(strlen(path->s) != path->len) {
-               yyerror("import path contains NUL byte");
+
+       if(isbadimport(path))
                errorexit();
-       }
        
        h = stringhash(path->s) & (nelem(phash)-1);
        for(p=phash[h]; p; p=p->link)
@@ -3612,3 +3610,41 @@ addinit(Node **np, NodeList *init)
        n->ninit = concat(init, n->ninit);
        n->ullman = UINF;
 }
+
+int
+isbadimport(Strlit *path)
+{
+       char *s;
+       Rune r;
+
+       if(strlen(path->s) != path->len) {
+               yyerror("import path contains NUL");
+               return 1;
+       }
+
+       s = path->s;
+       while(*s) {
+               s += chartorune(&r, s);
+               if(r == Runeerror) {
+                       yyerror("import path contains invalid UTF-8 sequence");
+                       return 1;
+               }
+               if(r < 0x20 || r == 0x7f) {
+                       yyerror("import path contains control character");
+                       return 1;
+               }
+               if(r == '\\') {
+                       yyerror("import path contains backslash; use slash");
+                       return 1;
+               }
+               if(isspacerune(r)) {
+                       yyerror("import path contains space character");
+                       return 1;
+               }
+               if(utfrune("!\"#$%&'()*,:;<=>?[]^`{|}~", r)) {
+                       yyerror("import path contains invalid character '%C'", r);
+                       return 1;
+               }
+       }
+       return 0;
+}
index 84fe945dca1a2098ffe930cb59177c98867673e4..97bf233eb7daa3cc98fab50c1dbef1fd2f1ac1ec 100644 (file)
@@ -1,10 +1,8 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* Bison implementation for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -46,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.5"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -67,7 +65,7 @@
 
 /* Copy the first part of user declarations.  */
 
-/* Line 189 of yacc.c  */
+/* Line 268 of yacc.c  */
 #line 20 "go.y"
 
 #include <u.h>
@@ -78,8 +76,8 @@
 static void fixlbrace(int);
 
 
-/* Line 189 of yacc.c  */
-#line 83 "y.tab.c"
+/* Line 268 of yacc.c  */
+#line 81 "y.tab.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -215,7 +213,7 @@ static void fixlbrace(int);
 typedef union YYSTYPE
 {
 
-/* Line 214 of yacc.c  */
+/* Line 293 of yacc.c  */
 #line 28 "go.y"
 
        Node*           node;
@@ -227,8 +225,8 @@ typedef union YYSTYPE
 
 
 
-/* Line 214 of yacc.c  */
-#line 232 "y.tab.c"
+/* Line 293 of yacc.c  */
+#line 230 "y.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -239,8 +237,8 @@ typedef union YYSTYPE
 /* Copy the second part of user declarations.  */
 
 
-/* Line 264 of yacc.c  */
-#line 244 "y.tab.c"
+/* Line 343 of yacc.c  */
+#line 242 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -290,7 +288,7 @@ typedef short int yytype_int16;
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -343,11 +341,11 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
 #     endif
 #    endif
 #   endif
@@ -370,24 +368,24 @@ YYID (yyi)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
 #  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
 #   endif
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
@@ -416,23 +414,7 @@ union yyalloc
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         YYSIZE_T yyi;                         \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (YYID (0))
-#  endif
-# endif
+# define YYCOPY_NEEDED 1
 
 /* Relocate STACK from its old location to the new one.  The
    local variables YYSIZE and YYSTACKSIZE give the old and new number of
@@ -452,19 +434,39 @@ union yyalloc
 
 #endif
 
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  4
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2157
+#define YYLAST   2131
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  76
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  138
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  343
+#define YYNRULES  344
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  652
+#define YYNSTATES  653
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -515,40 +517,40 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint16 yyprhs[] =
 {
        0,     0,     3,     8,     9,    13,    14,    18,    19,    23,
-      26,    32,    36,    40,    42,    46,    48,    51,    54,    59,
-      60,    62,    63,    68,    69,    71,    73,    75,    77,    80,
-      86,    90,    93,    99,   107,   111,   114,   120,   124,   126,
-     129,   134,   138,   143,   147,   149,   152,   154,   156,   159,
-     161,   165,   169,   173,   176,   179,   183,   189,   195,   198,
-     199,   204,   205,   209,   210,   213,   214,   219,   224,   229,
-     235,   237,   239,   242,   243,   247,   249,   253,   254,   255,
-     256,   264,   265,   268,   271,   272,   273,   281,   282,   288,
-     290,   294,   298,   302,   306,   310,   314,   318,   322,   326,
-     330,   334,   338,   342,   346,   350,   354,   358,   362,   366,
-     370,   372,   375,   378,   381,   384,   387,   390,   393,   396,
-     400,   406,   413,   415,   417,   421,   427,   433,   438,   445,
-     447,   452,   458,   464,   472,   474,   475,   479,   481,   486,
-     488,   492,   494,   496,   498,   500,   502,   504,   506,   507,
-     509,   511,   513,   515,   520,   522,   524,   526,   529,   531,
-     533,   535,   537,   539,   543,   545,   547,   549,   552,   554,
-     556,   558,   560,   564,   566,   568,   570,   572,   574,   576,
-     578,   580,   582,   586,   591,   596,   599,   603,   609,   611,
-     613,   616,   620,   626,   630,   636,   640,   644,   650,   659,
-     665,   674,   680,   681,   685,   686,   688,   692,   694,   699,
-     702,   703,   707,   709,   713,   715,   719,   721,   725,   727,
-     731,   733,   737,   741,   744,   749,   753,   759,   765,   767,
-     771,   773,   776,   778,   782,   787,   789,   792,   795,   797,
-     799,   803,   804,   807,   808,   810,   812,   814,   816,   818,
-     820,   822,   824,   826,   827,   832,   834,   837,   840,   843,
-     846,   849,   852,   854,   858,   860,   864,   866,   870,   872,
-     876,   878,   882,   884,   886,   890,   894,   895,   898,   899,
-     901,   902,   904,   905,   907,   908,   910,   911,   913,   914,
-     916,   917,   919,   920,   922,   923,   925,   930,   935,   941,
-     948,   953,   958,   960,   962,   964,   966,   968,   970,   972,
-     974,   976,   980,   985,   991,   996,  1001,  1004,  1007,  1012,
-    1016,  1020,  1026,  1030,  1035,  1039,  1045,  1047,  1048,  1050,
-    1054,  1056,  1058,  1061,  1063,  1065,  1071,  1072,  1075,  1077,
-    1081,  1083,  1087,  1089
+      26,    32,    36,    40,    43,    45,    49,    51,    54,    57,
+      62,    63,    65,    66,    71,    72,    74,    76,    78,    80,
+      83,    89,    93,    96,   102,   110,   114,   117,   123,   127,
+     129,   132,   137,   141,   146,   150,   152,   155,   157,   159,
+     162,   164,   168,   172,   176,   179,   182,   186,   192,   198,
+     201,   202,   207,   208,   212,   213,   216,   217,   222,   227,
+     232,   238,   240,   242,   245,   246,   250,   252,   256,   257,
+     258,   259,   267,   268,   271,   274,   275,   276,   284,   285,
+     291,   293,   297,   301,   305,   309,   313,   317,   321,   325,
+     329,   333,   337,   341,   345,   349,   353,   357,   361,   365,
+     369,   373,   375,   378,   381,   384,   387,   390,   393,   396,
+     399,   403,   409,   416,   418,   420,   424,   430,   436,   441,
+     448,   450,   455,   461,   467,   475,   477,   478,   482,   484,
+     489,   491,   495,   497,   499,   501,   503,   505,   507,   509,
+     510,   512,   514,   516,   518,   523,   525,   527,   529,   532,
+     534,   536,   538,   540,   542,   546,   548,   550,   552,   555,
+     557,   559,   561,   563,   567,   569,   571,   573,   575,   577,
+     579,   581,   583,   585,   589,   594,   599,   602,   606,   612,
+     614,   616,   619,   623,   629,   633,   639,   643,   647,   653,
+     662,   668,   677,   683,   684,   688,   689,   691,   695,   697,
+     702,   705,   706,   710,   712,   716,   718,   722,   724,   728,
+     730,   734,   736,   740,   744,   747,   752,   756,   762,   768,
+     770,   774,   776,   779,   781,   785,   790,   792,   795,   798,
+     800,   802,   806,   807,   810,   811,   813,   815,   817,   819,
+     821,   823,   825,   827,   829,   830,   835,   837,   840,   843,
+     846,   849,   852,   855,   857,   861,   863,   867,   869,   873,
+     875,   879,   881,   885,   887,   889,   893,   897,   898,   901,
+     902,   904,   905,   907,   908,   910,   911,   913,   914,   916,
+     917,   919,   920,   922,   923,   925,   926,   928,   933,   938,
+     944,   951,   956,   961,   963,   965,   967,   969,   971,   973,
+     975,   977,   979,   983,   988,   994,   999,  1004,  1007,  1010,
+    1015,  1019,  1023,  1029,  1033,  1038,  1042,  1048,  1050,  1051,
+    1053,  1057,  1059,  1061,  1064,  1066,  1068,  1074,  1075,  1078,
+    1080,  1084,  1086,  1090,  1092
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -558,152 +560,152 @@ static const yytype_int16 yyrhs[] =
      137,    62,    -1,    -1,    80,    86,    88,    -1,    -1,    81,
       82,    62,    -1,    21,    83,    -1,    21,    59,    84,   186,
       60,    -1,    21,    59,    60,    -1,    85,    86,    88,    -1,
-      83,    -1,    84,    62,    83,    -1,     3,    -1,   137,     3,
-      -1,    63,     3,    -1,    25,    24,    87,    62,    -1,    -1,
-      24,    -1,    -1,    89,   210,    64,    64,    -1,    -1,    91,
-      -1,   154,    -1,   177,    -1,     1,    -1,    32,    93,    -1,
-      32,    59,   163,   186,    60,    -1,    32,    59,    60,    -1,
-      92,    94,    -1,    92,    59,    94,   186,    60,    -1,    92,
-      59,    94,    62,   164,   186,    60,    -1,    92,    59,    60,
-      -1,    31,    97,    -1,    31,    59,   165,   186,    60,    -1,
-      31,    59,    60,    -1,     9,    -1,   181,   142,    -1,   181,
-     142,    65,   182,    -1,   181,    65,   182,    -1,   181,   142,
-      65,   182,    -1,   181,    65,   182,    -1,    94,    -1,   181,
-     142,    -1,   181,    -1,   137,    -1,    96,   142,    -1,   123,
-      -1,   123,     4,   123,    -1,   182,    65,   182,    -1,   182,
-       8,   182,    -1,   123,    42,    -1,   123,    37,    -1,     6,
-     183,    66,    -1,     6,   183,    65,   123,    66,    -1,     6,
-     183,     8,   123,    66,    -1,    12,    66,    -1,    -1,    67,
-     101,   179,    68,    -1,    -1,    99,   103,   179,    -1,    -1,
-     104,   102,    -1,    -1,    35,   106,   179,    68,    -1,   182,
-      65,    26,   123,    -1,   182,     8,    26,   123,    -1,   190,
-      62,   190,    62,   190,    -1,   190,    -1,   107,    -1,   108,
-     105,    -1,    -1,    16,   111,   109,    -1,   190,    -1,   190,
-      62,   190,    -1,    -1,    -1,    -1,    20,   114,   112,   115,
-     105,   116,   117,    -1,    -1,    14,   113,    -1,    14,   100,
-      -1,    -1,    -1,    30,   119,   112,   120,    35,   104,    68,
-      -1,    -1,    28,   122,    35,   104,    68,    -1,   124,    -1,
-     123,    47,   123,    -1,   123,    33,   123,    -1,   123,    38,
-     123,    -1,   123,    46,   123,    -1,   123,    45,   123,    -1,
-     123,    43,   123,    -1,   123,    39,   123,    -1,   123,    40,
-     123,    -1,   123,    49,   123,    -1,   123,    50,   123,    -1,
-     123,    51,   123,    -1,   123,    52,   123,    -1,   123,    53,
-     123,    -1,   123,    54,   123,    -1,   123,    55,   123,    -1,
-     123,    56,   123,    -1,   123,    34,   123,    -1,   123,    44,
-     123,    -1,   123,    48,   123,    -1,   123,    36,   123,    -1,
-     130,    -1,    53,   124,    -1,    56,   124,    -1,    49,   124,
-      -1,    50,   124,    -1,    69,   124,    -1,    70,   124,    -1,
-      52,   124,    -1,    36,   124,    -1,   130,    59,    60,    -1,
-     130,    59,   183,   187,    60,    -1,   130,    59,   183,    11,
-     187,    60,    -1,     3,    -1,   139,    -1,   130,    63,   137,
-      -1,   130,    63,    59,   131,    60,    -1,   130,    63,    59,
-      31,    60,    -1,   130,    71,   123,    72,    -1,   130,    71,
-     188,    66,   188,    72,    -1,   125,    -1,   145,    59,   123,
-      60,    -1,   146,   133,   127,   185,    68,    -1,   126,    67,
-     127,   185,    68,    -1,    59,   131,    60,    67,   127,   185,
-      68,    -1,   161,    -1,    -1,   123,    66,   129,    -1,   123,
-      -1,    67,   127,   185,    68,    -1,   126,    -1,    59,   131,
-      60,    -1,   123,    -1,   143,    -1,   142,    -1,    35,    -1,
-      67,    -1,   137,    -1,   137,    -1,    -1,   134,    -1,    24,
-      -1,   138,    -1,    73,    -1,    74,     3,    63,    24,    -1,
-     137,    -1,   134,    -1,    11,    -1,    11,   142,    -1,   151,
-      -1,   157,    -1,   149,    -1,   150,    -1,   148,    -1,    59,
-     142,    60,    -1,   151,    -1,   157,    -1,   149,    -1,    53,
-     143,    -1,   157,    -1,   149,    -1,   150,    -1,   148,    -1,
-      59,   142,    60,    -1,   157,    -1,   149,    -1,   149,    -1,
-     151,    -1,   157,    -1,   149,    -1,   150,    -1,   148,    -1,
-     139,    -1,   139,    63,   137,    -1,    71,   188,    72,   142,
-      -1,    71,    11,    72,   142,    -1,     7,   144,    -1,     7,
-      36,   142,    -1,    23,    71,   142,    72,   142,    -1,   152,
-      -1,   153,    -1,    53,   142,    -1,    36,     7,   142,    -1,
-      29,   133,   166,   186,    68,    -1,    29,   133,    68,    -1,
-      22,   133,   167,   186,    68,    -1,    22,   133,    68,    -1,
-      17,   155,   158,    -1,   137,    59,   175,    60,   159,    -1,
-      59,   175,    60,   137,    59,   175,    60,   159,    -1,   196,
-      59,   191,    60,   206,    -1,    59,   211,    60,   137,    59,
-     191,    60,   206,    -1,    17,    59,   175,    60,   159,    -1,
-      -1,    67,   179,    68,    -1,    -1,   147,    -1,    59,   175,
-      60,    -1,   157,    -1,   160,   133,   179,    68,    -1,   160,
-       1,    -1,    -1,   162,    90,    62,    -1,    93,    -1,   163,
-      62,    93,    -1,    95,    -1,   164,    62,    95,    -1,    97,
-      -1,   165,    62,    97,    -1,   168,    -1,   166,    62,   168,
-      -1,   171,    -1,   167,    62,   171,    -1,   180,   142,   194,
-      -1,   170,   194,    -1,    59,   170,    60,   194,    -1,    53,
-     170,   194,    -1,    59,    53,   170,    60,   194,    -1,    53,
-      59,   170,    60,   194,    -1,    24,    -1,    24,    63,   137,
-      -1,   169,    -1,   134,   172,    -1,   169,    -1,    59,   169,
-      60,    -1,    59,   175,    60,   159,    -1,   132,    -1,   137,
-     132,    -1,   137,   141,    -1,   141,    -1,   173,    -1,   174,
-      75,   173,    -1,    -1,   174,   187,    -1,    -1,   100,    -1,
-      91,    -1,   177,    -1,     1,    -1,    98,    -1,   110,    -1,
-     118,    -1,   121,    -1,   113,    -1,    -1,   140,    66,   178,
-     176,    -1,    15,    -1,     5,   136,    -1,    10,   136,    -1,
-      18,   125,    -1,    13,   125,    -1,    19,   134,    -1,    27,
-     189,    -1,   176,    -1,   179,    62,   176,    -1,   134,    -1,
-     180,    75,   134,    -1,   135,    -1,   181,    75,   135,    -1,
-     123,    -1,   182,    75,   123,    -1,   131,    -1,   183,    75,
-     131,    -1,   128,    -1,   129,    -1,   184,    75,   128,    -1,
-     184,    75,   129,    -1,    -1,   184,   187,    -1,    -1,    62,
-      -1,    -1,    75,    -1,    -1,   123,    -1,    -1,   182,    -1,
-      -1,    98,    -1,    -1,   211,    -1,    -1,   212,    -1,    -1,
-     213,    -1,    -1,     3,    -1,    21,    24,     3,    62,    -1,
-      32,   196,   198,    62,    -1,     9,   196,    65,   209,    62,
-      -1,     9,   196,   198,    65,   209,    62,    -1,    31,   197,
-     198,    62,    -1,    17,   156,   158,    62,    -1,   138,    -1,
-     196,    -1,   200,    -1,   201,    -1,   202,    -1,   200,    -1,
-     202,    -1,   138,    -1,    24,    -1,    71,    72,   198,    -1,
-      71,     3,    72,   198,    -1,    23,    71,   198,    72,   198,
-      -1,    29,    67,   192,    68,    -1,    22,    67,   193,    68,
-      -1,    53,   198,    -1,     7,   199,    -1,     7,    59,   201,
-      60,    -1,     7,    36,   198,    -1,    36,     7,   198,    -1,
-      17,    59,   191,    60,   206,    -1,   137,   198,   194,    -1,
-     137,    11,   198,   194,    -1,   137,   198,   194,    -1,   137,
-      59,   191,    60,   206,    -1,   198,    -1,    -1,   207,    -1,
-      59,   191,    60,    -1,   198,    -1,     3,    -1,    50,     3,
-      -1,   137,    -1,   208,    -1,    59,   208,    49,   208,    60,
-      -1,    -1,   210,   195,    -1,   203,    -1,   211,    75,   203,
-      -1,   204,    -1,   212,    62,   204,    -1,   205,    -1,   213,
-      62,   205,    -1
+      85,    88,    -1,    83,    -1,    84,    62,    83,    -1,     3,
+      -1,   137,     3,    -1,    63,     3,    -1,    25,    24,    87,
+      62,    -1,    -1,    24,    -1,    -1,    89,   210,    64,    64,
+      -1,    -1,    91,    -1,   154,    -1,   177,    -1,     1,    -1,
+      32,    93,    -1,    32,    59,   163,   186,    60,    -1,    32,
+      59,    60,    -1,    92,    94,    -1,    92,    59,    94,   186,
+      60,    -1,    92,    59,    94,    62,   164,   186,    60,    -1,
+      92,    59,    60,    -1,    31,    97,    -1,    31,    59,   165,
+     186,    60,    -1,    31,    59,    60,    -1,     9,    -1,   181,
+     142,    -1,   181,   142,    65,   182,    -1,   181,    65,   182,
+      -1,   181,   142,    65,   182,    -1,   181,    65,   182,    -1,
+      94,    -1,   181,   142,    -1,   181,    -1,   137,    -1,    96,
+     142,    -1,   123,    -1,   123,     4,   123,    -1,   182,    65,
+     182,    -1,   182,     8,   182,    -1,   123,    42,    -1,   123,
+      37,    -1,     6,   183,    66,    -1,     6,   183,    65,   123,
+      66,    -1,     6,   183,     8,   123,    66,    -1,    12,    66,
+      -1,    -1,    67,   101,   179,    68,    -1,    -1,    99,   103,
+     179,    -1,    -1,   104,   102,    -1,    -1,    35,   106,   179,
+      68,    -1,   182,    65,    26,   123,    -1,   182,     8,    26,
+     123,    -1,   190,    62,   190,    62,   190,    -1,   190,    -1,
+     107,    -1,   108,   105,    -1,    -1,    16,   111,   109,    -1,
+     190,    -1,   190,    62,   190,    -1,    -1,    -1,    -1,    20,
+     114,   112,   115,   105,   116,   117,    -1,    -1,    14,   113,
+      -1,    14,   100,    -1,    -1,    -1,    30,   119,   112,   120,
+      35,   104,    68,    -1,    -1,    28,   122,    35,   104,    68,
+      -1,   124,    -1,   123,    47,   123,    -1,   123,    33,   123,
+      -1,   123,    38,   123,    -1,   123,    46,   123,    -1,   123,
+      45,   123,    -1,   123,    43,   123,    -1,   123,    39,   123,
+      -1,   123,    40,   123,    -1,   123,    49,   123,    -1,   123,
+      50,   123,    -1,   123,    51,   123,    -1,   123,    52,   123,
+      -1,   123,    53,   123,    -1,   123,    54,   123,    -1,   123,
+      55,   123,    -1,   123,    56,   123,    -1,   123,    34,   123,
+      -1,   123,    44,   123,    -1,   123,    48,   123,    -1,   123,
+      36,   123,    -1,   130,    -1,    53,   124,    -1,    56,   124,
+      -1,    49,   124,    -1,    50,   124,    -1,    69,   124,    -1,
+      70,   124,    -1,    52,   124,    -1,    36,   124,    -1,   130,
+      59,    60,    -1,   130,    59,   183,   187,    60,    -1,   130,
+      59,   183,    11,   187,    60,    -1,     3,    -1,   139,    -1,
+     130,    63,   137,    -1,   130,    63,    59,   131,    60,    -1,
+     130,    63,    59,    31,    60,    -1,   130,    71,   123,    72,
+      -1,   130,    71,   188,    66,   188,    72,    -1,   125,    -1,
+     145,    59,   123,    60,    -1,   146,   133,   127,   185,    68,
+      -1,   126,    67,   127,   185,    68,    -1,    59,   131,    60,
+      67,   127,   185,    68,    -1,   161,    -1,    -1,   123,    66,
+     129,    -1,   123,    -1,    67,   127,   185,    68,    -1,   126,
+      -1,    59,   131,    60,    -1,   123,    -1,   143,    -1,   142,
+      -1,    35,    -1,    67,    -1,   137,    -1,   137,    -1,    -1,
+     134,    -1,    24,    -1,   138,    -1,    73,    -1,    74,     3,
+      63,    24,    -1,   137,    -1,   134,    -1,    11,    -1,    11,
+     142,    -1,   151,    -1,   157,    -1,   149,    -1,   150,    -1,
+     148,    -1,    59,   142,    60,    -1,   151,    -1,   157,    -1,
+     149,    -1,    53,   143,    -1,   157,    -1,   149,    -1,   150,
+      -1,   148,    -1,    59,   142,    60,    -1,   157,    -1,   149,
+      -1,   149,    -1,   151,    -1,   157,    -1,   149,    -1,   150,
+      -1,   148,    -1,   139,    -1,   139,    63,   137,    -1,    71,
+     188,    72,   142,    -1,    71,    11,    72,   142,    -1,     7,
+     144,    -1,     7,    36,   142,    -1,    23,    71,   142,    72,
+     142,    -1,   152,    -1,   153,    -1,    53,   142,    -1,    36,
+       7,   142,    -1,    29,   133,   166,   186,    68,    -1,    29,
+     133,    68,    -1,    22,   133,   167,   186,    68,    -1,    22,
+     133,    68,    -1,    17,   155,   158,    -1,   137,    59,   175,
+      60,   159,    -1,    59,   175,    60,   137,    59,   175,    60,
+     159,    -1,   196,    59,   191,    60,   206,    -1,    59,   211,
+      60,   137,    59,   191,    60,   206,    -1,    17,    59,   175,
+      60,   159,    -1,    -1,    67,   179,    68,    -1,    -1,   147,
+      -1,    59,   175,    60,    -1,   157,    -1,   160,   133,   179,
+      68,    -1,   160,     1,    -1,    -1,   162,    90,    62,    -1,
+      93,    -1,   163,    62,    93,    -1,    95,    -1,   164,    62,
+      95,    -1,    97,    -1,   165,    62,    97,    -1,   168,    -1,
+     166,    62,   168,    -1,   171,    -1,   167,    62,   171,    -1,
+     180,   142,   194,    -1,   170,   194,    -1,    59,   170,    60,
+     194,    -1,    53,   170,   194,    -1,    59,    53,   170,    60,
+     194,    -1,    53,    59,   170,    60,   194,    -1,    24,    -1,
+      24,    63,   137,    -1,   169,    -1,   134,   172,    -1,   169,
+      -1,    59,   169,    60,    -1,    59,   175,    60,   159,    -1,
+     132,    -1,   137,   132,    -1,   137,   141,    -1,   141,    -1,
+     173,    -1,   174,    75,   173,    -1,    -1,   174,   187,    -1,
+      -1,   100,    -1,    91,    -1,   177,    -1,     1,    -1,    98,
+      -1,   110,    -1,   118,    -1,   121,    -1,   113,    -1,    -1,
+     140,    66,   178,   176,    -1,    15,    -1,     5,   136,    -1,
+      10,   136,    -1,    18,   125,    -1,    13,   125,    -1,    19,
+     134,    -1,    27,   189,    -1,   176,    -1,   179,    62,   176,
+      -1,   134,    -1,   180,    75,   134,    -1,   135,    -1,   181,
+      75,   135,    -1,   123,    -1,   182,    75,   123,    -1,   131,
+      -1,   183,    75,   131,    -1,   128,    -1,   129,    -1,   184,
+      75,   128,    -1,   184,    75,   129,    -1,    -1,   184,   187,
+      -1,    -1,    62,    -1,    -1,    75,    -1,    -1,   123,    -1,
+      -1,   182,    -1,    -1,    98,    -1,    -1,   211,    -1,    -1,
+     212,    -1,    -1,   213,    -1,    -1,     3,    -1,    21,    24,
+       3,    62,    -1,    32,   196,   198,    62,    -1,     9,   196,
+      65,   209,    62,    -1,     9,   196,   198,    65,   209,    62,
+      -1,    31,   197,   198,    62,    -1,    17,   156,   158,    62,
+      -1,   138,    -1,   196,    -1,   200,    -1,   201,    -1,   202,
+      -1,   200,    -1,   202,    -1,   138,    -1,    24,    -1,    71,
+      72,   198,    -1,    71,     3,    72,   198,    -1,    23,    71,
+     198,    72,   198,    -1,    29,    67,   192,    68,    -1,    22,
+      67,   193,    68,    -1,    53,   198,    -1,     7,   199,    -1,
+       7,    59,   201,    60,    -1,     7,    36,   198,    -1,    36,
+       7,   198,    -1,    17,    59,   191,    60,   206,    -1,   137,
+     198,   194,    -1,   137,    11,   198,   194,    -1,   137,   198,
+     194,    -1,   137,    59,   191,    60,   206,    -1,   198,    -1,
+      -1,   207,    -1,    59,   191,    60,    -1,   198,    -1,     3,
+      -1,    50,     3,    -1,   137,    -1,   208,    -1,    59,   208,
+      49,   208,    60,    -1,    -1,   210,   195,    -1,   203,    -1,
+     211,    75,   203,    -1,   204,    -1,   212,    62,   204,    -1,
+     205,    -1,   213,    62,   205,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   124,   124,   133,   140,   151,   151,   166,   167,   170,
-     171,   172,   175,   211,   212,   215,   222,   229,   238,   251,
-     252,   259,   259,   272,   276,   277,   281,   286,   292,   296,
-     300,   304,   310,   316,   322,   327,   331,   335,   341,   347,
-     351,   355,   361,   365,   371,   372,   376,   382,   391,   397,
-     401,   406,   418,   434,   439,   446,   466,   484,   493,   512,
-     511,   523,   522,   553,   556,   563,   562,   573,   579,   588,
-     599,   605,   608,   616,   615,   626,   632,   644,   648,   653,
-     643,   665,   668,   672,   679,   683,   678,   701,   700,   716,
-     717,   721,   725,   729,   733,   737,   741,   745,   749,   753,
-     757,   761,   765,   769,   773,   777,   781,   785,   789,   794,
-     800,   801,   805,   816,   820,   824,   828,   833,   837,   847,
-     851,   856,   864,   868,   869,   880,   884,   888,   892,   896,
-     897,   903,   910,   916,   923,   926,   933,   939,   940,   947,
-     948,   966,   967,   970,   973,   977,   988,   997,  1003,  1006,
-    1009,  1016,  1017,  1023,  1032,  1040,  1052,  1057,  1063,  1064,
-    1065,  1066,  1067,  1068,  1074,  1075,  1076,  1077,  1083,  1084,
-    1085,  1086,  1087,  1093,  1094,  1097,  1100,  1101,  1102,  1103,
-    1104,  1107,  1108,  1121,  1125,  1130,  1135,  1140,  1144,  1145,
-    1148,  1154,  1161,  1167,  1174,  1180,  1191,  1202,  1231,  1270,
-    1293,  1310,  1319,  1322,  1330,  1334,  1338,  1345,  1351,  1356,
-    1368,  1371,  1379,  1380,  1386,  1387,  1393,  1397,  1403,  1404,
-    1410,  1414,  1420,  1443,  1448,  1454,  1460,  1467,  1476,  1485,
-    1500,  1506,  1511,  1515,  1522,  1535,  1536,  1542,  1548,  1551,
-    1555,  1561,  1564,  1573,  1576,  1577,  1581,  1582,  1588,  1589,
-    1590,  1591,  1592,  1594,  1593,  1608,  1613,  1617,  1621,  1625,
-    1629,  1634,  1653,  1659,  1667,  1671,  1677,  1681,  1687,  1691,
-    1697,  1701,  1710,  1714,  1718,  1722,  1728,  1731,  1739,  1740,
-    1742,  1743,  1746,  1749,  1752,  1755,  1758,  1761,  1764,  1767,
-    1770,  1773,  1776,  1779,  1782,  1785,  1791,  1795,  1799,  1803,
-    1807,  1811,  1829,  1836,  1847,  1848,  1849,  1852,  1853,  1856,
-    1860,  1870,  1874,  1878,  1882,  1886,  1890,  1894,  1900,  1906,
-    1914,  1922,  1928,  1935,  1951,  1969,  1973,  1979,  1982,  1985,
-    1989,  1999,  2003,  2018,  2026,  2027,  2037,  2038,  2041,  2045,
-    2051,  2055,  2061,  2065
+     171,   172,   175,   208,   219,   220,   223,   230,   237,   246,
+     259,   260,   267,   267,   280,   284,   285,   289,   294,   300,
+     304,   308,   312,   318,   324,   330,   335,   339,   343,   349,
+     355,   359,   363,   369,   373,   379,   380,   384,   390,   399,
+     405,   409,   414,   426,   442,   447,   454,   474,   492,   501,
+     520,   519,   531,   530,   561,   564,   571,   570,   581,   587,
+     596,   607,   613,   616,   624,   623,   634,   640,   652,   656,
+     661,   651,   673,   676,   680,   687,   691,   686,   709,   708,
+     724,   725,   729,   733,   737,   741,   745,   749,   753,   757,
+     761,   765,   769,   773,   777,   781,   785,   789,   793,   797,
+     802,   808,   809,   813,   824,   828,   832,   836,   841,   845,
+     855,   859,   864,   872,   876,   877,   888,   892,   896,   900,
+     904,   905,   911,   918,   924,   931,   934,   941,   947,   948,
+     955,   956,   974,   975,   978,   981,   985,   996,  1005,  1011,
+    1014,  1017,  1024,  1025,  1031,  1040,  1048,  1060,  1065,  1071,
+    1072,  1073,  1074,  1075,  1076,  1082,  1083,  1084,  1085,  1091,
+    1092,  1093,  1094,  1095,  1101,  1102,  1105,  1108,  1109,  1110,
+    1111,  1112,  1115,  1116,  1129,  1133,  1138,  1143,  1148,  1152,
+    1153,  1156,  1162,  1169,  1175,  1182,  1188,  1199,  1210,  1239,
+    1278,  1301,  1318,  1327,  1330,  1338,  1342,  1346,  1353,  1359,
+    1364,  1376,  1379,  1387,  1388,  1394,  1395,  1401,  1405,  1411,
+    1412,  1418,  1422,  1428,  1451,  1456,  1462,  1468,  1475,  1484,
+    1493,  1508,  1514,  1519,  1523,  1530,  1543,  1544,  1550,  1556,
+    1559,  1563,  1569,  1572,  1581,  1584,  1585,  1589,  1590,  1596,
+    1597,  1598,  1599,  1600,  1602,  1601,  1616,  1621,  1625,  1629,
+    1633,  1637,  1642,  1661,  1667,  1675,  1679,  1685,  1689,  1695,
+    1699,  1705,  1709,  1718,  1722,  1726,  1730,  1736,  1739,  1747,
+    1748,  1750,  1751,  1754,  1757,  1760,  1763,  1766,  1769,  1772,
+    1775,  1778,  1781,  1784,  1787,  1790,  1793,  1799,  1803,  1807,
+    1811,  1815,  1819,  1837,  1844,  1855,  1856,  1857,  1860,  1861,
+    1864,  1868,  1878,  1882,  1886,  1890,  1894,  1898,  1902,  1908,
+    1914,  1922,  1930,  1936,  1943,  1959,  1977,  1981,  1987,  1990,
+    1993,  1997,  2007,  2011,  2026,  2034,  2035,  2045,  2046,  2049,
+    2053,  2059,  2063,  2069,  2073
 };
 #endif
 
@@ -775,709 +777,710 @@ static const yytype_uint16 yytoknum[] =
 static const yytype_uint8 yyr1[] =
 {
        0,    76,    77,    78,    78,    80,    79,    81,    81,    82,
-      82,    82,    83,    84,    84,    85,    85,    85,    86,    87,
-      87,    89,    88,    90,    90,    90,    90,    90,    91,    91,
-      91,    91,    91,    91,    91,    91,    91,    91,    92,    93,
-      93,    93,    94,    94,    95,    95,    95,    96,    97,    98,
-      98,    98,    98,    98,    98,    99,    99,    99,    99,   101,
-     100,   103,   102,   104,   104,   106,   105,   107,   107,   108,
-     108,   108,   109,   111,   110,   112,   112,   114,   115,   116,
-     113,   117,   117,   117,   119,   120,   118,   122,   121,   123,
+      82,    82,    83,    83,    84,    84,    85,    85,    85,    86,
+      87,    87,    89,    88,    90,    90,    90,    90,    90,    91,
+      91,    91,    91,    91,    91,    91,    91,    91,    91,    92,
+      93,    93,    93,    94,    94,    95,    95,    95,    96,    97,
+      98,    98,    98,    98,    98,    98,    99,    99,    99,    99,
+     101,   100,   103,   102,   104,   104,   106,   105,   107,   107,
+     108,   108,   108,   109,   111,   110,   112,   112,   114,   115,
+     116,   113,   117,   117,   117,   119,   120,   118,   122,   121,
      123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
      123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     124,   124,   124,   124,   124,   124,   124,   124,   124,   125,
-     125,   125,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,   126,   126,   126,   126,   127,   128,   129,   129,   130,
-     130,   131,   131,   132,   133,   133,   134,   135,   136,   136,
-     137,   137,   137,   138,   139,   140,   141,   141,   142,   142,
-     142,   142,   142,   142,   143,   143,   143,   143,   144,   144,
-     144,   144,   144,   145,   145,   146,   147,   147,   147,   147,
-     147,   148,   148,   149,   149,   149,   149,   149,   149,   149,
-     150,   151,   152,   152,   153,   153,   154,   155,   155,   156,
-     156,   157,   158,   158,   159,   159,   159,   160,   161,   161,
-     162,   162,   163,   163,   164,   164,   165,   165,   166,   166,
-     167,   167,   168,   168,   168,   168,   168,   168,   169,   169,
-     170,   171,   171,   171,   172,   173,   173,   173,   173,   174,
-     174,   175,   175,   176,   176,   176,   176,   176,   177,   177,
-     177,   177,   177,   178,   177,   177,   177,   177,   177,   177,
-     177,   177,   179,   179,   180,   180,   181,   181,   182,   182,
-     183,   183,   184,   184,   184,   184,   185,   185,   186,   186,
-     187,   187,   188,   188,   189,   189,   190,   190,   191,   191,
-     192,   192,   193,   193,   194,   194,   195,   195,   195,   195,
-     195,   195,   196,   197,   198,   198,   198,   199,   199,   200,
+     123,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     125,   125,   125,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   127,   128,   129,   129,
+     130,   130,   131,   131,   132,   133,   133,   134,   135,   136,
+     136,   137,   137,   137,   138,   139,   140,   141,   141,   142,
+     142,   142,   142,   142,   142,   143,   143,   143,   143,   144,
+     144,   144,   144,   144,   145,   145,   146,   147,   147,   147,
+     147,   147,   148,   148,   149,   149,   149,   149,   149,   149,
+     149,   150,   151,   152,   152,   153,   153,   154,   155,   155,
+     156,   156,   157,   158,   158,   159,   159,   159,   160,   161,
+     161,   162,   162,   163,   163,   164,   164,   165,   165,   166,
+     166,   167,   167,   168,   168,   168,   168,   168,   168,   169,
+     169,   170,   171,   171,   171,   172,   173,   173,   173,   173,
+     174,   174,   175,   175,   176,   176,   176,   176,   176,   177,
+     177,   177,   177,   177,   178,   177,   177,   177,   177,   177,
+     177,   177,   177,   179,   179,   180,   180,   181,   181,   182,
+     182,   183,   183,   184,   184,   184,   184,   185,   185,   186,
+     186,   187,   187,   188,   188,   189,   189,   190,   190,   191,
+     191,   192,   192,   193,   193,   194,   194,   195,   195,   195,
+     195,   195,   195,   196,   197,   198,   198,   198,   199,   199,
      200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     201,   202,   203,   203,   204,   205,   205,   206,   206,   207,
-     207,   208,   208,   208,   209,   209,   210,   210,   211,   211,
-     212,   212,   213,   213
+     200,   201,   202,   203,   203,   204,   205,   205,   206,   206,
+     207,   207,   208,   208,   208,   209,   209,   210,   210,   211,
+     211,   212,   212,   213,   213
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     4,     0,     3,     0,     3,     0,     3,     2,
-       5,     3,     3,     1,     3,     1,     2,     2,     4,     0,
-       1,     0,     4,     0,     1,     1,     1,     1,     2,     5,
-       3,     2,     5,     7,     3,     2,     5,     3,     1,     2,
-       4,     3,     4,     3,     1,     2,     1,     1,     2,     1,
-       3,     3,     3,     2,     2,     3,     5,     5,     2,     0,
-       4,     0,     3,     0,     2,     0,     4,     4,     4,     5,
-       1,     1,     2,     0,     3,     1,     3,     0,     0,     0,
-       7,     0,     2,     2,     0,     0,     7,     0,     5,     1,
+       5,     3,     3,     2,     1,     3,     1,     2,     2,     4,
+       0,     1,     0,     4,     0,     1,     1,     1,     1,     2,
+       5,     3,     2,     5,     7,     3,     2,     5,     3,     1,
+       2,     4,     3,     4,     3,     1,     2,     1,     1,     2,
+       1,     3,     3,     3,     2,     2,     3,     5,     5,     2,
+       0,     4,     0,     3,     0,     2,     0,     4,     4,     4,
+       5,     1,     1,     2,     0,     3,     1,     3,     0,     0,
+       0,     7,     0,     2,     2,     0,     0,     7,     0,     5,
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       1,     2,     2,     2,     2,     2,     2,     2,     2,     3,
-       5,     6,     1,     1,     3,     5,     5,     4,     6,     1,
-       4,     5,     5,     7,     1,     0,     3,     1,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-       1,     1,     1,     4,     1,     1,     1,     2,     1,     1,
-       1,     1,     1,     3,     1,     1,     1,     2,     1,     1,
-       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     4,     4,     2,     3,     5,     1,     1,
-       2,     3,     5,     3,     5,     3,     3,     5,     8,     5,
-       8,     5,     0,     3,     0,     1,     3,     1,     4,     2,
-       0,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     3,     2,     4,     3,     5,     5,     1,     3,
-       1,     2,     1,     3,     4,     1,     2,     2,     1,     1,
-       3,     0,     2,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     1,     2,     2,     2,     2,
-       2,     2,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     1,     3,     3,     0,     2,     0,     1,
-       0,     1,     0,     1,     0,     1,     0,     1,     0,     1,
-       0,     1,     0,     1,     0,     1,     4,     4,     5,     6,
-       4,     4,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     4,     5,     4,     4,     2,     2,     4,     3,
-       3,     5,     3,     4,     3,     5,     1,     0,     1,     3,
-       1,     1,     2,     1,     1,     5,     0,     2,     1,     3,
-       1,     3,     1,     3
+       3,     1,     2,     2,     2,     2,     2,     2,     2,     2,
+       3,     5,     6,     1,     1,     3,     5,     5,     4,     6,
+       1,     4,     5,     5,     7,     1,     0,     3,     1,     4,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     0,
+       1,     1,     1,     1,     4,     1,     1,     1,     2,     1,
+       1,     1,     1,     1,     3,     1,     1,     1,     2,     1,
+       1,     1,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     3,     4,     4,     2,     3,     5,     1,
+       1,     2,     3,     5,     3,     5,     3,     3,     5,     8,
+       5,     8,     5,     0,     3,     0,     1,     3,     1,     4,
+       2,     0,     3,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     3,     2,     4,     3,     5,     5,     1,
+       3,     1,     2,     1,     3,     4,     1,     2,     2,     1,
+       1,     3,     0,     2,     0,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     1,     2,     2,     2,
+       2,     2,     2,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     1,     3,     3,     0,     2,     0,
+       1,     0,     1,     0,     1,     0,     1,     0,     1,     0,
+       1,     0,     1,     0,     1,     0,     1,     4,     4,     5,
+       6,     4,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     3,     4,     5,     4,     4,     2,     2,     4,
+       3,     3,     5,     3,     4,     3,     5,     1,     0,     1,
+       3,     1,     1,     2,     1,     1,     5,     0,     2,     1,
+       3,     1,     3,     1,     3
 };
 
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       5,     0,     3,     0,     1,     0,     7,     0,    21,   150,
-     152,     0,     0,   151,   210,    19,     6,   336,     0,     4,
-       0,     0,     0,    20,     0,     0,     0,    15,     0,     0,
-       9,     0,     0,     8,    27,   122,   148,     0,    38,   148,
-       0,   255,    73,     0,     0,     0,    77,     0,     0,   284,
-      87,     0,    84,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   282,     0,    24,     0,   248,   249,
-     252,   250,   251,    49,    89,   129,   139,   110,   155,   154,
-     123,     0,     0,     0,   175,   188,   189,    25,   207,     0,
-     134,    26,     0,    18,     0,     0,     0,     0,     0,     0,
-     337,   153,    11,    13,   278,    17,    21,    16,   149,   256,
-     146,     0,     0,     0,     0,   154,   181,   185,   171,   169,
-     170,   168,   257,   129,     0,   286,   241,     0,   202,   129,
-     260,   286,   144,   145,     0,     0,   268,   285,   261,     0,
-       0,   286,     0,     0,    35,    47,     0,    28,   266,   147,
-       0,   118,   113,   114,   117,   111,   112,     0,     0,   141,
-       0,   142,   166,   164,   165,   115,   116,     0,   283,     0,
-     211,     0,    31,     0,     0,     0,     0,     0,    54,     0,
-       0,     0,    53,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   135,     0,     0,
-     282,   253,     0,   135,   209,     0,     0,     0,     0,   302,
-       0,     0,   202,     0,     0,   303,     0,     0,    22,   279,
-       0,    12,   241,     0,     0,   186,   162,   160,   161,   158,
-     159,   190,     0,     0,   287,    71,     0,    74,     0,    70,
-     156,   235,   154,   238,   143,   239,   280,     0,   241,     0,
-     196,    78,    75,   150,     0,   195,     0,   278,   232,   220,
-       0,    63,     0,     0,   193,   264,   278,   218,   230,   294,
-       0,    85,    37,   216,   278,    48,    30,   212,   278,     0,
-       0,    39,     0,   167,   140,     0,     0,    34,   278,     0,
-       0,    50,    91,   106,   109,    92,    96,    97,    95,   107,
-      94,    93,    90,   108,    98,    99,   100,   101,   102,   103,
-     104,   105,   276,   119,   270,   280,     0,   124,   283,     0,
-       0,     0,   276,   247,    59,   245,   244,   262,   246,     0,
-      52,    51,   269,     0,     0,     0,     0,   310,     0,     0,
-       0,     0,     0,   309,     0,   304,   305,   306,     0,   338,
-       0,     0,   288,     0,     0,     0,    14,    10,     0,     0,
-       0,   172,   182,    65,    72,     0,     0,   286,   157,   236,
-     237,   281,   242,   204,     0,     0,     0,   286,     0,   228,
-       0,   241,   231,   279,     0,     0,     0,     0,   294,     0,
-       0,   279,     0,   295,   223,     0,   294,     0,   279,     0,
-     279,     0,    41,   267,     0,     0,     0,   191,   162,   160,
-     161,   159,   135,   184,   183,   279,     0,    43,     0,   135,
-     137,   272,   273,   280,     0,   280,   281,     0,     0,     0,
-     127,   282,   254,   130,     0,     0,     0,   208,     0,     0,
-     317,   307,   308,   288,   292,     0,   290,     0,   316,   331,
-       0,     0,   333,   334,     0,     0,     0,     0,     0,   294,
-       0,     0,   301,     0,   289,   296,   300,   297,   204,   163,
-       0,     0,     0,     0,   240,   241,   154,   205,   180,   178,
-     179,   176,   177,   201,   204,   203,    79,    76,   229,   233,
-       0,   221,   194,   187,     0,     0,    88,    61,    64,     0,
-     225,     0,   294,   219,   192,   265,   222,    63,   217,    36,
-     213,    29,    40,     0,   276,    44,   214,   278,    46,    32,
-      42,   276,     0,   281,   277,   132,   281,     0,   271,   120,
-     126,   125,     0,   131,     0,   263,   319,     0,     0,   310,
-       0,   309,     0,   326,   342,   293,     0,     0,     0,   340,
-     291,   320,   332,     0,   298,     0,   311,     0,   294,   322,
-       0,   339,   327,     0,    68,    67,   286,     0,   241,   197,
-      81,   204,     0,    58,     0,   294,   294,   224,     0,   163,
-       0,   279,     0,    45,     0,   137,   136,   274,   275,   121,
-     128,    60,   318,   327,   288,   315,     0,     0,   294,   314,
-       0,     0,   312,   299,   323,   288,   288,   330,   199,   328,
-      66,    69,   206,     0,     0,    80,   234,     0,     0,    55,
-       0,    62,   227,   226,    86,   133,   215,    33,   138,   321,
-       0,   343,   313,   324,   341,     0,     0,     0,   204,    83,
-      82,     0,     0,   327,   335,   327,   329,   198,    57,    56,
-     325,   200
+       5,     0,     3,     0,     1,     0,     7,     0,    22,   151,
+     153,     0,     0,   152,   211,    20,     6,   337,     0,     4,
+       0,     0,     0,    21,     0,     0,     0,    16,     0,     0,
+       9,    22,     0,     8,    28,   123,   149,     0,    39,   149,
+       0,   256,    74,     0,     0,     0,    78,     0,     0,   285,
+      88,     0,    85,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   283,     0,    25,     0,   249,   250,
+     253,   251,   252,    50,    90,   130,   140,   111,   156,   155,
+     124,     0,     0,     0,   176,   189,   190,    26,   208,     0,
+     135,    27,     0,    19,     0,     0,     0,     0,     0,     0,
+     338,   154,    11,    14,   279,    18,    22,    13,    17,   150,
+     257,   147,     0,     0,     0,     0,   155,   182,   186,   172,
+     170,   171,   169,   258,   130,     0,   287,   242,     0,   203,
+     130,   261,   287,   145,   146,     0,     0,   269,   286,   262,
+       0,     0,   287,     0,     0,    36,    48,     0,    29,   267,
+     148,     0,   119,   114,   115,   118,   112,   113,     0,     0,
+     142,     0,   143,   167,   165,   166,   116,   117,     0,   284,
+       0,   212,     0,    32,     0,     0,     0,     0,     0,    55,
+       0,     0,     0,    54,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   136,     0,
+       0,   283,   254,     0,   136,   210,     0,     0,     0,     0,
+     303,     0,     0,   203,     0,     0,   304,     0,     0,    23,
+     280,     0,    12,   242,     0,     0,   187,   163,   161,   162,
+     159,   160,   191,     0,     0,   288,    72,     0,    75,     0,
+      71,   157,   236,   155,   239,   144,   240,   281,     0,   242,
+       0,   197,    79,    76,   151,     0,   196,     0,   279,   233,
+     221,     0,    64,     0,     0,   194,   265,   279,   219,   231,
+     295,     0,    86,    38,   217,   279,    49,    31,   213,   279,
+       0,     0,    40,     0,   168,   141,     0,     0,    35,   279,
+       0,     0,    51,    92,   107,   110,    93,    97,    98,    96,
+     108,    95,    94,    91,   109,    99,   100,   101,   102,   103,
+     104,   105,   106,   277,   120,   271,   281,     0,   125,   284,
+       0,     0,     0,   277,   248,    60,   246,   245,   263,   247,
+       0,    53,    52,   270,     0,     0,     0,     0,   311,     0,
+       0,     0,     0,     0,   310,     0,   305,   306,   307,     0,
+     339,     0,     0,   289,     0,     0,     0,    15,    10,     0,
+       0,     0,   173,   183,    66,    73,     0,     0,   287,   158,
+     237,   238,   282,   243,   205,     0,     0,     0,   287,     0,
+     229,     0,   242,   232,   280,     0,     0,     0,     0,   295,
+       0,     0,   280,     0,   296,   224,     0,   295,     0,   280,
+       0,   280,     0,    42,   268,     0,     0,     0,   192,   163,
+     161,   162,   160,   136,   185,   184,   280,     0,    44,     0,
+     136,   138,   273,   274,   281,     0,   281,   282,     0,     0,
+       0,   128,   283,   255,   131,     0,     0,     0,   209,     0,
+       0,   318,   308,   309,   289,   293,     0,   291,     0,   317,
+     332,     0,     0,   334,   335,     0,     0,     0,     0,     0,
+     295,     0,     0,   302,     0,   290,   297,   301,   298,   205,
+     164,     0,     0,     0,     0,   241,   242,   155,   206,   181,
+     179,   180,   177,   178,   202,   205,   204,    80,    77,   230,
+     234,     0,   222,   195,   188,     0,     0,    89,    62,    65,
+       0,   226,     0,   295,   220,   193,   266,   223,    64,   218,
+      37,   214,    30,    41,     0,   277,    45,   215,   279,    47,
+      33,    43,   277,     0,   282,   278,   133,   282,     0,   272,
+     121,   127,   126,     0,   132,     0,   264,   320,     0,     0,
+     311,     0,   310,     0,   327,   343,   294,     0,     0,     0,
+     341,   292,   321,   333,     0,   299,     0,   312,     0,   295,
+     323,     0,   340,   328,     0,    69,    68,   287,     0,   242,
+     198,    82,   205,     0,    59,     0,   295,   295,   225,     0,
+     164,     0,   280,     0,    46,     0,   138,   137,   275,   276,
+     122,   129,    61,   319,   328,   289,   316,     0,     0,   295,
+     315,     0,     0,   313,   300,   324,   289,   289,   331,   200,
+     329,    67,    70,   207,     0,     0,    81,   235,     0,     0,
+      56,     0,    63,   228,   227,    87,   134,   216,    34,   139,
+     322,     0,   344,   314,   325,   342,     0,     0,     0,   205,
+      84,    83,     0,     0,   328,   336,   328,   330,   199,    58,
+      57,   326,   201
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     1,     6,     2,     3,    14,    21,    30,   104,    31,
-       8,    24,    16,    17,    65,   325,    67,   147,   515,   516,
-     143,   144,    68,   497,   326,   435,   498,   574,   386,   364,
-     470,   235,   236,   237,    69,   125,   251,    70,   131,   376,
-     570,   615,    71,   141,   397,    72,   139,    73,    74,    75,
-      76,   312,   421,   422,    77,   314,   241,   134,    78,   148,
-     109,   115,    13,    80,    81,   243,   244,   161,   117,    82,
-      83,   477,   226,    84,   228,   229,    85,    86,    87,   128,
-     212,    88,   250,   483,    89,    90,    22,   278,   517,   274,
-     266,   257,   267,   268,   269,   259,   382,   245,   246,   247,
-     327,   328,   320,   329,   270,   150,    92,   315,   423,   424,
-     220,   372,   169,   138,   252,   463,   548,   542,   394,   100,
-     210,   216,   607,   440,   345,   346,   347,   349,   549,   544,
-     608,   609,   453,   454,    25,   464,   550,   545
+       8,    24,    16,    17,    65,   326,    67,   148,   516,   517,
+     144,   145,    68,   498,   327,   436,   499,   575,   387,   365,
+     471,   236,   237,   238,    69,   126,   252,    70,   132,   377,
+     571,   616,    71,   142,   398,    72,   140,    73,    74,    75,
+      76,   313,   422,   423,    77,   315,   242,   135,    78,   149,
+     110,   116,    13,    80,    81,   244,   245,   162,   118,    82,
+      83,   478,   227,    84,   229,   230,    85,    86,    87,   129,
+     213,    88,   251,   484,    89,    90,    22,   279,   518,   275,
+     267,   258,   268,   269,   270,   260,   383,   246,   247,   248,
+     328,   329,   321,   330,   271,   151,    92,   316,   424,   425,
+     221,   373,   170,   139,   253,   464,   549,   543,   395,   100,
+     211,   217,   608,   441,   346,   347,   348,   350,   550,   545,
+     609,   610,   454,   455,    25,   465,   551,   546
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -516
+#define YYPACT_NINF -551
 static const yytype_int16 yypact[] =
 {
-    -516,    69,    27,    75,  -516,   161,  -516,   125,  -516,  -516,
-    -516,   164,   113,  -516,   156,   166,  -516,  -516,   142,  -516,
-      44,   145,  1036,  -516,   165,   275,   206,  -516,   139,   243,
-    -516,    75,   244,  -516,  -516,  -516,   161,    60,  -516,   161,
-     771,  -516,  -516,   150,   771,   161,  -516,   137,   177,  1473,
-    -516,   137,  -516,   434,   474,  1473,  1473,  1473,  1473,  1473,
-    1473,  1528,  1473,  1473,   710,   192,  -516,   486,  -516,  -516,
-    -516,  -516,  -516,   847,  -516,  -516,   190,   174,  -516,   200,
-    -516,   211,   223,   137,   238,  -516,  -516,  -516,   241,   186,
-    -516,  -516,    45,  -516,   224,    11,   279,   224,   224,   240,
-    -516,  -516,  -516,  -516,   252,  -516,  -516,  -516,  -516,  -516,
-    -516,   246,  1736,  1736,  1736,  -516,   255,  -516,  -516,  -516,
-    -516,  -516,  -516,    33,   174,  1473,  1697,   263,   265,   219,
-    -516,  1473,  -516,  -516,   347,  1736,  2030,   259,  -516,   302,
-     423,  1473,   228,  1736,  -516,  -516,   331,  -516,  -516,  -516,
-    1638,  -516,  -516,  -516,  -516,  -516,  -516,  1583,  1528,  2030,
-     278,  -516,    31,  -516,   183,  -516,  -516,   288,  2030,   292,
-    -516,   334,  -516,  1663,  1473,  1473,  1473,  1473,  -516,  1473,
-    1473,  1473,  -516,  1473,  1473,  1473,  1473,  1473,  1473,  1473,
-    1473,  1473,  1473,  1473,  1473,  1473,  1473,  -516,   934,   529,
-    1473,  -516,  1473,  -516,  -516,  1195,  1473,  1473,  1473,  -516,
-     782,   161,   265,   285,   364,  -516,  1264,  1264,  -516,   216,
-     290,  -516,  1697,   363,  1736,  -516,  -516,  -516,  -516,  -516,
-    -516,  -516,   312,   161,  -516,  -516,   340,  -516,    79,   323,
-    1736,  -516,  1697,  -516,  -516,  -516,   326,   327,  1697,  1195,
-    -516,  -516,   336,    85,   379,  -516,   354,   355,  -516,  -516,
-     353,  -516,    50,   112,  -516,  -516,   365,  -516,  -516,   426,
-    1671,  -516,  -516,  -516,   372,  -516,  -516,  -516,   378,  1473,
-     161,   361,  1740,  -516,   387,  1736,  1736,  -516,   397,  1473,
-     380,  2030,  2101,  -516,  2054,   616,   616,   616,   616,  -516,
-     616,   616,  2078,  -516,   585,   585,   585,   585,  -516,  -516,
-    -516,  -516,  1253,  -516,  -516,    40,  1308,  -516,  1903,   396,
-    1121,  2005,  1253,  -516,  -516,  -516,  -516,  -516,  -516,    29,
-     259,   259,  2030,  1811,   407,   400,   406,  -516,   401,   473,
-    1264,    52,    34,  -516,   418,  -516,  -516,  -516,   925,  -516,
-      19,   422,   161,   424,   428,   430,  -516,  -516,   435,  1736,
-     445,  -516,  -516,  -516,  -516,  1363,  1418,  1473,  -516,  -516,
-    -516,  1697,  -516,  1768,   452,   127,   340,  1473,   161,   425,
-     454,  1697,  -516,   554,   448,  1736,   102,   379,   426,   379,
-     457,   477,   455,  -516,  -516,   161,   426,   485,   161,   466,
-     161,   468,   259,  -516,  1473,  1779,  1736,  -516,   260,   274,
-     276,   310,  -516,  -516,  -516,   161,   469,   259,  1473,  -516,
-    1933,  -516,  -516,   464,   475,   467,  1528,   481,   484,   489,
-    -516,  1473,  -516,  -516,   478,  1195,  1121,  -516,  1264,   518,
-    -516,  -516,  -516,   161,  1837,  1264,   161,  1264,  -516,  -516,
-     552,   307,  -516,  -516,   495,   490,  1264,    52,  1264,   426,
-     161,   161,  -516,   498,   491,  -516,  -516,  -516,  1768,  -516,
-    1195,  1473,  1473,   506,  -516,  1697,   511,  -516,  -516,  -516,
-    -516,  -516,  -516,  -516,  1768,  -516,  -516,  -516,  -516,  -516,
-     505,  -516,  -516,  -516,  1528,   508,  -516,  -516,  -516,   512,
-    -516,   515,   426,  -516,  -516,  -516,  -516,  -516,  -516,  -516,
-    -516,  -516,   259,   517,  1253,  -516,  -516,   509,  1663,  -516,
-     259,  1253,  1253,  1253,  -516,  -516,  -516,   519,  -516,  -516,
-    -516,  -516,   510,  -516,   202,  -516,  -516,   520,   523,   525,
-     526,   528,   522,  -516,  -516,   532,   527,  1264,   536,  -516,
-     535,  -516,  -516,   567,  -516,  1264,  -516,   555,   426,  -516,
-     559,  -516,  1864,   231,  2030,  2030,  1473,   563,  1697,  -516,
-     611,  1768,    57,  -516,  1121,   426,   426,  -516,   226,   383,
-     558,   161,   571,   380,   564,  2030,  -516,  -516,  -516,  -516,
-    -516,  -516,  -516,  1864,   161,  -516,  1837,  1264,   426,  -516,
-     161,   307,  -516,  -516,  -516,   161,   161,  -516,  -516,  -516,
-    -516,  -516,  -516,   575,    26,  -516,  -516,  1473,  1473,  -516,
-    1528,   574,  -516,  -516,  -516,  -516,  -516,  -516,  -516,  -516,
-     577,  -516,  -516,  -516,  -516,   582,   583,   586,  1768,  -516,
-    -516,  1957,  1981,  1864,  -516,  1864,  -516,  -516,  -516,  -516,
-    -516,  -516
+    -551,    46,    48,   121,  -551,    58,  -551,   135,  -551,  -551,
+    -551,    65,    72,  -551,   147,   156,  -551,  -551,   112,  -551,
+      50,   134,   904,  -551,   162,   463,   209,  -551,    54,   237,
+    -551,   121,   245,  -551,  -551,  -551,    58,  1666,  -551,    58,
+     288,  -551,  -551,    34,   288,    58,  -551,    36,   184,  1467,
+    -551,    36,  -551,   316,   462,  1467,  1467,  1467,  1467,  1467,
+    1467,  1522,  1467,  1467,   965,   198,  -551,   506,  -551,  -551,
+    -551,  -551,  -551,   796,  -551,  -551,   195,     1,  -551,   199,
+    -551,   207,   216,    36,   221,  -551,  -551,  -551,   226,    53,
+    -551,  -551,   108,  -551,   214,   110,   269,   214,   214,   233,
+    -551,  -551,  -551,  -551,   238,  -551,  -551,  -551,  -551,  -551,
+    -551,  -551,   242,  1691,  1691,  1691,  -551,   240,  -551,  -551,
+    -551,  -551,  -551,  -551,   154,     1,  1467,  1658,   247,   246,
+     290,  -551,  1467,  -551,  -551,   419,  1691,  2004,   229,  -551,
+     272,   333,  1467,   258,  1691,  -551,  -551,   485,  -551,  -551,
+    -551,   656,  -551,  -551,  -551,  -551,  -551,  -551,  1577,  1522,
+    2004,   255,  -551,    10,  -551,    51,  -551,  -551,   251,  2004,
+     256,  -551,   508,  -551,  1632,  1467,  1467,  1467,  1467,  -551,
+    1467,  1467,  1467,  -551,  1467,  1467,  1467,  1467,  1467,  1467,
+    1467,  1467,  1467,  1467,  1467,  1467,  1467,  1467,  -551,  1192,
+     552,  1467,  -551,  1467,  -551,  -551,  1134,  1467,  1467,  1467,
+    -551,  1203,    58,   246,   260,   332,  -551,  1838,  1838,  -551,
+      76,   282,  -551,  1658,   344,  1691,  -551,  -551,  -551,  -551,
+    -551,  -551,  -551,   293,    58,  -551,  -551,   328,  -551,   178,
+     303,  1691,  -551,  1658,  -551,  -551,  -551,   295,   308,  1658,
+    1134,  -551,  -551,   309,   271,   364,  -551,   334,   337,  -551,
+    -551,   330,  -551,    11,    66,  -551,  -551,   342,  -551,  -551,
+     397,   664,  -551,  -551,  -551,   351,  -551,  -551,  -551,   352,
+    1467,    58,   343,  1719,  -551,   349,  1691,  1691,  -551,   356,
+    1467,   357,  2004,  2075,  -551,  2028,   692,   692,   692,   692,
+    -551,   692,   692,  2052,  -551,   593,   593,   593,   593,  -551,
+    -551,  -551,  -551,  1247,  -551,  -551,    22,  1302,  -551,  1877,
+     355,  1060,  1979,  1247,  -551,  -551,  -551,  -551,  -551,  -551,
+      86,   229,   229,  2004,  1777,   367,   361,   359,  -551,   366,
+     427,  1838,    52,    29,  -551,   370,  -551,  -551,  -551,   784,
+    -551,   118,   379,    58,   396,   400,   401,  -551,  -551,   404,
+    1691,   409,  -551,  -551,  -551,  -551,  1357,  1412,  1467,  -551,
+    -551,  -551,  1658,  -551,  1744,   414,   109,   328,  1467,    58,
+     416,   423,  1658,  -551,   561,   417,  1691,    44,   364,   397,
+     364,   428,   451,   421,  -551,  -551,    58,   397,   456,    58,
+     436,    58,   438,   229,  -551,  1467,  1752,  1691,  -551,    24,
+     171,   287,   338,  -551,  -551,  -551,    58,   439,   229,  1467,
+    -551,  1907,  -551,  -551,   425,   435,   430,  1522,   446,   448,
+     453,  -551,  1467,  -551,  -551,   443,  1134,  1060,  -551,  1838,
+     479,  -551,  -551,  -551,    58,  1805,  1838,    58,  1838,  -551,
+    -551,   514,   161,  -551,  -551,   460,   454,  1838,    52,  1838,
+     397,    58,    58,  -551,   458,   459,  -551,  -551,  -551,  1744,
+    -551,  1134,  1467,  1467,   467,  -551,  1658,   472,  -551,  -551,
+    -551,  -551,  -551,  -551,  -551,  1744,  -551,  -551,  -551,  -551,
+    -551,   477,  -551,  -551,  -551,  1522,   474,  -551,  -551,  -551,
+     482,  -551,   500,   397,  -551,  -551,  -551,  -551,  -551,  -551,
+    -551,  -551,  -551,   229,   501,  1247,  -551,  -551,   505,  1632,
+    -551,   229,  1247,  1247,  1247,  -551,  -551,  -551,   503,  -551,
+    -551,  -551,  -551,   511,  -551,   137,  -551,  -551,   518,   528,
+     532,   534,   535,   530,  -551,  -551,   537,   533,  1838,   536,
+    -551,   538,  -551,  -551,   560,  -551,  1838,  -551,   551,   397,
+    -551,   557,  -551,  1830,   151,  2004,  2004,  1467,   558,  1658,
+    -551,   605,  1744,   125,  -551,  1060,   397,   397,  -551,    75,
+     360,   554,    58,   563,   357,   556,  2004,  -551,  -551,  -551,
+    -551,  -551,  -551,  -551,  1830,    58,  -551,  1805,  1838,   397,
+    -551,    58,   161,  -551,  -551,  -551,    58,    58,  -551,  -551,
+    -551,  -551,  -551,  -551,   570,    78,  -551,  -551,  1467,  1467,
+    -551,  1522,   569,  -551,  -551,  -551,  -551,  -551,  -551,  -551,
+    -551,   576,  -551,  -551,  -551,  -551,   578,   582,   584,  1744,
+    -551,  -551,  1931,  1955,  1830,  -551,  1830,  -551,  -551,  -551,
+    -551,  -551,  -551
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -516,  -516,  -516,  -516,  -516,  -516,  -516,    -4,  -516,  -516,
-     618,  -516,   541,  -516,  -516,   629,  -516,  -137,   -25,    71,
-    -516,  -139,  -109,  -516,    39,  -516,  -516,  -516,   149,   281,
-    -516,  -516,  -516,  -516,  -516,  -516,   521,    47,  -516,  -516,
-    -516,  -516,  -516,  -516,  -516,  -516,  -516,   503,     1,   272,
-    -516,  -190,   136,  -450,   277,   -47,   431,     3,     5,   394,
-     636,    -5,   405,   239,  -516,   443,   249,   542,  -516,  -516,
-    -516,  -516,   -33,    38,   -31,    10,  -516,  -516,  -516,  -516,
-    -516,    43,   492,  -459,  -516,  -516,  -516,  -516,  -516,  -516,
-    -516,  -516,   311,  -127,  -227,   325,  -516,   335,  -516,  -220,
-    -293,   690,  -516,  -244,  -516,   -66,    67,   221,  -516,  -311,
-    -245,  -285,  -192,  -516,  -106,  -423,  -516,  -516,  -378,  -516,
-     377,  -516,   376,  -516,   385,   280,   389,   264,   120,   130,
-    -515,  -516,  -425,   271,  -516,   524,  -516,  -516
+    -551,  -551,  -551,  -551,  -551,  -551,  -551,    -6,  -551,  -551,
+     608,  -551,   -11,  -551,  -551,   623,  -551,  -134,   -25,    68,
+    -551,  -135,  -121,  -551,    39,  -551,  -551,  -551,   145,   278,
+    -551,  -551,  -551,  -551,  -551,  -551,   515,    41,  -551,  -551,
+    -551,  -551,  -551,  -551,  -551,  -551,  -551,   579,   493,    45,
+    -551,  -192,   138,  -246,   192,   -47,   415,   200,   -20,   380,
+     626,    -5,   449,   346,  -551,   426,    95,   509,  -551,  -551,
+    -551,  -551,   -33,    38,   -31,   -18,  -551,  -551,  -551,  -551,
+    -551,    43,   457,  -467,  -551,  -551,  -551,  -551,  -551,  -551,
+    -551,  -551,   280,  -126,  -227,   292,  -551,   302,  -551,  -220,
+    -297,   662,  -551,  -248,  -551,   -66,    18,   194,  -551,  -295,
+    -228,  -289,  -191,  -551,  -119,  -403,  -551,  -551,  -305,  -551,
+     -32,  -551,   127,  -551,   362,   250,   363,   232,    90,    98,
+    -550,  -551,  -426,   241,  -551,   486,  -551,  -551
 };
 
 /* 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 zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -269
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -270
 static const yytype_int16 yytable[] =
 {
-      12,   173,   358,   273,   118,   375,   120,   258,   319,   277,
-     500,   434,   384,   322,   160,    32,   234,    79,   506,   239,
-     538,   392,   234,    32,   103,   569,   553,   432,   374,   399,
-     427,   110,   234,   401,   110,   388,   390,   455,   127,  -259,
-     110,   108,   172,   416,   108,  -259,    46,    27,   145,   149,
-     130,   425,     5,   206,   140,   449,   151,   152,   153,   154,
-     155,   156,   149,   165,   166,   617,  -175,    37,     9,     4,
-     211,   163,   586,   588,   379,   119,     9,   111,   629,   460,
-     121,   559,    47,    48,     9,    11,   203,   365,  -228,    51,
-    -174,   436,   205,   324,   461,  -259,   112,   437,  -175,   162,
-       7,  -259,   450,    28,   164,   173,   456,    29,   494,   387,
-     207,   451,   616,   113,   495,   426,   137,    10,    11,   114,
-     208,   242,   618,   619,   577,    10,    11,   380,   650,   110,
-     651,    64,   620,    10,    11,   110,   379,   145,   524,   256,
-     527,   149,    27,   535,   366,   265,   288,  -228,   378,    15,
-     227,   227,   227,  -228,   208,   230,   230,   230,   151,   155,
-     499,   490,   501,     9,   227,   389,   149,    18,   163,   230,
-     496,   630,   132,   227,     9,    19,   635,    20,   230,   647,
-     604,   227,   636,   637,  -207,     9,   230,   204,   227,   436,
-      23,   534,   238,   230,   317,   485,   162,   622,   623,   102,
-      79,   164,    29,   580,   133,    26,   348,    33,   163,   126,
-     584,   227,    10,    11,    32,   356,   230,   242,  -207,    27,
-     633,   132,   514,    10,    11,  -258,   563,    93,   362,   521,
-     101,  -258,   494,   198,    10,    11,   162,   199,   495,   532,
-       9,   164,  -173,   242,    79,   200,   105,   107,   135,   408,
-    -207,   410,     9,   133,   170,   567,   258,   197,   234,   508,
-     227,   473,   227,   510,   436,   230,  -146,   230,   234,   429,
-     591,   487,   582,   330,   331,   149,   116,   201,   227,    29,
-     227,  -258,   202,   230,    94,   230,   227,  -258,   272,    10,
-      11,   230,    95,   436,   624,  -171,    96,  -174,    11,   610,
-    -173,    10,    11,   214,   218,   222,    97,    98,   227,  -169,
-     449,  -170,   123,   230,   219,    79,   129,   124,   233,  -171,
-     409,   124,   248,   227,   227,   411,   163,  -171,   230,   230,
-     621,     9,   249,  -169,   208,  -170,   452,   261,   284,    99,
-     478,  -169,   480,  -170,   352,  -168,   402,   348,   613,   518,
-     357,   116,   116,   116,   162,     9,   417,   450,     9,   164,
-     285,   225,   231,   232,   286,   116,   242,   353,   476,  -168,
-     359,   253,   361,   488,   116,   363,   242,  -168,   110,   528,
-      10,    11,   116,   481,   260,   367,   110,   373,   256,   116,
-     110,   276,   275,   145,   287,   149,   265,   227,   377,   281,
-     505,   371,   230,   379,    10,    11,   254,    10,    11,   227,
-     149,   479,   116,   381,   230,   255,   482,   383,  -172,   227,
-      10,    11,   290,   227,   230,   385,   404,   391,   230,   393,
-      79,    79,   330,   331,   398,   478,   163,   480,   348,   540,
-     400,   547,  -172,   227,   227,   418,   452,   253,   230,   230,
-    -172,   478,   452,   480,   412,   560,   348,   234,     9,   415,
-     611,   116,   431,   116,   162,    79,   443,   444,   446,   164,
-     242,   512,   213,   360,   215,   217,   262,   445,   481,   116,
-     447,   116,   263,   457,   462,   520,   465,   116,   378,   368,
-     466,   264,   467,   142,   481,   468,    10,    11,     9,   209,
-     209,   253,   209,   209,   163,   469,   479,    10,    11,   116,
-       9,   482,   484,   227,   489,   518,   492,   502,   230,   396,
-     507,   116,   479,   504,   116,   116,   509,   482,   511,   519,
-     262,   407,   162,   146,   413,   414,   263,   164,   478,   523,
-     480,   529,   526,   525,   530,   171,   533,    10,    11,   531,
-      10,    11,   136,     9,   339,   552,   227,   554,   562,    10,
-      11,   230,   555,   242,   159,   571,   461,   168,   566,    79,
-     568,   581,   575,   528,   573,   576,   149,   579,   253,   589,
-     592,   481,   590,   593,  -150,   594,   344,  -151,   316,   348,
-     595,   540,   354,   355,   596,   547,   452,   600,   116,   597,
-     348,   348,    10,    11,   599,   478,   227,   480,   407,   479,
-     116,   230,   116,   254,   482,   343,   601,   603,   605,   176,
-     116,   343,   343,   612,   116,   614,   625,    10,    11,   184,
-     163,   627,   628,   188,   493,   638,   436,   643,   193,   194,
-     195,   196,   644,   645,   116,   116,   646,   221,   481,   106,
-     176,    66,   626,   639,   225,   513,   578,   486,   162,   587,
-     184,   640,   271,   164,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   369,   403,   122,   479,   291,   292,   293,
-     294,   482,   295,   296,   297,   370,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     283,   159,   503,   318,   351,   321,   474,   116,   491,   136,
-     136,   332,    91,    35,   116,   572,   448,    37,   441,   537,
-     634,   167,   442,   116,   459,   561,   631,   111,   557,     0,
-       0,     0,    47,    48,     9,   350,     0,     0,   343,    51,
-       0,     0,     0,     0,     0,   343,    55,     0,     0,     0,
-       0,     0,     0,   343,     0,     0,     0,   116,     0,    56,
-      57,     0,    58,    59,     0,     0,    60,   583,     0,    61,
-       0,     0,     0,     0,    35,     0,     0,     0,    37,    62,
-      63,    64,   136,    10,    11,     0,     0,     0,   111,   333,
-       0,     0,   136,    47,    48,     9,     0,     0,     0,   334,
-      51,     0,     0,     0,   335,   336,   337,   116,     0,     0,
-     116,   338,     0,     0,   536,   420,     0,     0,   339,   159,
-     543,   546,     0,   551,     0,   420,     0,     0,     0,     0,
-      61,     0,   556,     0,   558,   340,     0,     0,     0,     0,
-       0,     0,    64,   343,    10,    11,     0,   341,     0,   541,
-     343,   174,   343,   342,     0,  -268,    11,     0,     0,     0,
-       0,   343,     0,   343,     0,     0,     0,     0,   136,   136,
-       0,     0,     0,     0,     0,     0,     0,   116,     0,     0,
-     175,   176,     0,   177,   178,   179,   180,   181,     0,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,     0,     0,     0,   136,     0,     0,
-       0,     0,  -268,     0,     0,     0,     0,     0,     0,     0,
-       0,   136,  -268,   598,     0,     0,     0,     0,     0,   159,
-       0,   602,   333,     0,   168,     0,   458,    35,     0,     0,
-       0,    37,   334,     0,     0,     0,     0,   335,   336,   337,
-       0,   111,   343,     0,   338,     0,    47,    48,     9,     0,
-     343,   339,     0,    51,     0,     0,     0,   343,     0,     0,
-     157,     0,   543,   632,   564,   565,     0,     0,   340,     0,
-       0,     0,     0,    56,    57,     0,    58,   158,     0,     0,
-      60,     0,     0,    61,   313,     0,   342,   159,   343,    11,
-       0,   541,   343,    62,    63,    64,     0,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,   420,     0,     0,
-       0,     0,     0,     0,   420,   585,   420,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    -2,    34,     0,    35,
-       0,    36,     0,    37,     0,    38,    39,     0,   343,    40,
-     343,    41,    42,    43,    44,    45,    46,     0,    47,    48,
-       9,     0,     0,    49,    50,    51,    52,    53,    54,     0,
-       0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    56,    57,     0,    58,    59,
-       0,     0,    60,     0,     0,    61,     0,     0,   -23,     0,
-       0,     0,     0,     0,     0,    62,    63,    64,     0,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     641,   642,   323,   159,    35,     0,    36,  -243,    37,     0,
-      38,    39,     0,  -243,    40,     0,    41,    42,   111,    44,
-      45,    46,     0,    47,    48,     9,     0,     0,    49,    50,
-      51,    52,    53,    54,     0,     0,     0,    55,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      56,    57,     0,    58,    59,     0,     0,    60,     0,     0,
-      61,     0,     0,  -243,     0,     0,     0,     0,   324,  -243,
-      62,    63,    64,     0,    10,    11,   323,     0,    35,     0,
-      36,     0,    37,     0,    38,    39,     0,     0,    40,     0,
-      41,    42,   111,    44,    45,    46,     0,    47,    48,     9,
-       0,     0,    49,    50,    51,    52,    53,    54,     0,     0,
-       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    56,    57,     0,    58,    59,     0,
-       0,    60,     0,     0,    61,     0,    35,  -243,     0,     0,
-      37,     0,   324,  -243,    62,    63,    64,     0,    10,    11,
-     111,   333,     0,     0,     0,    47,    48,     9,     0,     0,
-       0,   334,    51,     0,     0,     0,   335,   336,   337,    55,
-       0,     0,     0,   338,     0,     0,     0,     0,     0,     0,
-     339,     0,    56,    57,     0,    58,    59,     0,     0,    60,
-       0,    35,    61,     0,     0,    37,     0,   340,     0,     0,
-     419,     0,    62,    63,    64,   111,    10,    11,     0,     0,
-      47,    48,     9,     0,     0,   342,     0,    51,    11,   428,
-       0,     0,     0,     0,   157,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    56,    57,     0,
-      58,   158,     0,     0,    60,     0,    35,    61,     0,     0,
-      37,     0,     0,     0,     0,     0,     0,    62,    63,    64,
-     111,    10,    11,     0,     0,    47,    48,     9,     0,   471,
-       0,     0,    51,     0,     0,     0,     0,     0,     0,    55,
+      12,   174,   376,   359,   119,   235,   121,   240,   274,   259,
+     320,   235,   323,   278,   161,    32,   109,    79,   570,   109,
+     107,   235,   103,    32,   433,   131,   554,   428,   435,   375,
+     385,   111,   456,   426,   111,   380,   389,   391,   128,   393,
+     111,   539,   173,   164,   630,  -176,     4,   400,   146,   150,
+     495,   402,  -208,    27,   205,   450,   496,    27,     9,  -172,
+     199,   417,   150,   214,   200,   216,   218,   138,    18,  -175,
+     388,   133,   201,     5,     9,   120,     9,  -176,     9,    27,
+     122,   495,     9,  -172,   501,   124,  -208,   496,   133,   130,
+     380,  -172,   507,   127,   651,   222,   652,   427,    46,   163,
+       9,   457,   451,   134,   165,   617,   174,    10,    11,    28,
+    -174,   452,   497,    29,   102,   257,   207,    29,  -208,   390,
+     134,   266,   243,    10,    11,    10,    11,    10,    11,   381,
+     111,    10,    11,   618,    19,   525,   111,   528,   146,    29,
+     536,   164,   150,   625,   239,   325,     7,   289,   437,    10,
+      11,   228,   228,   228,   438,   560,   231,   231,   231,    15,
+    -260,   500,   491,   502,   450,   228,  -260,   150,    20,   212,
+     231,   437,   648,   208,   228,    26,   636,   486,   461,   231,
+      23,   164,   228,   209,    11,     9,   366,   231,   535,   228,
+     619,   620,   631,   462,   231,   318,    33,   163,   578,   437,
+     621,    79,   165,   637,   638,   592,  -170,   349,   226,   232,
+     233,   451,   228,   437,   357,    32,  -260,   231,   243,   611,
+     581,   515,  -260,   564,    93,   331,   332,   585,   522,   363,
+    -170,   261,   125,   101,    10,    11,   125,   163,  -170,   276,
+     105,   533,   165,   367,   243,    79,   282,   235,   108,   474,
+     409,   141,   411,   209,   605,   136,   568,   235,   259,   488,
+     171,   228,   198,   228,   509,  -147,   231,   511,   231,   291,
+     430,   623,   624,   202,  -229,   203,   150,   587,   589,   228,
+    -175,   228,     9,   204,   231,  -174,   231,   228,    11,   206,
+     583,    35,   231,   215,   634,    37,  -259,   219,   403,   164,
+     220,   223,  -259,   234,   209,   112,   249,   262,   418,   228,
+      47,    48,     9,   250,   231,   285,    79,    51,   273,   353,
+     361,   410,  -171,   286,   228,   228,   412,   622,   287,   231,
+     231,    10,    11,  -229,   379,   354,   369,   453,   345,  -229,
+       9,   479,   358,   481,   355,   356,  -171,    61,   349,   614,
+     519,   360,  -259,   362,  -171,   163,   482,   254,  -259,    64,
+     165,    10,    11,   364,   257,   368,   397,   243,   374,   477,
+     372,   378,   266,  -169,   489,   143,   506,   243,   408,   111,
+     529,   414,   415,   117,   331,   332,   263,   111,   380,    10,
+      11,   111,   264,   382,   146,  -173,   150,  -169,   228,   384,
+     394,   265,   386,   231,   392,  -169,    10,    11,   405,   164,
+     228,   150,   480,   399,   401,   231,   413,   483,   416,  -173,
+     228,   432,   419,   513,   228,   231,   444,  -173,   445,   231,
+     446,    79,    79,   447,   448,   458,   479,   521,   481,   349,
+     541,   463,   548,   254,   228,   228,   235,   453,   612,   231,
+     231,   482,   479,   453,   481,   408,   561,   349,   466,   117,
+     117,   117,   467,   468,   469,   163,    79,   482,   449,   470,
+     165,   243,    94,   117,   485,   254,   460,   164,   255,   379,
+      95,   494,   117,   490,    96,   493,     9,   256,   503,   505,
+     117,   508,    10,    11,    97,    98,   510,   117,   512,   520,
+     524,   226,   514,   526,   263,   527,   530,   480,   531,     9,
+     264,   534,   483,   532,   228,   340,   519,   553,   563,   231,
+     117,   147,   555,   480,    10,    11,   556,    99,   483,   567,
+       9,   569,     9,   163,   462,    10,    11,   572,   165,   479,
+     574,   481,   576,   210,   210,   277,   210,   210,   152,   153,
+     154,   155,   156,   157,   482,   166,   167,   228,    10,    11,
+     577,   580,   231,   590,   243,   172,   537,   582,   288,   117,
+      79,   117,   544,   547,   529,   552,     9,   150,   593,    10,
+      11,    10,    11,   591,   557,   254,   559,   117,   594,   117,
+     349,  -151,   541,   595,  -152,   117,   548,   453,   596,   597,
+     601,   349,   349,   164,   600,   598,   479,   228,   481,   602,
+     480,   317,   231,   604,   584,   483,   606,   117,   613,   615,
+     255,   482,   626,   628,   629,    10,    11,   177,   137,   117,
+     639,   437,   117,   117,    10,    11,   644,   185,   645,   106,
+     160,   189,   646,   169,   647,    66,   194,   195,   196,   197,
+     627,   152,   156,   579,   640,   487,   641,   272,   370,   163,
+     344,   404,   588,    37,   165,   123,   344,   344,   284,   371,
+     352,    37,   504,   112,   475,   599,   492,   480,    47,    48,
+       9,   112,   483,   603,    91,    51,    47,    48,     9,   573,
+     538,   635,   224,    51,   562,   632,   442,   443,   351,   558,
+     224,     0,     0,     0,     0,     0,   117,     0,     0,   114,
+       0,     0,     0,     0,     0,   225,     0,   114,   117,     0,
+     117,   280,     0,   225,   544,   633,   177,    64,   117,    10,
+      11,   281,   117,     0,     0,    64,   185,    10,    11,   396,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,     0,
+       0,     0,   117,   117,   292,   293,   294,   295,     0,   296,
+     297,   298,     0,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,     0,   160,     0,
+     319,     0,   322,   344,     0,     0,   137,   137,   333,     0,
+     344,   334,     0,     0,     0,   459,     0,     0,   344,     0,
+     175,   335,     0,     0,  -269,     0,   336,   337,   338,     0,
+       0,     0,     0,   339,     0,   117,     0,     0,     0,     0,
+     340,     0,   117,     0,     0,     0,     0,     0,     0,   176,
+     177,   117,   178,   179,   180,   181,   182,   341,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,     0,     0,   343,     0,     0,    11,   137,
+       0,  -269,     0,     0,     0,   117,     0,     0,     0,   137,
+       0,  -269,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   344,     0,
+       0,     0,   421,     0,   542,   344,   160,   344,     0,     0,
+       0,     0,   421,     0,    -2,    34,   344,    35,   344,    36,
+       0,    37,     0,    38,    39,   117,     0,    40,   117,    41,
+      42,    43,    44,    45,    46,     0,    47,    48,     9,     0,
+       0,    49,    50,    51,    52,    53,    54,     0,     0,     0,
+      55,     0,     0,     0,     0,   137,   137,     0,     0,     0,
+       0,     0,     0,    56,    57,     0,    58,    59,     0,     0,
+      60,     0,     0,    61,     0,     0,   -24,     0,    35,     0,
+       0,     0,    37,    62,    63,    64,   168,    10,    11,     0,
+       0,     0,   112,     0,   137,   117,     0,    47,    48,     9,
+       0,     0,     0,     0,    51,     0,     0,   344,   137,     0,
+       0,    55,     0,     0,     0,   344,   160,     0,     0,     0,
+       0,   169,   344,     0,    56,    57,     0,    58,    59,     0,
+       0,    60,     0,     0,    61,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    62,    63,    64,     0,    10,    11,
+       0,     0,     0,   344,     0,     0,   542,   344,     0,     0,
+       0,   565,   566,     0,     0,     0,     0,     0,     0,     0,
+       0,   324,     0,    35,     0,    36,  -244,    37,     0,    38,
+      39,     0,  -244,    40,   160,    41,    42,   112,    44,    45,
+      46,     0,    47,    48,     9,     0,     0,    49,    50,    51,
+      52,    53,    54,   344,   421,   344,    55,     0,     0,     0,
+       0,   421,   586,   421,     0,     0,     0,     0,     0,    56,
+      57,     0,    58,    59,     0,     0,    60,     0,     0,    61,
+       0,     0,  -244,     0,     0,     0,     0,   325,  -244,    62,
+      63,    64,     0,    10,    11,   324,     0,    35,     0,    36,
+       0,    37,     0,    38,    39,     0,     0,    40,     0,    41,
+      42,   112,    44,    45,    46,     0,    47,    48,     9,     0,
+       0,    49,    50,    51,    52,    53,    54,     0,     0,     0,
+      55,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    56,    57,     0,    58,    59,     0,     0,
+      60,     0,     0,    61,     0,    35,  -244,   642,   643,    37,
+     160,   325,  -244,    62,    63,    64,     0,    10,    11,   112,
+     334,     0,     0,     0,    47,    48,     9,     0,     0,     0,
+     335,    51,     0,     0,     0,   336,   337,   338,   158,     0,
+       0,     0,   339,     0,     0,     0,     0,     0,     0,   340,
+       0,    56,    57,     0,    58,   159,     0,     0,    60,     0,
+      35,    61,   314,     0,    37,     0,   341,     0,     0,     0,
+       0,    62,    63,    64,   112,    10,    11,     0,   342,    47,
+      48,     9,     0,     0,   343,     0,    51,    11,     0,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,    35,    61,     0,     0,    37,
+       0,     0,     0,     0,   420,     0,    62,    63,    64,   112,
+      10,    11,     0,     0,    47,    48,     9,     0,     0,     0,
+       0,    51,     0,   429,     0,     0,     0,     0,   158,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    56,    57,     0,    58,    59,     0,     0,    60,
-       0,    35,    61,     0,     0,    37,     0,     0,     0,     0,
-       0,     0,    62,    63,    64,   111,    10,    11,     0,     0,
-      47,    48,     9,     0,   472,     0,     0,    51,     0,     0,
-       0,     0,     0,     0,    55,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    56,    57,     0,
-      58,    59,     0,     0,    60,     0,    35,    61,     0,     0,
-      37,     0,     0,     0,     0,     0,     0,    62,    63,    64,
-     111,    10,    11,     0,     0,    47,    48,     9,     0,     0,
-       0,     0,    51,     0,     0,     0,     0,     0,     0,    55,
+       0,    56,    57,     0,    58,   159,     0,     0,    60,     0,
+      35,    61,     0,     0,    37,     0,     0,     0,     0,     0,
+       0,    62,    63,    64,   112,    10,    11,     0,     0,    47,
+      48,     9,     0,   472,     0,     0,    51,     0,     0,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,    35,    61,     0,     0,    37,
+       0,     0,     0,     0,     0,     0,    62,    63,    64,   112,
+      10,    11,     0,     0,    47,    48,     9,     0,   473,     0,
+       0,    51,     0,     0,     0,     0,     0,     0,    55,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    56,    57,     0,    58,    59,     0,     0,    60,
-       0,    35,    61,     0,     0,    37,     0,     0,     0,     0,
-       0,     0,    62,    63,    64,   111,    10,    11,     0,     0,
-      47,    48,     9,     0,     0,     0,     0,    51,     0,     0,
-       0,     0,     0,     0,   157,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    56,    57,     0,
-      58,   158,     0,     0,    60,     0,    35,    61,     0,     0,
-     282,     0,     0,     0,     0,     0,     0,    62,    63,    64,
-     111,    10,    11,     0,     0,    47,    48,     9,     0,     0,
-       0,     0,    51,     0,     0,     0,     0,     0,     0,    55,
+       0,    56,    57,     0,    58,    59,     0,     0,    60,     0,
+      35,    61,     0,     0,    37,     0,     0,     0,     0,     0,
+       0,    62,    63,    64,   112,    10,    11,     0,     0,    47,
+      48,     9,     0,     0,     0,     0,    51,     0,     0,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,    35,    61,     0,     0,    37,
+       0,     0,     0,     0,     0,     0,    62,    63,    64,   112,
+      10,    11,     0,     0,    47,    48,     9,     0,     0,     0,
+       0,    51,     0,     0,     0,     0,     0,     0,   158,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    56,    57,     0,    58,    59,     0,     0,    60,
-       0,     0,    61,     0,     0,    37,     0,     0,     0,     0,
-       0,     0,    62,    63,    64,   111,    10,    11,     0,     0,
-      47,    48,     9,     0,     0,     0,     0,    51,     0,     0,
-      37,     0,     0,     0,   223,     0,     0,     0,    37,     0,
-     111,     0,     0,     0,     0,    47,    48,     9,   111,     0,
-       0,   113,    51,    47,    48,     9,     0,   224,     0,   223,
-      51,     0,     0,   279,    37,     0,     0,   223,   240,    64,
-       0,    10,    11,   280,   111,     0,   113,     0,     0,    47,
-      48,     9,   224,     0,   113,     0,    51,     0,   289,     0,
-     224,     0,     0,   223,    64,     0,    10,    11,   280,     0,
-       0,     0,    64,    37,    10,    11,   395,    37,     0,     0,
-     113,     0,     0,   111,     0,     0,   224,   111,    47,    48,
-       9,     0,    47,    48,     9,    51,     0,     0,    64,    51,
-      10,    11,   223,     0,     0,    37,   405,     0,     0,     0,
-       0,     0,     0,     0,     0,   111,   282,     0,     0,   113,
-      47,    48,     9,   113,     0,   224,   111,    51,     0,   406,
-       0,    47,    48,     9,   223,     0,     0,    64,    51,    10,
-      11,    64,     0,    10,    11,   223,     0,     0,   333,     0,
-       0,   113,     0,     0,     0,     0,     0,   475,   334,     0,
-       0,     0,   113,   335,   336,   337,     0,     0,   224,    64,
-     338,    10,    11,     0,   333,     0,     0,   438,     0,     0,
-      64,     0,    10,    11,   334,     0,     0,     0,     0,   335,
-     336,   539,     0,     0,   340,     0,   338,     0,     0,     0,
-     439,   333,     0,   339,     0,     0,     0,     0,     0,     0,
-       0,   334,   342,     0,     0,    11,   335,   336,   337,     0,
-     340,     0,     0,   338,     0,     0,     0,     0,     0,     0,
-     339,     0,     0,     0,     0,     0,     0,     0,   342,     0,
-      10,    11,     0,     0,     0,     0,     0,   340,     0,     0,
-       0,     0,     0,   606,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   342,   175,   176,    11,   177,
-       0,   179,   180,   181,     0,     0,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-       0,     0,     0,     0,     0,     0,   175,   176,     0,   177,
-       0,   179,   180,   181,     0,   430,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     175,   176,     0,   177,     0,   179,   180,   181,     0,   522,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   175,   176,     0,   177,     0,   179,
-     180,   181,     0,   648,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   175,   176,
-       0,   177,     0,   179,   180,   181,     0,   649,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,     0,   175,   176,   433,   177,     0,   179,   180,
-     181,     0,     0,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   175,   176,     0,
-       0,     0,   179,   180,   181,     0,     0,   183,   184,   185,
+       0,    56,    57,     0,    58,   159,     0,     0,    60,     0,
+      35,    61,     0,     0,   283,     0,     0,     0,     0,     0,
+       0,    62,    63,    64,   112,    10,    11,     0,     0,    47,
+      48,     9,     0,     0,     0,     0,    51,     0,     0,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    56,    57,     0,    58,
+      59,     0,     0,    60,     0,     0,    61,     0,     0,    37,
+       0,     0,     0,     0,     0,     0,    62,    63,    64,   112,
+      10,    11,     0,     0,    47,    48,     9,     0,     0,     0,
+       0,    51,     0,     0,     0,    37,     0,     0,   224,   241,
+       0,     0,     0,    37,     0,   112,     0,     0,     0,     0,
+      47,    48,     9,   112,     0,   114,     0,    51,    47,    48,
+       9,   225,     0,     0,   224,    51,     0,   290,    37,     0,
+       0,     0,   113,    64,     0,    10,    11,   281,   112,     0,
+       0,   114,     0,    47,    48,     9,     0,   225,     0,   114,
+      51,     0,     0,     0,     0,   115,    37,   224,     0,    64,
+       0,    10,    11,     0,     0,     0,   112,    64,     0,    10,
+      11,    47,    48,     9,   114,     0,     0,     0,    51,     0,
+     225,    37,     0,     0,     0,   406,     0,     0,     0,   283,
+       0,   112,    64,     0,    10,    11,    47,    48,     9,   112,
+       0,     0,   114,    51,    47,    48,     9,     0,   407,     0,
+     224,    51,     0,     0,   334,     0,     0,     0,   224,     0,
+      64,     0,    10,    11,   335,     0,     0,   114,     0,   336,
+     337,   338,     0,   476,     0,   114,   339,     0,     0,     0,
+       0,   225,   334,   439,     0,    64,     0,    10,    11,     0,
+       0,     0,   335,    64,     0,    10,    11,   336,   337,   540,
+     341,     0,     0,     0,   339,     0,   440,   334,     0,     0,
+       0,   340,     0,     0,     0,   334,     0,   335,   343,     0,
+       0,    11,   336,   337,   338,   335,     0,     0,   341,   339,
+     336,   337,   338,     0,     0,     0,   340,   339,     0,     0,
+       0,     0,     0,     0,   340,     0,   343,     0,    10,    11,
+       0,     0,     0,   341,     0,     0,     0,     0,     0,   607,
+       0,   341,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   343,     0,     0,    11,     0,     0,     0,     0,   343,
+     176,   177,    11,   178,     0,   180,   181,   182,     0,     0,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,     0,     0,     0,     0,     0,     0,
+     176,   177,     0,   178,     0,   180,   181,   182,     0,   431,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   176,   177,     0,   178,     0,   180,
+     181,   182,     0,   523,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   176,   177,
+       0,   178,     0,   180,   181,   182,     0,   649,   184,   185,
      186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   175,   176,     0,     0,     0,   179,   180,   181,     0,
-       0,   183,   184,   185,   186,     0,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   176,     0,     0,     0,   179,
-     180,   181,     0,     0,   183,   184,   185,   186,     0,   188,
-     189,   190,   191,   192,   193,   194,   195,   196
+     196,   197,   176,   177,     0,   178,     0,   180,   181,   182,
+       0,   650,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,     0,   176,   177,   434,
+     178,     0,   180,   181,   182,     0,     0,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   176,   177,     0,     0,     0,   180,   181,   182,     0,
+       0,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   176,   177,     0,     0,     0,
+     180,   181,   182,     0,     0,   184,   185,   186,   187,     0,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   177,
+       0,     0,     0,   180,   181,   182,     0,     0,   184,   185,
+     186,   187,     0,   189,   190,   191,   192,   193,   194,   195,
+     196,   197
 };
 
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-551))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
 static const yytype_int16 yycheck[] =
 {
-       5,    67,   222,   142,    37,   249,    37,   134,   200,   146,
-     388,   322,   257,   203,    61,    20,   125,    22,   396,   125,
-     443,   266,   131,    28,    28,   484,   451,   320,   248,   274,
-     315,    36,   141,   278,    39,   262,   263,     3,    43,     6,
-      45,    36,    67,   288,    39,    12,    20,     3,    53,    54,
-      45,    11,    25,     8,    51,     3,    55,    56,    57,    58,
-      59,    60,    67,    62,    63,     8,    35,     7,    24,     0,
-      59,    61,   522,   523,    24,    37,    24,    17,   593,    60,
-      37,   459,    22,    23,    24,    74,    83,     8,     3,    29,
-      59,    62,    89,    67,    75,    62,    36,    68,    67,    61,
-      25,    68,    50,    59,    61,   171,    72,    63,     6,    59,
-      65,    59,   571,    53,    12,    75,    49,    73,    74,    59,
-      75,   126,    65,    66,   502,    73,    74,   254,   643,   134,
-     645,    71,    75,    73,    74,   140,    24,   142,   423,   134,
-     425,   146,     3,   436,    65,   140,   171,    62,    63,    24,
-     112,   113,   114,    68,    75,   112,   113,   114,   157,   158,
-     387,   381,   389,    24,   126,    53,   171,     3,   158,   126,
-      68,   594,    35,   135,    24,    62,   601,    21,   135,   638,
-     558,   143,   605,   606,     1,    24,   143,     1,   150,    62,
-      24,   435,   125,   150,   199,    68,   158,   575,   576,    60,
-     205,   158,    63,   514,    67,    63,   211,    62,   198,    59,
-     521,   173,    73,    74,   219,   219,   173,   222,    35,     3,
-     598,    35,   412,    73,    74,     6,   470,    62,   233,   419,
-      24,    12,     6,    59,    73,    74,   198,    63,    12,   431,
-      24,   198,    59,   248,   249,    71,     3,     3,    71,   282,
-      67,   282,    24,    67,    62,   475,   383,    67,   367,   398,
-     222,   367,   224,   400,    62,   222,    66,   224,   377,   316,
-      68,   377,   517,   206,   207,   280,    37,    66,   240,    63,
-     242,    62,    59,   240,     9,   242,   248,    68,    60,    73,
-      74,   248,    17,    62,    68,    35,    21,    59,    74,    68,
-      59,    73,    74,    24,    64,    59,    31,    32,   270,    35,
-       3,    35,    40,   270,    62,   320,    44,    40,    63,    59,
-     282,    44,    59,   285,   286,   282,   316,    67,   285,   286,
-     574,    24,    67,    59,    75,    59,   341,    35,    60,    64,
-     373,    67,   373,    67,    59,    35,   279,   352,   568,   415,
-      60,   112,   113,   114,   316,    24,   289,    50,    24,   316,
-      72,   112,   113,   114,    72,   126,   371,     3,   373,    59,
-       7,    24,    60,   378,   135,    35,   381,    67,   383,   426,
-      73,    74,   143,   373,   135,    62,   391,    60,   383,   150,
-     395,    60,   143,   398,    60,   400,   391,   359,    62,   150,
-     395,    75,   359,    24,    73,    74,    59,    73,    74,   371,
-     415,   373,   173,    59,   371,    68,   373,    62,    35,   381,
-      73,    74,   173,   385,   381,    72,    65,    62,   385,     3,
-     435,   436,   365,   366,    62,   468,   426,   468,   443,   444,
-      62,   446,    59,   405,   406,    65,   451,    24,   405,   406,
-      67,   484,   457,   484,    67,   460,   461,   566,    24,    62,
-     566,   222,    66,   224,   426,   470,    59,    67,    67,   426,
-     475,   404,    95,   224,    97,    98,    53,    71,   468,   240,
-       7,   242,    59,    65,    62,   418,    62,   248,    63,   240,
-      62,    68,    62,    59,   484,    60,    73,    74,    24,    94,
-      95,    24,    97,    98,   494,    60,   468,    73,    74,   270,
-      24,   468,    60,   475,    60,   581,    68,    60,   475,   270,
-      35,   282,   484,    68,   285,   286,    60,   484,    60,    60,
-      53,   282,   494,    59,   285,   286,    59,   494,   571,    75,
-     571,    60,    75,    68,    60,    59,    68,    73,    74,    60,
-      73,    74,    49,    24,    36,     3,   518,    62,    60,    73,
-      74,   518,    72,   568,    61,    60,    75,    64,    62,   574,
-      59,    62,    60,   620,    66,    60,   581,    60,    24,    60,
-      60,   571,    72,    60,    59,    59,   210,    59,    59,   594,
-      68,   596,   216,   217,    62,   600,   601,    62,   359,    72,
-     605,   606,    73,    74,    68,   638,   568,   638,   359,   571,
-     371,   568,   373,    59,   571,   210,    49,    62,    59,    34,
-     381,   216,   217,    60,   385,    14,    68,    73,    74,    44,
-     620,    60,    68,    48,   385,    60,    62,    60,    53,    54,
-      55,    56,    60,    60,   405,   406,    60,   106,   638,    31,
-      34,    22,   581,   614,   405,   406,   507,   376,   620,   523,
-      44,   614,   141,   620,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,   242,   280,    39,   638,   174,   175,   176,
-     177,   638,   179,   180,   181,   242,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     158,   198,   391,   200,   212,   202,   371,   468,   383,   206,
-     207,   208,    22,     3,   475,   494,   340,     7,   333,   439,
-     600,    11,   333,   484,   348,   461,   596,    17,   457,    -1,
-      -1,    -1,    22,    23,    24,   211,    -1,    -1,   333,    29,
-      -1,    -1,    -1,    -1,    -1,   340,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,    -1,    -1,    -1,   518,    -1,    49,
-      50,    -1,    52,    53,    -1,    -1,    56,   518,    -1,    59,
-      -1,    -1,    -1,    -1,     3,    -1,    -1,    -1,     7,    69,
-      70,    71,   279,    73,    74,    -1,    -1,    -1,    17,     7,
-      -1,    -1,   289,    22,    23,    24,    -1,    -1,    -1,    17,
-      29,    -1,    -1,    -1,    22,    23,    24,   568,    -1,    -1,
-     571,    29,    -1,    -1,   438,   312,    -1,    -1,    36,   316,
-     444,   445,    -1,   447,    -1,   322,    -1,    -1,    -1,    -1,
-      59,    -1,   456,    -1,   458,    53,    -1,    -1,    -1,    -1,
-      -1,    -1,    71,   438,    73,    74,    -1,    65,    -1,   444,
-     445,     4,   447,    71,    -1,     8,    74,    -1,    -1,    -1,
-      -1,   456,    -1,   458,    -1,    -1,    -1,    -1,   365,   366,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   638,    -1,    -1,
-      33,    34,    -1,    36,    37,    38,    39,    40,    -1,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    -1,    -1,    -1,   404,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   418,    75,   547,    -1,    -1,    -1,    -1,    -1,   426,
-      -1,   555,     7,    -1,   431,    -1,    11,     3,    -1,    -1,
-      -1,     7,    17,    -1,    -1,    -1,    -1,    22,    23,    24,
-      -1,    17,   547,    -1,    29,    -1,    22,    23,    24,    -1,
-     555,    36,    -1,    29,    -1,    -1,    -1,   562,    -1,    -1,
-      36,    -1,   596,   597,   471,   472,    -1,    -1,    53,    -1,
+       5,    67,   250,   223,    37,   126,    37,   126,   143,   135,
+     201,   132,   204,   147,    61,    20,    36,    22,   485,    39,
+      31,   142,    28,    28,   321,    45,   452,   316,   323,   249,
+     258,    36,     3,    11,    39,    24,   263,   264,    43,   267,
+      45,   444,    67,    61,   594,    35,     0,   275,    53,    54,
+       6,   279,     1,     3,     1,     3,    12,     3,    24,    35,
+      59,   289,    67,    95,    63,    97,    98,    49,     3,    59,
+      59,    35,    71,    25,    24,    37,    24,    67,    24,     3,
+      37,     6,    24,    59,   389,    40,    35,    12,    35,    44,
+      24,    67,   397,    59,   644,   106,   646,    75,    20,    61,
+      24,    72,    50,    67,    61,   572,   172,    73,    74,    59,
+      59,    59,    68,    63,    60,   135,     8,    63,    67,    53,
+      67,   141,   127,    73,    74,    73,    74,    73,    74,   255,
+     135,    73,    74,     8,    62,   424,   141,   426,   143,    63,
+     437,   159,   147,    68,   126,    67,    25,   172,    62,    73,
+      74,   113,   114,   115,    68,   460,   113,   114,   115,    24,
+       6,   388,   382,   390,     3,   127,    12,   172,    21,    59,
+     127,    62,   639,    65,   136,    63,   602,    68,    60,   136,
+      24,   199,   144,    75,    74,    24,     8,   144,   436,   151,
+      65,    66,   595,    75,   151,   200,    62,   159,   503,    62,
+      75,   206,   159,   606,   607,    68,    35,   212,   113,   114,
+     115,    50,   174,    62,   220,   220,    62,   174,   223,    68,
+     515,   413,    68,   471,    62,   207,   208,   522,   420,   234,
+      59,   136,    40,    24,    73,    74,    44,   199,    67,   144,
+       3,   432,   199,    65,   249,   250,   151,   368,     3,   368,
+     283,    51,   283,    75,   559,    71,   476,   378,   384,   378,
+      62,   223,    67,   225,   399,    66,   223,   401,   225,   174,
+     317,   576,   577,    66,     3,    59,   281,   523,   524,   241,
+      59,   243,    24,    83,   241,    59,   243,   249,    74,    89,
+     518,     3,   249,    24,   599,     7,     6,    64,   280,   317,
+      62,    59,    12,    63,    75,    17,    59,    35,   290,   271,
+      22,    23,    24,    67,   271,    60,   321,    29,    60,    59,
+     225,   283,    35,    72,   286,   287,   283,   575,    72,   286,
+     287,    73,    74,    62,    63,     3,   241,   342,   211,    68,
+      24,   374,    60,   374,   217,   218,    59,    59,   353,   569,
+     416,     7,    62,    60,    67,   317,   374,    24,    68,    71,
+     317,    73,    74,    35,   384,    62,   271,   372,    60,   374,
+      75,    62,   392,    35,   379,    59,   396,   382,   283,   384,
+     427,   286,   287,    37,   366,   367,    53,   392,    24,    73,
+      74,   396,    59,    59,   399,    35,   401,    59,   360,    62,
+       3,    68,    72,   360,    62,    67,    73,    74,    65,   427,
+     372,   416,   374,    62,    62,   372,    67,   374,    62,    59,
+     382,    66,    65,   405,   386,   382,    59,    67,    67,   386,
+      71,   436,   437,    67,     7,    65,   469,   419,   469,   444,
+     445,    62,   447,    24,   406,   407,   567,   452,   567,   406,
+     407,   469,   485,   458,   485,   360,   461,   462,    62,   113,
+     114,   115,    62,    62,    60,   427,   471,   485,   341,    60,
+     427,   476,     9,   127,    60,    24,   349,   495,    59,    63,
+      17,   386,   136,    60,    21,    68,    24,    68,    60,    68,
+     144,    35,    73,    74,    31,    32,    60,   151,    60,    60,
+      75,   406,   407,    68,    53,    75,    60,   469,    60,    24,
+      59,    68,   469,    60,   476,    36,   582,     3,    60,   476,
+     174,    59,    62,   485,    73,    74,    72,    64,   485,    62,
+      24,    59,    24,   495,    75,    73,    74,    60,   495,   572,
+      66,   572,    60,    94,    95,    60,    97,    98,    55,    56,
+      57,    58,    59,    60,   572,    62,    63,   519,    73,    74,
+      60,    60,   519,    60,   569,    59,   439,    62,    60,   223,
+     575,   225,   445,   446,   621,   448,    24,   582,    60,    73,
+      74,    73,    74,    72,   457,    24,   459,   241,    60,   243,
+     595,    59,   597,    59,    59,   249,   601,   602,    68,    62,
+      62,   606,   607,   621,    68,    72,   639,   569,   639,    49,
+     572,    59,   569,    62,   519,   572,    59,   271,    60,    14,
+      59,   639,    68,    60,    68,    73,    74,    34,    49,   283,
+      60,    62,   286,   287,    73,    74,    60,    44,    60,    31,
+      61,    48,    60,    64,    60,    22,    53,    54,    55,    56,
+     582,   158,   159,   508,   615,   377,   615,   142,   243,   621,
+     211,   281,   524,     7,   621,    39,   217,   218,   159,   243,
+     213,     7,   392,    17,   372,   548,   384,   639,    22,    23,
+      24,    17,   639,   556,    22,    29,    22,    23,    24,   495,
+     440,   601,    36,    29,   462,   597,   334,   334,   212,   458,
+      36,    -1,    -1,    -1,    -1,    -1,   360,    -1,    -1,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    -1,    53,   372,    -1,
+     374,    65,    -1,    59,   597,   598,    34,    71,   382,    73,
+      74,    75,   386,    -1,    -1,    71,    44,    73,    74,    75,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      -1,    -1,   406,   407,   175,   176,   177,   178,    -1,   180,
+     181,   182,    -1,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,    -1,   199,    -1,
+     201,    -1,   203,   334,    -1,    -1,   207,   208,   209,    -1,
+     341,     7,    -1,    -1,    -1,    11,    -1,    -1,   349,    -1,
+       4,    17,    -1,    -1,     8,    -1,    22,    23,    24,    -1,
+      -1,    -1,    -1,    29,    -1,   469,    -1,    -1,    -1,    -1,
+      36,    -1,   476,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,   485,    36,    37,    38,    39,    40,    53,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    -1,    -1,    71,    -1,    -1,    74,   280,
+      -1,    65,    -1,    -1,    -1,   519,    -1,    -1,    -1,   290,
+      -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   439,    -1,
+      -1,    -1,   313,    -1,   445,   446,   317,   448,    -1,    -1,
+      -1,    -1,   323,    -1,     0,     1,   457,     3,   459,     5,
+      -1,     7,    -1,     9,    10,   569,    -1,    13,   572,    15,
+      16,    17,    18,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      36,    -1,    -1,    -1,    -1,   366,   367,    -1,    -1,    -1,
       -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,
-      56,    -1,    -1,    59,    60,    -1,    71,   494,   593,    74,
-      -1,   596,   597,    69,    70,    71,    -1,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   514,    -1,    -1,
-      -1,    -1,    -1,    -1,   521,   522,   523,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,     1,    -1,     3,
-      -1,     5,    -1,     7,    -1,     9,    10,    -1,   643,    13,
-     645,    15,    16,    17,    18,    19,    20,    -1,    22,    23,
-      24,    -1,    -1,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,    53,
-      -1,    -1,    56,    -1,    -1,    59,    -1,    -1,    62,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    70,    71,    -1,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     617,   618,     1,   620,     3,    -1,     5,     6,     7,    -1,
-       9,    10,    -1,    12,    13,    -1,    15,    16,    17,    18,
-      19,    20,    -1,    22,    23,    24,    -1,    -1,    27,    28,
-      29,    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
-      59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    67,    68,
-      69,    70,    71,    -1,    73,    74,     1,    -1,     3,    -1,
-       5,    -1,     7,    -1,     9,    10,    -1,    -1,    13,    -1,
-      15,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
-      -1,    -1,    27,    28,    29,    30,    31,    32,    -1,    -1,
-      -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,
-      -1,    56,    -1,    -1,    59,    -1,     3,    62,    -1,    -1,
-       7,    -1,    67,    68,    69,    70,    71,    -1,    73,    74,
-      17,     7,    -1,    -1,    -1,    22,    23,    24,    -1,    -1,
-      -1,    17,    29,    -1,    -1,    -1,    22,    23,    24,    36,
-      -1,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,
-      -1,     3,    59,    -1,    -1,     7,    -1,    53,    -1,    -1,
-      67,    -1,    69,    70,    71,    17,    73,    74,    -1,    -1,
-      22,    23,    24,    -1,    -1,    71,    -1,    29,    74,    31,
-      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,
-      52,    53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,
-       7,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,
-      17,    73,    74,    -1,    -1,    22,    23,    24,    -1,    26,
+      56,    -1,    -1,    59,    -1,    -1,    62,    -1,     3,    -1,
+      -1,    -1,     7,    69,    70,    71,    11,    73,    74,    -1,
+      -1,    -1,    17,    -1,   405,   639,    -1,    22,    23,    24,
+      -1,    -1,    -1,    -1,    29,    -1,    -1,   548,   419,    -1,
+      -1,    36,    -1,    -1,    -1,   556,   427,    -1,    -1,    -1,
+      -1,   432,   563,    -1,    49,    50,    -1,    52,    53,    -1,
+      -1,    56,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    69,    70,    71,    -1,    73,    74,
+      -1,    -1,    -1,   594,    -1,    -1,   597,   598,    -1,    -1,
+      -1,   472,   473,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     1,    -1,     3,    -1,     5,     6,     7,    -1,     9,
+      10,    -1,    12,    13,   495,    15,    16,    17,    18,    19,
+      20,    -1,    22,    23,    24,    -1,    -1,    27,    28,    29,
+      30,    31,    32,   644,   515,   646,    36,    -1,    -1,    -1,
+      -1,   522,   523,   524,    -1,    -1,    -1,    -1,    -1,    49,
+      50,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    59,
+      -1,    -1,    62,    -1,    -1,    -1,    -1,    67,    68,    69,
+      70,    71,    -1,    73,    74,     1,    -1,     3,    -1,     5,
+      -1,     7,    -1,     9,    10,    -1,    -1,    13,    -1,    15,
+      16,    17,    18,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
+      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,
+      56,    -1,    -1,    59,    -1,     3,    62,   618,   619,     7,
+     621,    67,    68,    69,    70,    71,    -1,    73,    74,    17,
+       7,    -1,    -1,    -1,    22,    23,    24,    -1,    -1,    -1,
+      17,    29,    -1,    -1,    -1,    22,    23,    24,    36,    -1,
       -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+       3,    59,    60,    -1,     7,    -1,    53,    -1,    -1,    -1,
+      -1,    69,    70,    71,    17,    73,    74,    -1,    65,    22,
+      23,    24,    -1,    -1,    71,    -1,    29,    74,    -1,    -1,
+      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,     7,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,    -1,
+      -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,
-      -1,     3,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    70,    71,    17,    73,    74,    -1,    -1,
-      22,    23,    24,    -1,    26,    -1,    -1,    29,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,
-      52,    53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,
-       7,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,
-      17,    73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,
-      -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+       3,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    71,    17,    73,    74,    -1,    -1,    22,
+      23,    24,    -1,    26,    -1,    -1,    29,    -1,    -1,    -1,
+      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,     7,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    26,    -1,
+      -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,
-      -1,     3,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    70,    71,    17,    73,    74,    -1,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    29,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,
-      52,    53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,
-       7,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,
-      17,    73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,
-      -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+       3,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    71,    17,    73,    74,    -1,    -1,    22,
+      23,    24,    -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,
+      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,     3,    59,    -1,    -1,     7,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,    -1,
+      -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,
-      -1,    -1,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    70,    71,    17,    73,    74,    -1,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    29,    -1,    -1,
-       7,    -1,    -1,    -1,    36,    -1,    -1,    -1,     7,    -1,
-      17,    -1,    -1,    -1,    -1,    22,    23,    24,    17,    -1,
-      -1,    53,    29,    22,    23,    24,    -1,    59,    -1,    36,
-      29,    -1,    -1,    65,     7,    -1,    -1,    36,    11,    71,
-      -1,    73,    74,    75,    17,    -1,    53,    -1,    -1,    22,
-      23,    24,    59,    -1,    53,    -1,    29,    -1,    65,    -1,
-      59,    -1,    -1,    36,    71,    -1,    73,    74,    75,    -1,
-      -1,    -1,    71,     7,    73,    74,    75,     7,    -1,    -1,
-      53,    -1,    -1,    17,    -1,    -1,    59,    17,    22,    23,
-      24,    -1,    22,    23,    24,    29,    -1,    -1,    71,    29,
-      73,    74,    36,    -1,    -1,     7,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    17,     7,    -1,    -1,    53,
-      22,    23,    24,    53,    -1,    59,    17,    29,    -1,    59,
-      -1,    22,    23,    24,    36,    -1,    -1,    71,    29,    73,
-      74,    71,    -1,    73,    74,    36,    -1,    -1,     7,    -1,
-      -1,    53,    -1,    -1,    -1,    -1,    -1,    59,    17,    -1,
-      -1,    -1,    53,    22,    23,    24,    -1,    -1,    59,    71,
-      29,    73,    74,    -1,     7,    -1,    -1,    36,    -1,    -1,
-      71,    -1,    73,    74,    17,    -1,    -1,    -1,    -1,    22,
-      23,    24,    -1,    -1,    53,    -1,    29,    -1,    -1,    -1,
-      59,     7,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    17,    71,    -1,    -1,    74,    22,    23,    24,    -1,
-      53,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
-      73,    74,    -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,
-      -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    71,    33,    34,    74,    36,
-      -1,    38,    39,    40,    -1,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    -1,    36,
-      -1,    38,    39,    40,    -1,    72,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      33,    34,    -1,    36,    -1,    38,    39,    40,    -1,    66,
+      -1,    49,    50,    -1,    52,    53,    -1,    -1,    56,    -1,
+       3,    59,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    71,    17,    73,    74,    -1,    -1,    22,
+      23,    24,    -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,
+      -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,    52,
+      53,    -1,    -1,    56,    -1,    -1,    59,    -1,    -1,     7,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    17,
+      73,    74,    -1,    -1,    22,    23,    24,    -1,    -1,    -1,
+      -1,    29,    -1,    -1,    -1,     7,    -1,    -1,    36,    11,
+      -1,    -1,    -1,     7,    -1,    17,    -1,    -1,    -1,    -1,
+      22,    23,    24,    17,    -1,    53,    -1,    29,    22,    23,
+      24,    59,    -1,    -1,    36,    29,    -1,    65,     7,    -1,
+      -1,    -1,    36,    71,    -1,    73,    74,    75,    17,    -1,
+      -1,    53,    -1,    22,    23,    24,    -1,    59,    -1,    53,
+      29,    -1,    -1,    -1,    -1,    59,     7,    36,    -1,    71,
+      -1,    73,    74,    -1,    -1,    -1,    17,    71,    -1,    73,
+      74,    22,    23,    24,    53,    -1,    -1,    -1,    29,    -1,
+      59,     7,    -1,    -1,    -1,    36,    -1,    -1,    -1,     7,
+      -1,    17,    71,    -1,    73,    74,    22,    23,    24,    17,
+      -1,    -1,    53,    29,    22,    23,    24,    -1,    59,    -1,
+      36,    29,    -1,    -1,     7,    -1,    -1,    -1,    36,    -1,
+      71,    -1,    73,    74,    17,    -1,    -1,    53,    -1,    22,
+      23,    24,    -1,    59,    -1,    53,    29,    -1,    -1,    -1,
+      -1,    59,     7,    36,    -1,    71,    -1,    73,    74,    -1,
+      -1,    -1,    17,    71,    -1,    73,    74,    22,    23,    24,
+      53,    -1,    -1,    -1,    29,    -1,    59,     7,    -1,    -1,
+      -1,    36,    -1,    -1,    -1,     7,    -1,    17,    71,    -1,
+      -1,    74,    22,    23,    24,    17,    -1,    -1,    53,    29,
+      22,    23,    24,    -1,    -1,    -1,    36,    29,    -1,    -1,
+      -1,    -1,    -1,    -1,    36,    -1,    71,    -1,    73,    74,
+      -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    59,
+      -1,    53,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    71,    -1,    -1,    74,    -1,    -1,    -1,    -1,    71,
+      33,    34,    74,    36,    -1,    38,    39,    40,    -1,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    -1,    -1,    -1,    -1,    -1,
+      33,    34,    -1,    36,    -1,    38,    39,    40,    -1,    72,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    33,    34,    -1,    36,    -1,    38,
       39,    40,    -1,    66,    43,    44,    45,    46,    47,    48,
       49,    50,    51,    52,    53,    54,    55,    56,    33,    34,
       -1,    36,    -1,    38,    39,    40,    -1,    66,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    -1,    33,    34,    60,    36,    -1,    38,    39,
-      40,    -1,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    33,    34,    -1,
-      -1,    -1,    38,    39,    40,    -1,    -1,    43,    44,    45,
+      55,    56,    33,    34,    -1,    36,    -1,    38,    39,    40,
+      -1,    66,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    -1,    33,    34,    60,
+      36,    -1,    38,    39,    40,    -1,    -1,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    33,    34,    -1,    -1,    -1,    38,    39,    40,    -1,
-      -1,    43,    44,    45,    46,    -1,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    34,    -1,    -1,    -1,    38,
-      39,    40,    -1,    -1,    43,    44,    45,    46,    -1,    48,
-      49,    50,    51,    52,    53,    54,    55,    56
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    33,    34,    -1,    -1,    -1,
+      38,    39,    40,    -1,    -1,    43,    44,    45,    46,    -1,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    34,
+      -1,    -1,    -1,    38,    39,    40,    -1,    -1,    43,    44,
+      45,    46,    -1,    48,    49,    50,    51,    52,    53,    54,
+      55,    56
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1494,62 +1497,62 @@ static const yytype_uint8 yystos[] =
      113,   118,   121,   123,   124,   125,   126,   130,   134,   137,
      139,   140,   145,   146,   149,   152,   153,   154,   157,   160,
      161,   177,   182,    62,     9,    17,    21,    31,    32,    64,
-     195,    24,    60,    83,    84,     3,    86,     3,   134,   136,
-     137,    17,    36,    53,    59,   137,   139,   144,   148,   149,
-     150,   157,   136,   125,   130,   111,    59,   137,   155,   125,
-     134,   114,    35,    67,   133,    71,   123,   182,   189,   122,
-     133,   119,    59,    96,    97,   137,    59,    93,   135,   137,
-     181,   124,   124,   124,   124,   124,   124,    36,    53,   123,
-     131,   143,   149,   151,   157,   124,   124,    11,   123,   188,
-      62,    59,    94,   181,     4,    33,    34,    36,    37,    38,
-      39,    40,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    67,    59,    63,
-      71,    66,    59,   133,     1,   133,     8,    65,    75,   138,
-     196,    59,   156,   196,    24,   196,   197,   196,    64,    62,
-     186,    88,    59,    36,    59,   142,   148,   149,   150,   151,
-     157,   142,   142,    63,    98,   107,   108,   109,   182,   190,
-      11,   132,   137,   141,   142,   173,   174,   175,    59,    67,
-     158,   112,   190,    24,    59,    68,   134,   167,   169,   171,
-     142,    35,    53,    59,    68,   134,   166,   168,   169,   170,
-     180,   112,    60,    97,   165,   142,    60,    93,   163,    65,
-      75,   142,     7,   143,    60,    72,    72,    60,    94,    65,
-     142,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     195,    24,    60,    83,    84,     3,    86,    88,     3,   134,
+     136,   137,    17,    36,    53,    59,   137,   139,   144,   148,
+     149,   150,   157,   136,   125,   130,   111,    59,   137,   155,
+     125,   134,   114,    35,    67,   133,    71,   123,   182,   189,
+     122,   133,   119,    59,    96,    97,   137,    59,    93,   135,
+     137,   181,   124,   124,   124,   124,   124,   124,    36,    53,
+     123,   131,   143,   149,   151,   157,   124,   124,    11,   123,
+     188,    62,    59,    94,   181,     4,    33,    34,    36,    37,
+      38,    39,    40,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    67,    59,
+      63,    71,    66,    59,   133,     1,   133,     8,    65,    75,
+     138,   196,    59,   156,   196,    24,   196,   197,   196,    64,
+      62,   186,    88,    59,    36,    59,   142,   148,   149,   150,
+     151,   157,   142,   142,    63,    98,   107,   108,   109,   182,
+     190,    11,   132,   137,   141,   142,   173,   174,   175,    59,
+      67,   158,   112,   190,    24,    59,    68,   134,   167,   169,
+     171,   142,    35,    53,    59,    68,   134,   166,   168,   169,
+     170,   180,   112,    60,    97,   165,   142,    60,    93,   163,
+      65,    75,   142,     7,   143,    60,    72,    72,    60,    94,
+      65,   142,   123,   123,   123,   123,   123,   123,   123,   123,
      123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   127,    60,   131,   183,    59,   137,   123,   188,
-     178,   123,   127,     1,    67,    91,   100,   176,   177,   179,
-     182,   182,   123,     7,    17,    22,    23,    24,    29,    36,
-      53,    65,    71,   138,   198,   200,   201,   202,   137,   203,
-     211,   158,    59,     3,   198,   198,    83,    60,   175,     7,
-     142,    60,   137,    35,   105,     8,    65,    62,   142,   132,
-     141,    75,   187,    60,   175,   179,   115,    62,    63,    24,
-     169,    59,   172,    62,   186,    72,   104,    59,   170,    53,
-     170,    62,   186,     3,   194,    75,   142,   120,    62,   186,
-      62,   186,   182,   135,    65,    36,    59,   142,   148,   149,
-     150,   157,    67,   142,   142,    62,   186,   182,    65,    67,
-     123,   128,   129,   184,   185,    11,    75,   187,    31,   131,
-      72,    66,   176,    60,   185,   101,    62,    68,    36,    59,
-     199,   200,   202,    59,    67,    71,    67,     7,   198,     3,
-      50,    59,   137,   208,   209,     3,    72,    65,    11,   198,
-      60,    75,    62,   191,   211,    62,    62,    62,    60,    60,
-     106,    26,    26,   190,   173,    59,   137,   147,   148,   149,
-     150,   151,   157,   159,    60,    68,   105,   190,   137,    60,
-     175,   171,    68,   142,     6,    12,    68,    99,   102,   170,
-     194,   170,    60,   168,    68,   134,   194,    35,    97,    60,
-      93,    60,   182,   142,   127,    94,    95,   164,   181,    60,
-     182,   127,    66,    75,   187,    68,    75,   187,   131,    60,
-      60,    60,   188,    68,   179,   176,   198,   201,   191,    24,
-     137,   138,   193,   198,   205,   213,   198,   137,   192,   204,
-     212,   198,     3,   208,    62,    72,   198,   209,   198,   194,
-     137,   203,    60,   179,   123,   123,    62,   175,    59,   159,
-     116,    60,   183,    66,   103,    60,    60,   194,   104,    60,
-     185,    62,   186,   142,   185,   123,   129,   128,   129,    60,
-      72,    68,    60,    60,    59,    68,    62,    72,   198,    68,
-      62,    49,   198,    62,   194,    59,    59,   198,   206,   207,
-      68,   190,    60,   175,    14,   117,   159,     8,    65,    66,
-      75,   179,   194,   194,    68,    68,    95,    60,    68,   206,
-     191,   205,   198,   194,   204,   208,   191,   191,    60,   100,
-     113,   123,   123,    60,    60,    60,    60,   159,    66,    66,
-     206,   206
+     123,   123,   123,   127,    60,   131,   183,    59,   137,   123,
+     188,   178,   123,   127,     1,    67,    91,   100,   176,   177,
+     179,   182,   182,   123,     7,    17,    22,    23,    24,    29,
+      36,    53,    65,    71,   138,   198,   200,   201,   202,   137,
+     203,   211,   158,    59,     3,   198,   198,    83,    60,   175,
+       7,   142,    60,   137,    35,   105,     8,    65,    62,   142,
+     132,   141,    75,   187,    60,   175,   179,   115,    62,    63,
+      24,   169,    59,   172,    62,   186,    72,   104,    59,   170,
+      53,   170,    62,   186,     3,   194,    75,   142,   120,    62,
+     186,    62,   186,   182,   135,    65,    36,    59,   142,   148,
+     149,   150,   157,    67,   142,   142,    62,   186,   182,    65,
+      67,   123,   128,   129,   184,   185,    11,    75,   187,    31,
+     131,    72,    66,   176,    60,   185,   101,    62,    68,    36,
+      59,   199,   200,   202,    59,    67,    71,    67,     7,   198,
+       3,    50,    59,   137,   208,   209,     3,    72,    65,    11,
+     198,    60,    75,    62,   191,   211,    62,    62,    62,    60,
+      60,   106,    26,    26,   190,   173,    59,   137,   147,   148,
+     149,   150,   151,   157,   159,    60,    68,   105,   190,   137,
+      60,   175,   171,    68,   142,     6,    12,    68,    99,   102,
+     170,   194,   170,    60,   168,    68,   134,   194,    35,    97,
+      60,    93,    60,   182,   142,   127,    94,    95,   164,   181,
+      60,   182,   127,    66,    75,   187,    68,    75,   187,   131,
+      60,    60,    60,   188,    68,   179,   176,   198,   201,   191,
+      24,   137,   138,   193,   198,   205,   213,   198,   137,   192,
+     204,   212,   198,     3,   208,    62,    72,   198,   209,   198,
+     194,   137,   203,    60,   179,   123,   123,    62,   175,    59,
+     159,   116,    60,   183,    66,   103,    60,    60,   194,   104,
+      60,   185,    62,   186,   142,   185,   123,   129,   128,   129,
+      60,    72,    68,    60,    60,    59,    68,    62,    72,   198,
+      68,    62,    49,   198,    62,   194,    59,    59,   198,   206,
+     207,    68,   190,    60,   175,    14,   117,   159,     8,    65,
+      66,    75,   179,   194,   194,    68,    68,    95,    60,    68,
+     206,   191,   205,   198,   194,   204,   208,   191,   191,    60,
+     100,   113,   123,   123,    60,    60,    60,    60,   159,    66,
+      66,   206,   206
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1564,9 +1567,18 @@ static const yytype_uint8 yystos[] =
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
    to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
 
 #define YYFAIL         goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -1576,7 +1588,6 @@ do                                                                \
     {                                                          \
       yychar = (Token);                                                \
       yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
       YYPOPSTACK (1);                                          \
       goto yybackup;                                           \
     }                                                          \
@@ -1618,19 +1629,10 @@ while (YYID (0))
 #endif
 
 
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
+/* This macro is provided for backward compatibility. */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)                 \
-     fprintf (File, "%d.%d-%d.%d",                     \
-             (Loc).first_line, (Loc).first_column,     \
-             (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
 #endif
 
 
@@ -1822,7 +1824,6 @@ int yydebug;
 # define YYMAXDEPTH 10000
 #endif
 
-\f
 
 #if YYERROR_VERBOSE
 
@@ -1925,115 +1926,142 @@ yytnamerr (char *yyres, const char *yystr)
 }
 # endif
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-        constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-                   + sizeof yyexpecting - 1
-                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-                      * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-        YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-         {
-           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-             {
-               yycount = 1;
-               yysize = yysize0;
-               yyformat[sizeof yyunexpected - 1] = '\0';
-               break;
-             }
-           yyarg[yycount++] = yytname[yyx];
-           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-           yysize_overflow |= (yysize1 < yysize);
-           yysize = yysize1;
-           yyfmt = yystpcpy (yyfmt, yyprefix);
-           yyprefix = yyor;
-         }
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
 
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
 
-      if (yysize_overflow)
-       return YYSIZE_MAXIMUM;
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
 
-      if (yyresult)
-       {
-         /* Avoid sprintf, as that infringes on the user's name space.
-            Don't have undefined behavior even if the translation
-            produced a string with the wrong number of "%s"s.  */
-         char *yyp = yyresult;
-         int yyi = 0;
-         while ((*yyp = *yyf) != '\0')
-           {
-             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-               {
-                 yyp += yytnamerr (yyp, yyarg[yyi++]);
-                 yyf += 2;
-               }
-             else
-               {
-                 yyp++;
-                 yyf++;
-               }
-           }
-       }
-      return yysize;
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
     }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
 }
 #endif /* YYERROR_VERBOSE */
-\f
 
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
@@ -2066,6 +2094,7 @@ yydestruct (yymsg, yytype, yyvaluep)
     }
 }
 
+
 /* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
 #if defined __STDC__ || defined __cplusplus
@@ -2092,10 +2121,9 @@ YYSTYPE yylval;
 int yynerrs;
 
 
-
-/*-------------------------.
-| yyparse or yypush_parse.  |
-`-------------------------*/
+/*----------.
+| yyparse.  |
+`----------*/
 
 #ifdef YYPARSE_PARAM
 #if (defined __STDC__ || defined __C99__FUNC__ \
@@ -2119,8 +2147,6 @@ yyparse ()
 #endif
 #endif
 {
-
-
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
@@ -2274,7 +2300,7 @@ yybackup:
 
   /* First try to decide what to do without reference to lookahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yypact_value_is_default (yyn))
     goto yydefault;
 
   /* Not known => get a lookahead token if don't already have one.  */
@@ -2305,8 +2331,8 @@ yybackup:
   yyn = yytable[yyn];
   if (yyn <= 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
@@ -2361,7 +2387,7 @@ yyreduce:
     {
         case 2:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 128 "go.y"
     {
                xtop = concat(xtop, (yyvsp[(4) - (4)].list));
@@ -2370,7 +2396,7 @@ yyreduce:
 
   case 3:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 134 "go.y"
     {
                prevlineno = lineno;
@@ -2382,7 +2408,7 @@ yyreduce:
 
   case 4:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 141 "go.y"
     {
                mkpackage((yyvsp[(2) - (3)].sym)->name);
@@ -2391,7 +2417,7 @@ yyreduce:
 
   case 5:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 151 "go.y"
     {
                importpkg = runtimepkg;
@@ -2406,7 +2432,7 @@ yyreduce:
 
   case 6:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 162 "go.y"
     {
                importpkg = nil;
@@ -2415,7 +2441,7 @@ yyreduce:
 
   case 12:
 
-/* Line 1455 of yacc.c  */
+/* Line 1806 of yacc.c  */
 #line 176 "go.y"
     {
                Pkg *ipkg;
@@ -2451,10 +2477,24 @@ yyreduce:
        }
     break;
 
-  case 15:
+  case 13:
 
-/* Line 1455 of yacc.c  */
-#line 216 "go.y"
+/* Line 1806 of yacc.c  */
+#line 209 "go.y"
+    {
+               // When an invalid import path is passed to importfile,
+               // it calls yyerror and then sets up a fake import with
+               // no package statement. This allows us to test more
+               // than one invalid import statement in a single file.
+               if(nerrors == 0)
+                       fatal("phase error in import");
+       }
+    break;
+
+  case 16:
+
+/* Line 1806 of yacc.c  */
+#line 224 "go.y"
     {
                // import with original name
                (yyval.i) = parserline();
@@ -2463,10 +2503,10 @@ yyreduce:
        }
     break;
 
-  case 16:
+  case 17:
 
-/* Line 1455 of yacc.c  */
-#line 223 "go.y"
+/* Line 1806 of yacc.c  */
+#line 231 "go.y"
     {
                // import with given name
                (yyval.i) = parserline();
@@ -2475,10 +2515,10 @@ yyreduce:
        }
     break;
 
-  case 17:
+  case 18:
 
-/* Line 1455 of yacc.c  */
-#line 230 "go.y"
+/* Line 1806 of yacc.c  */
+#line 238 "go.y"
     {
                // import into my name space
                (yyval.i) = parserline();
@@ -2487,10 +2527,10 @@ yyreduce:
        }
     break;
 
-  case 18:
+  case 19:
 
-/* Line 1455 of yacc.c  */
-#line 239 "go.y"
+/* Line 1806 of yacc.c  */
+#line 247 "go.y"
     {
                if(importpkg->name == nil) {
                        importpkg->name = (yyvsp[(2) - (4)].sym)->name;
@@ -2504,104 +2544,104 @@ yyreduce:
        }
     break;
 
-  case 20:
+  case 21:
 
-/* Line 1455 of yacc.c  */
-#line 253 "go.y"
+/* Line 1806 of yacc.c  */
+#line 261 "go.y"
     {
                if(strcmp((yyvsp[(1) - (1)].sym)->name, "safe") == 0)
                        curio.importsafe = 1;
        }
     break;
 
-  case 21:
+  case 22:
 
-/* Line 1455 of yacc.c  */
-#line 259 "go.y"
+/* Line 1806 of yacc.c  */
+#line 267 "go.y"
     {
                defercheckwidth();
        }
     break;
 
-  case 22:
+  case 23:
 
-/* Line 1455 of yacc.c  */
-#line 263 "go.y"
+/* Line 1806 of yacc.c  */
+#line 271 "go.y"
     {
                resumecheckwidth();
                unimportfile();
        }
     break;
 
-  case 23:
+  case 24:
 
-/* Line 1455 of yacc.c  */
-#line 272 "go.y"
+/* Line 1806 of yacc.c  */
+#line 280 "go.y"
     {
                yyerror("empty top-level declaration");
                (yyval.list) = nil;
        }
     break;
 
-  case 25:
+  case 26:
 
-/* Line 1455 of yacc.c  */
-#line 278 "go.y"
+/* Line 1806 of yacc.c  */
+#line 286 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 26:
+  case 27:
 
-/* Line 1455 of yacc.c  */
-#line 282 "go.y"
+/* Line 1806 of yacc.c  */
+#line 290 "go.y"
     {
                yyerror("non-declaration statement outside function body");
                (yyval.list) = nil;
        }
     break;
 
-  case 27:
+  case 28:
 
-/* Line 1455 of yacc.c  */
-#line 287 "go.y"
+/* Line 1806 of yacc.c  */
+#line 295 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 28:
+  case 29:
 
-/* Line 1455 of yacc.c  */
-#line 293 "go.y"
+/* Line 1806 of yacc.c  */
+#line 301 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (2)].list);
        }
     break;
 
-  case 29:
+  case 30:
 
-/* Line 1455 of yacc.c  */
-#line 297 "go.y"
+/* Line 1806 of yacc.c  */
+#line 305 "go.y"
     {
                (yyval.list) = (yyvsp[(3) - (5)].list);
        }
     break;
 
-  case 30:
+  case 31:
 
-/* Line 1455 of yacc.c  */
-#line 301 "go.y"
+/* Line 1806 of yacc.c  */
+#line 309 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 31:
+  case 32:
 
-/* Line 1455 of yacc.c  */
-#line 305 "go.y"
+/* Line 1806 of yacc.c  */
+#line 313 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (2)].list);
                iota = -100000;
@@ -2609,10 +2649,10 @@ yyreduce:
        }
     break;
 
-  case 32:
+  case 33:
 
-/* Line 1455 of yacc.c  */
-#line 311 "go.y"
+/* Line 1806 of yacc.c  */
+#line 319 "go.y"
     {
                (yyval.list) = (yyvsp[(3) - (5)].list);
                iota = -100000;
@@ -2620,10 +2660,10 @@ yyreduce:
        }
     break;
 
-  case 33:
+  case 34:
 
-/* Line 1455 of yacc.c  */
-#line 317 "go.y"
+/* Line 1806 of yacc.c  */
+#line 325 "go.y"
     {
                (yyval.list) = concat((yyvsp[(3) - (7)].list), (yyvsp[(5) - (7)].list));
                iota = -100000;
@@ -2631,119 +2671,119 @@ yyreduce:
        }
     break;
 
-  case 34:
+  case 35:
 
-/* Line 1455 of yacc.c  */
-#line 323 "go.y"
+/* Line 1806 of yacc.c  */
+#line 331 "go.y"
     {
                (yyval.list) = nil;
                iota = -100000;
        }
     break;
 
-  case 35:
+  case 36:
 
-/* Line 1455 of yacc.c  */
-#line 328 "go.y"
+/* Line 1806 of yacc.c  */
+#line 336 "go.y"
     {
                (yyval.list) = list1((yyvsp[(2) - (2)].node));
        }
     break;
 
-  case 36:
+  case 37:
 
-/* Line 1455 of yacc.c  */
-#line 332 "go.y"
+/* Line 1806 of yacc.c  */
+#line 340 "go.y"
     {
                (yyval.list) = (yyvsp[(3) - (5)].list);
        }
     break;
 
-  case 37:
+  case 38:
 
-/* Line 1455 of yacc.c  */
-#line 336 "go.y"
+/* Line 1806 of yacc.c  */
+#line 344 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 38:
+  case 39:
 
-/* Line 1455 of yacc.c  */
-#line 342 "go.y"
+/* Line 1806 of yacc.c  */
+#line 350 "go.y"
     {
                iota = 0;
        }
     break;
 
-  case 39:
+  case 40:
 
-/* Line 1455 of yacc.c  */
-#line 348 "go.y"
+/* Line 1806 of yacc.c  */
+#line 356 "go.y"
     {
                (yyval.list) = variter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil);
        }
     break;
 
-  case 40:
+  case 41:
 
-/* Line 1455 of yacc.c  */
-#line 352 "go.y"
+/* Line 1806 of yacc.c  */
+#line 360 "go.y"
     {
                (yyval.list) = variter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list));
        }
     break;
 
-  case 41:
+  case 42:
 
-/* Line 1455 of yacc.c  */
-#line 356 "go.y"
+/* Line 1806 of yacc.c  */
+#line 364 "go.y"
     {
                (yyval.list) = variter((yyvsp[(1) - (3)].list), nil, (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 42:
+  case 43:
 
-/* Line 1455 of yacc.c  */
-#line 362 "go.y"
+/* Line 1806 of yacc.c  */
+#line 370 "go.y"
     {
                (yyval.list) = constiter((yyvsp[(1) - (4)].list), (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].list));
        }
     break;
 
-  case 43:
+  case 44:
 
-/* Line 1455 of yacc.c  */
-#line 366 "go.y"
+/* Line 1806 of yacc.c  */
+#line 374 "go.y"
     {
                (yyval.list) = constiter((yyvsp[(1) - (3)].list), N, (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 45:
+  case 46:
 
-/* Line 1455 of yacc.c  */
-#line 373 "go.y"
+/* Line 1806 of yacc.c  */
+#line 381 "go.y"
     {
                (yyval.list) = constiter((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node), nil);
        }
     break;
 
-  case 46:
+  case 47:
 
-/* Line 1455 of yacc.c  */
-#line 377 "go.y"
+/* Line 1806 of yacc.c  */
+#line 385 "go.y"
     {
                (yyval.list) = constiter((yyvsp[(1) - (1)].list), N, nil);
        }
     break;
 
-  case 47:
+  case 48:
 
-/* Line 1455 of yacc.c  */
-#line 383 "go.y"
+/* Line 1806 of yacc.c  */
+#line 391 "go.y"
     {
                // different from dclname because the name
                // becomes visible right here, not at the end
@@ -2752,38 +2792,38 @@ yyreduce:
        }
     break;
 
-  case 48:
+  case 49:
 
-/* Line 1455 of yacc.c  */
-#line 392 "go.y"
+/* Line 1806 of yacc.c  */
+#line 400 "go.y"
     {
                (yyval.node) = typedcl1((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node), 1);
        }
     break;
 
-  case 49:
+  case 50:
 
-/* Line 1455 of yacc.c  */
-#line 398 "go.y"
+/* Line 1806 of yacc.c  */
+#line 406 "go.y"
     {
                (yyval.node) = (yyvsp[(1) - (1)].node);
        }
     break;
 
-  case 50:
+  case 51:
 
-/* Line 1455 of yacc.c  */
-#line 402 "go.y"
+/* Line 1806 of yacc.c  */
+#line 410 "go.y"
     {
                (yyval.node) = nod(OASOP, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
                (yyval.node)->etype = (yyvsp[(2) - (3)].i);                     // rathole to pass opcode
        }
     break;
 
-  case 51:
+  case 52:
 
-/* Line 1455 of yacc.c  */
-#line 407 "go.y"
+/* Line 1806 of yacc.c  */
+#line 415 "go.y"
     {
                if((yyvsp[(1) - (3)].list)->next == nil && (yyvsp[(3) - (3)].list)->next == nil) {
                        // simple
@@ -2797,10 +2837,10 @@ yyreduce:
        }
     break;
 
-  case 52:
+  case 53:
 
-/* Line 1455 of yacc.c  */
-#line 419 "go.y"
+/* Line 1806 of yacc.c  */
+#line 427 "go.y"
     {
                if((yyvsp[(3) - (3)].list)->n->op == OTYPESW) {
                        (yyval.node) = nod(OTYPESW, N, (yyvsp[(3) - (3)].list)->n->right);
@@ -2818,30 +2858,30 @@ yyreduce:
        }
     break;
 
-  case 53:
+  case 54:
 
-/* Line 1455 of yacc.c  */
-#line 435 "go.y"
+/* Line 1806 of yacc.c  */
+#line 443 "go.y"
     {
                (yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
                (yyval.node)->etype = OADD;
        }
     break;
 
-  case 54:
+  case 55:
 
-/* Line 1455 of yacc.c  */
-#line 440 "go.y"
+/* Line 1806 of yacc.c  */
+#line 448 "go.y"
     {
                (yyval.node) = nod(OASOP, (yyvsp[(1) - (2)].node), nodintconst(1));
                (yyval.node)->etype = OSUB;
        }
     break;
 
-  case 55:
+  case 56:
 
-/* Line 1455 of yacc.c  */
-#line 447 "go.y"
+/* Line 1806 of yacc.c  */
+#line 455 "go.y"
     {
                Node *n, *nn;
 
@@ -2863,10 +2903,10 @@ yyreduce:
        }
     break;
 
-  case 56:
+  case 57:
 
-/* Line 1455 of yacc.c  */
-#line 467 "go.y"
+/* Line 1806 of yacc.c  */
+#line 475 "go.y"
     {
                Node *n;
 
@@ -2886,10 +2926,10 @@ yyreduce:
        }
     break;
 
-  case 57:
+  case 58:
 
-/* Line 1455 of yacc.c  */
-#line 485 "go.y"
+/* Line 1806 of yacc.c  */
+#line 493 "go.y"
     {
                // will be converted to OCASE
                // right will point to next case
@@ -2900,10 +2940,10 @@ yyreduce:
        }
     break;
 
-  case 58:
+  case 59:
 
-/* Line 1455 of yacc.c  */
-#line 494 "go.y"
+/* Line 1806 of yacc.c  */
+#line 502 "go.y"
     {
                Node *n, *nn;
 
@@ -2921,29 +2961,29 @@ yyreduce:
        }
     break;
 
-  case 59:
+  case 60:
 
-/* Line 1455 of yacc.c  */
-#line 512 "go.y"
+/* Line 1806 of yacc.c  */
+#line 520 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 60:
+  case 61:
 
-/* Line 1455 of yacc.c  */
-#line 516 "go.y"
+/* Line 1806 of yacc.c  */
+#line 524 "go.y"
     {
                (yyval.node) = liststmt((yyvsp[(3) - (4)].list));
                popdcl();
        }
     break;
 
-  case 61:
+  case 62:
 
-/* Line 1455 of yacc.c  */
-#line 523 "go.y"
+/* Line 1806 of yacc.c  */
+#line 531 "go.y"
     {
                // If the last token read by the lexer was consumed
                // as part of the case, clear it (parser has cleared yychar).
@@ -2955,10 +2995,10 @@ yyreduce:
        }
     break;
 
-  case 62:
+  case 63:
 
-/* Line 1455 of yacc.c  */
-#line 533 "go.y"
+/* Line 1806 of yacc.c  */
+#line 541 "go.y"
     {
                int last;
 
@@ -2979,47 +3019,47 @@ yyreduce:
        }
     break;
 
-  case 63:
+  case 64:
 
-/* Line 1455 of yacc.c  */
-#line 553 "go.y"
+/* Line 1806 of yacc.c  */
+#line 561 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 64:
+  case 65:
 
-/* Line 1455 of yacc.c  */
-#line 557 "go.y"
+/* Line 1806 of yacc.c  */
+#line 565 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node));
        }
     break;
 
-  case 65:
+  case 66:
 
-/* Line 1455 of yacc.c  */
-#line 563 "go.y"
+/* Line 1806 of yacc.c  */
+#line 571 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 66:
+  case 67:
 
-/* Line 1455 of yacc.c  */
-#line 567 "go.y"
+/* Line 1806 of yacc.c  */
+#line 575 "go.y"
     {
                (yyval.list) = (yyvsp[(3) - (4)].list);
                popdcl();
        }
     break;
 
-  case 67:
+  case 68:
 
-/* Line 1455 of yacc.c  */
-#line 574 "go.y"
+/* Line 1806 of yacc.c  */
+#line 582 "go.y"
     {
                (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
                (yyval.node)->list = (yyvsp[(1) - (4)].list);
@@ -3027,10 +3067,10 @@ yyreduce:
        }
     break;
 
-  case 68:
+  case 69:
 
-/* Line 1455 of yacc.c  */
-#line 580 "go.y"
+/* Line 1806 of yacc.c  */
+#line 588 "go.y"
     {
                (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node));
                (yyval.node)->list = (yyvsp[(1) - (4)].list);
@@ -3039,10 +3079,10 @@ yyreduce:
        }
     break;
 
-  case 69:
+  case 70:
 
-/* Line 1455 of yacc.c  */
-#line 589 "go.y"
+/* Line 1806 of yacc.c  */
+#line 597 "go.y"
     {
                // init ; test ; incr
                if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0)
@@ -3055,10 +3095,10 @@ yyreduce:
        }
     break;
 
-  case 70:
+  case 71:
 
-/* Line 1455 of yacc.c  */
-#line 600 "go.y"
+/* Line 1806 of yacc.c  */
+#line 608 "go.y"
     {
                // normal test
                (yyval.node) = nod(OFOR, N, N);
@@ -3066,39 +3106,39 @@ yyreduce:
        }
     break;
 
-  case 72:
+  case 73:
 
-/* Line 1455 of yacc.c  */
-#line 609 "go.y"
+/* Line 1806 of yacc.c  */
+#line 617 "go.y"
     {
                (yyval.node) = (yyvsp[(1) - (2)].node);
                (yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list));
        }
     break;
 
-  case 73:
+  case 74:
 
-/* Line 1455 of yacc.c  */
-#line 616 "go.y"
+/* Line 1806 of yacc.c  */
+#line 624 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 74:
+  case 75:
 
-/* Line 1455 of yacc.c  */
-#line 620 "go.y"
+/* Line 1806 of yacc.c  */
+#line 628 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (3)].node);
                popdcl();
        }
     break;
 
-  case 75:
+  case 76:
 
-/* Line 1455 of yacc.c  */
-#line 627 "go.y"
+/* Line 1806 of yacc.c  */
+#line 635 "go.y"
     {
                // test
                (yyval.node) = nod(OIF, N, N);
@@ -3106,10 +3146,10 @@ yyreduce:
        }
     break;
 
-  case 76:
+  case 77:
 
-/* Line 1455 of yacc.c  */
-#line 633 "go.y"
+/* Line 1806 of yacc.c  */
+#line 641 "go.y"
     {
                // init ; test
                (yyval.node) = nod(OIF, N, N);
@@ -3119,38 +3159,38 @@ yyreduce:
        }
     break;
 
-  case 77:
+  case 78:
 
-/* Line 1455 of yacc.c  */
-#line 644 "go.y"
+/* Line 1806 of yacc.c  */
+#line 652 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 78:
+  case 79:
 
-/* Line 1455 of yacc.c  */
-#line 648 "go.y"
+/* Line 1806 of yacc.c  */
+#line 656 "go.y"
     {
                if((yyvsp[(3) - (3)].node)->ntest == N)
                        yyerror("missing condition in if statement");
        }
     break;
 
-  case 79:
+  case 80:
 
-/* Line 1455 of yacc.c  */
-#line 653 "go.y"
+/* Line 1806 of yacc.c  */
+#line 661 "go.y"
     {
                (yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list);
        }
     break;
 
-  case 80:
+  case 81:
 
-/* Line 1455 of yacc.c  */
-#line 657 "go.y"
+/* Line 1806 of yacc.c  */
+#line 665 "go.y"
     {
                popdcl();
                (yyval.node) = (yyvsp[(3) - (7)].node);
@@ -3159,46 +3199,46 @@ yyreduce:
        }
     break;
 
-  case 81:
+  case 82:
 
-/* Line 1455 of yacc.c  */
-#line 665 "go.y"
+/* Line 1806 of yacc.c  */
+#line 673 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 82:
+  case 83:
 
-/* Line 1455 of yacc.c  */
-#line 669 "go.y"
+/* Line 1806 of yacc.c  */
+#line 677 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (2)].node);
        }
     break;
 
-  case 83:
+  case 84:
 
-/* Line 1455 of yacc.c  */
-#line 673 "go.y"
+/* Line 1806 of yacc.c  */
+#line 681 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (2)].node);
        }
     break;
 
-  case 84:
+  case 85:
 
-/* Line 1455 of yacc.c  */
-#line 679 "go.y"
+/* Line 1806 of yacc.c  */
+#line 687 "go.y"
     {
                markdcl();
        }
     break;
 
-  case 85:
+  case 86:
 
-/* Line 1455 of yacc.c  */
-#line 683 "go.y"
+/* Line 1806 of yacc.c  */
+#line 691 "go.y"
     {
                Node *n;
                n = (yyvsp[(3) - (3)].node)->ntest;
@@ -3208,10 +3248,10 @@ yyreduce:
        }
     break;
 
-  case 86:
+  case 87:
 
-/* Line 1455 of yacc.c  */
-#line 691 "go.y"
+/* Line 1806 of yacc.c  */
+#line 699 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (7)].node);
                (yyval.node)->op = OSWITCH;
@@ -3221,19 +3261,19 @@ yyreduce:
        }
     break;
 
-  case 87:
+  case 88:
 
-/* Line 1455 of yacc.c  */
-#line 701 "go.y"
+/* Line 1806 of yacc.c  */
+#line 709 "go.y"
     {
                typesw = nod(OXXX, typesw, N);
        }
     break;
 
-  case 88:
+  case 89:
 
-/* Line 1455 of yacc.c  */
-#line 705 "go.y"
+/* Line 1806 of yacc.c  */
+#line 713 "go.y"
     {
                (yyval.node) = nod(OSELECT, N, N);
                (yyval.node)->lineno = typesw->lineno;
@@ -3242,199 +3282,199 @@ yyreduce:
        }
     break;
 
-  case 90:
+  case 91:
 
-/* Line 1455 of yacc.c  */
-#line 718 "go.y"
+/* Line 1806 of yacc.c  */
+#line 726 "go.y"
     {
                (yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 91:
+  case 92:
 
-/* Line 1455 of yacc.c  */
-#line 722 "go.y"
+/* Line 1806 of yacc.c  */
+#line 730 "go.y"
     {
                (yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 92:
+  case 93:
 
-/* Line 1455 of yacc.c  */
-#line 726 "go.y"
+/* Line 1806 of yacc.c  */
+#line 734 "go.y"
     {
                (yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 93:
+  case 94:
 
-/* Line 1455 of yacc.c  */
-#line 730 "go.y"
+/* Line 1806 of yacc.c  */
+#line 738 "go.y"
     {
                (yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 94:
+  case 95:
 
-/* Line 1455 of yacc.c  */
-#line 734 "go.y"
+/* Line 1806 of yacc.c  */
+#line 742 "go.y"
     {
                (yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 95:
+  case 96:
 
-/* Line 1455 of yacc.c  */
-#line 738 "go.y"
+/* Line 1806 of yacc.c  */
+#line 746 "go.y"
     {
                (yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 96:
+  case 97:
 
-/* Line 1455 of yacc.c  */
-#line 742 "go.y"
+/* Line 1806 of yacc.c  */
+#line 750 "go.y"
     {
                (yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 97:
+  case 98:
 
-/* Line 1455 of yacc.c  */
-#line 746 "go.y"
+/* Line 1806 of yacc.c  */
+#line 754 "go.y"
     {
                (yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 98:
+  case 99:
 
-/* Line 1455 of yacc.c  */
-#line 750 "go.y"
+/* Line 1806 of yacc.c  */
+#line 758 "go.y"
     {
                (yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 99:
+  case 100:
 
-/* Line 1455 of yacc.c  */
-#line 754 "go.y"
+/* Line 1806 of yacc.c  */
+#line 762 "go.y"
     {
                (yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 100:
+  case 101:
 
-/* Line 1455 of yacc.c  */
-#line 758 "go.y"
+/* Line 1806 of yacc.c  */
+#line 766 "go.y"
     {
                (yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 101:
+  case 102:
 
-/* Line 1455 of yacc.c  */
-#line 762 "go.y"
+/* Line 1806 of yacc.c  */
+#line 770 "go.y"
     {
                (yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 102:
+  case 103:
 
-/* Line 1455 of yacc.c  */
-#line 766 "go.y"
+/* Line 1806 of yacc.c  */
+#line 774 "go.y"
     {
                (yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 103:
+  case 104:
 
-/* Line 1455 of yacc.c  */
-#line 770 "go.y"
+/* Line 1806 of yacc.c  */
+#line 778 "go.y"
     {
                (yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 104:
+  case 105:
 
-/* Line 1455 of yacc.c  */
-#line 774 "go.y"
+/* Line 1806 of yacc.c  */
+#line 782 "go.y"
     {
                (yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 105:
+  case 106:
 
-/* Line 1455 of yacc.c  */
-#line 778 "go.y"
+/* Line 1806 of yacc.c  */
+#line 786 "go.y"
     {
                (yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 106:
+  case 107:
 
-/* Line 1455 of yacc.c  */
-#line 782 "go.y"
+/* Line 1806 of yacc.c  */
+#line 790 "go.y"
     {
                (yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 107:
+  case 108:
 
-/* Line 1455 of yacc.c  */
-#line 786 "go.y"
+/* Line 1806 of yacc.c  */
+#line 794 "go.y"
     {
                (yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 108:
+  case 109:
 
-/* Line 1455 of yacc.c  */
-#line 790 "go.y"
+/* Line 1806 of yacc.c  */
+#line 798 "go.y"
     {
                (yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 109:
+  case 110:
 
-/* Line 1455 of yacc.c  */
-#line 795 "go.y"
+/* Line 1806 of yacc.c  */
+#line 803 "go.y"
     {
                (yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 111:
+  case 112:
 
-/* Line 1455 of yacc.c  */
-#line 802 "go.y"
+/* Line 1806 of yacc.c  */
+#line 810 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 112:
+  case 113:
 
-/* Line 1455 of yacc.c  */
-#line 806 "go.y"
+/* Line 1806 of yacc.c  */
+#line 814 "go.y"
     {
                if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) {
                        // Special case for &T{...}: turn into (*T){...}.
@@ -3447,84 +3487,84 @@ yyreduce:
        }
     break;
 
-  case 113:
+  case 114:
 
-/* Line 1455 of yacc.c  */
-#line 817 "go.y"
+/* Line 1806 of yacc.c  */
+#line 825 "go.y"
     {
                (yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 114:
+  case 115:
 
-/* Line 1455 of yacc.c  */
-#line 821 "go.y"
+/* Line 1806 of yacc.c  */
+#line 829 "go.y"
     {
                (yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 115:
+  case 116:
 
-/* Line 1455 of yacc.c  */
-#line 825 "go.y"
+/* Line 1806 of yacc.c  */
+#line 833 "go.y"
     {
                (yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 116:
+  case 117:
 
-/* Line 1455 of yacc.c  */
-#line 829 "go.y"
+/* Line 1806 of yacc.c  */
+#line 837 "go.y"
     {
                yyerror("the bitwise complement operator is ^");
                (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 117:
+  case 118:
 
-/* Line 1455 of yacc.c  */
-#line 834 "go.y"
+/* Line 1806 of yacc.c  */
+#line 842 "go.y"
     {
                (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 118:
+  case 119:
 
-/* Line 1455 of yacc.c  */
-#line 838 "go.y"
+/* Line 1806 of yacc.c  */
+#line 846 "go.y"
     {
                (yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 119:
+  case 120:
 
-/* Line 1455 of yacc.c  */
-#line 848 "go.y"
+/* Line 1806 of yacc.c  */
+#line 856 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N);
        }
     break;
 
-  case 120:
+  case 121:
 
-/* Line 1455 of yacc.c  */
-#line 852 "go.y"
+/* Line 1806 of yacc.c  */
+#line 860 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
        }
     break;
 
-  case 121:
+  case 122:
 
-/* Line 1455 of yacc.c  */
-#line 857 "go.y"
+/* Line 1806 of yacc.c  */
+#line 865 "go.y"
     {
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N);
                (yyval.node)->list = (yyvsp[(3) - (6)].list);
@@ -3532,19 +3572,19 @@ yyreduce:
        }
     break;
 
-  case 122:
+  case 123:
 
-/* Line 1455 of yacc.c  */
-#line 865 "go.y"
+/* Line 1806 of yacc.c  */
+#line 873 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
        }
     break;
 
-  case 124:
+  case 125:
 
-/* Line 1455 of yacc.c  */
-#line 870 "go.y"
+/* Line 1806 of yacc.c  */
+#line 878 "go.y"
     {
                if((yyvsp[(1) - (3)].node)->op == OPACK) {
                        Sym *s;
@@ -3557,46 +3597,46 @@ yyreduce:
        }
     break;
 
-  case 125:
+  case 126:
 
-/* Line 1455 of yacc.c  */
-#line 881 "go.y"
+/* Line 1806 of yacc.c  */
+#line 889 "go.y"
     {
                (yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node));
        }
     break;
 
-  case 126:
+  case 127:
 
-/* Line 1455 of yacc.c  */
-#line 885 "go.y"
+/* Line 1806 of yacc.c  */
+#line 893 "go.y"
     {
                (yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node));
        }
     break;
 
-  case 127:
+  case 128:
 
-/* Line 1455 of yacc.c  */
-#line 889 "go.y"
+/* Line 1806 of yacc.c  */
+#line 897 "go.y"
     {
                (yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
        }
     break;
 
-  case 128:
+  case 129:
 
-/* Line 1455 of yacc.c  */
-#line 893 "go.y"
+/* Line 1806 of yacc.c  */
+#line 901 "go.y"
     {
                (yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)));
        }
     break;
 
-  case 130:
+  case 131:
 
-/* Line 1455 of yacc.c  */
-#line 898 "go.y"
+/* Line 1806 of yacc.c  */
+#line 906 "go.y"
     {
                // conversion
                (yyval.node) = nod(OCALL, (yyvsp[(1) - (4)].node), N);
@@ -3604,10 +3644,10 @@ yyreduce:
        }
     break;
 
-  case 131:
+  case 132:
 
-/* Line 1455 of yacc.c  */
-#line 904 "go.y"
+/* Line 1806 of yacc.c  */
+#line 912 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (5)].node);
                (yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3616,10 +3656,10 @@ yyreduce:
        }
     break;
 
-  case 132:
+  case 133:
 
-/* Line 1455 of yacc.c  */
-#line 911 "go.y"
+/* Line 1806 of yacc.c  */
+#line 919 "go.y"
     {
                (yyval.node) = (yyvsp[(3) - (5)].node);
                (yyval.node)->right = (yyvsp[(1) - (5)].node);
@@ -3627,10 +3667,10 @@ yyreduce:
        }
     break;
 
-  case 133:
+  case 134:
 
-/* Line 1455 of yacc.c  */
-#line 917 "go.y"
+/* Line 1806 of yacc.c  */
+#line 925 "go.y"
     {
                yyerror("cannot parenthesize type in composite literal");
                (yyval.node) = (yyvsp[(5) - (7)].node);
@@ -3639,10 +3679,10 @@ yyreduce:
        }
     break;
 
-  case 135:
+  case 136:
 
-/* Line 1455 of yacc.c  */
-#line 926 "go.y"
+/* Line 1806 of yacc.c  */
+#line 934 "go.y"
     {
                // composite expression.
                // make node early so we get the right line number.
@@ -3650,29 +3690,29 @@ yyreduce:
        }
     break;
 
-  case 136:
+  case 137:
 
-/* Line 1455 of yacc.c  */
-#line 934 "go.y"
+/* Line 1806 of yacc.c  */
+#line 942 "go.y"
     {
                (yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 138:
+  case 139:
 
-/* Line 1455 of yacc.c  */
-#line 941 "go.y"
+/* Line 1806 of yacc.c  */
+#line 949 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (4)].node);
                (yyval.node)->list = (yyvsp[(3) - (4)].list);
        }
     break;
 
-  case 140:
+  case 141:
 
-/* Line 1455 of yacc.c  */
-#line 949 "go.y"
+/* Line 1806 of yacc.c  */
+#line 957 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
                
@@ -3690,28 +3730,28 @@ yyreduce:
        }
     break;
 
-  case 144:
+  case 145:
 
-/* Line 1455 of yacc.c  */
-#line 974 "go.y"
+/* Line 1806 of yacc.c  */
+#line 982 "go.y"
     {
                (yyval.i) = LBODY;
        }
     break;
 
-  case 145:
+  case 146:
 
-/* Line 1455 of yacc.c  */
-#line 978 "go.y"
+/* Line 1806 of yacc.c  */
+#line 986 "go.y"
     {
                (yyval.i) = '{';
        }
     break;
 
-  case 146:
+  case 147:
 
-/* Line 1455 of yacc.c  */
-#line 989 "go.y"
+/* Line 1806 of yacc.c  */
+#line 997 "go.y"
     {
                if((yyvsp[(1) - (1)].sym) == S)
                        (yyval.node) = N;
@@ -3720,28 +3760,28 @@ yyreduce:
        }
     break;
 
-  case 147:
+  case 148:
 
-/* Line 1455 of yacc.c  */
-#line 998 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1006 "go.y"
     {
                (yyval.node) = dclname((yyvsp[(1) - (1)].sym));
        }
     break;
 
-  case 148:
+  case 149:
 
-/* Line 1455 of yacc.c  */
-#line 1003 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1011 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 150:
+  case 151:
 
-/* Line 1455 of yacc.c  */
-#line 1010 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1018 "go.y"
     {
                (yyval.sym) = (yyvsp[(1) - (1)].sym);
                // during imports, unqualified non-exported identifiers are from builtinpkg
@@ -3750,19 +3790,19 @@ yyreduce:
        }
     break;
 
-  case 152:
+  case 153:
 
-/* Line 1455 of yacc.c  */
-#line 1018 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1026 "go.y"
     {
                (yyval.sym) = S;
        }
     break;
 
-  case 153:
+  case 154:
 
-/* Line 1455 of yacc.c  */
-#line 1024 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1032 "go.y"
     {
                if((yyvsp[(2) - (4)].val).u.sval->len == 0)
                        (yyval.sym) = pkglookup((yyvsp[(4) - (4)].sym)->name, importpkg);
@@ -3771,10 +3811,10 @@ yyreduce:
        }
     break;
 
-  case 154:
+  case 155:
 
-/* Line 1455 of yacc.c  */
-#line 1033 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1041 "go.y"
     {
                (yyval.node) = oldname((yyvsp[(1) - (1)].sym));
                if((yyval.node)->pack != N)
@@ -3782,56 +3822,56 @@ yyreduce:
        }
     break;
 
-  case 156:
+  case 157:
 
-/* Line 1455 of yacc.c  */
-#line 1053 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1061 "go.y"
     {
                yyerror("final argument in variadic function missing type");
                (yyval.node) = nod(ODDD, typenod(typ(TINTER)), N);
        }
     break;
 
-  case 157:
+  case 158:
 
-/* Line 1455 of yacc.c  */
-#line 1058 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1066 "go.y"
     {
                (yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 163:
+  case 164:
 
-/* Line 1455 of yacc.c  */
-#line 1069 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1077 "go.y"
     {
                (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
        }
     break;
 
-  case 167:
+  case 168:
 
-/* Line 1455 of yacc.c  */
-#line 1078 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1086 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 172:
+  case 173:
 
-/* Line 1455 of yacc.c  */
-#line 1088 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1096 "go.y"
     {
                (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N);
        }
     break;
 
-  case 182:
+  case 183:
 
-/* Line 1455 of yacc.c  */
-#line 1109 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1117 "go.y"
     {
                if((yyvsp[(1) - (3)].node)->op == OPACK) {
                        Sym *s;
@@ -3844,77 +3884,77 @@ yyreduce:
        }
     break;
 
-  case 183:
+  case 184:
 
-/* Line 1455 of yacc.c  */
-#line 1122 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1130 "go.y"
     {
                (yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
        }
     break;
 
-  case 184:
+  case 185:
 
-/* Line 1455 of yacc.c  */
-#line 1126 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1134 "go.y"
     {
                // array literal of nelem
                (yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node));
        }
     break;
 
-  case 185:
+  case 186:
 
-/* Line 1455 of yacc.c  */
-#line 1131 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1139 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N);
                (yyval.node)->etype = Cboth;
        }
     break;
 
-  case 186:
+  case 187:
 
-/* Line 1455 of yacc.c  */
-#line 1136 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1144 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
                (yyval.node)->etype = Csend;
        }
     break;
 
-  case 187:
+  case 188:
 
-/* Line 1455 of yacc.c  */
-#line 1141 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1149 "go.y"
     {
                (yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
        }
     break;
 
-  case 190:
+  case 191:
 
-/* Line 1455 of yacc.c  */
-#line 1149 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1157 "go.y"
     {
                (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 191:
+  case 192:
 
-/* Line 1455 of yacc.c  */
-#line 1155 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1163 "go.y"
     {
                (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N);
                (yyval.node)->etype = Crecv;
        }
     break;
 
-  case 192:
+  case 193:
 
-/* Line 1455 of yacc.c  */
-#line 1162 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1170 "go.y"
     {
                (yyval.node) = nod(OTSTRUCT, N, N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3922,20 +3962,20 @@ yyreduce:
        }
     break;
 
-  case 193:
+  case 194:
 
-/* Line 1455 of yacc.c  */
-#line 1168 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1176 "go.y"
     {
                (yyval.node) = nod(OTSTRUCT, N, N);
                fixlbrace((yyvsp[(2) - (3)].i));
        }
     break;
 
-  case 194:
+  case 195:
 
-/* Line 1455 of yacc.c  */
-#line 1175 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1183 "go.y"
     {
                (yyval.node) = nod(OTINTER, N, N);
                (yyval.node)->list = (yyvsp[(3) - (5)].list);
@@ -3943,20 +3983,20 @@ yyreduce:
        }
     break;
 
-  case 195:
+  case 196:
 
-/* Line 1455 of yacc.c  */
-#line 1181 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1189 "go.y"
     {
                (yyval.node) = nod(OTINTER, N, N);
                fixlbrace((yyvsp[(2) - (3)].i));
        }
     break;
 
-  case 196:
+  case 197:
 
-/* Line 1455 of yacc.c  */
-#line 1192 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1200 "go.y"
     {
                (yyval.node) = (yyvsp[(2) - (3)].node);
                if((yyval.node) == N)
@@ -3967,10 +4007,10 @@ yyreduce:
        }
     break;
 
-  case 197:
+  case 198:
 
-/* Line 1455 of yacc.c  */
-#line 1203 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1211 "go.y"
     {
                Node *t;
 
@@ -4001,10 +4041,10 @@ yyreduce:
        }
     break;
 
-  case 198:
+  case 199:
 
-/* Line 1455 of yacc.c  */
-#line 1232 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1240 "go.y"
     {
                Node *rcvr, *t;
 
@@ -4043,10 +4083,10 @@ yyreduce:
        }
     break;
 
-  case 199:
+  case 200:
 
-/* Line 1455 of yacc.c  */
-#line 1271 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1279 "go.y"
     {
                Sym *s;
                Type *t;
@@ -4071,10 +4111,10 @@ yyreduce:
        }
     break;
 
-  case 200:
+  case 201:
 
-/* Line 1455 of yacc.c  */
-#line 1294 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1302 "go.y"
     {
                (yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right); 
                (yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list));
@@ -4091,10 +4131,10 @@ yyreduce:
        }
     break;
 
-  case 201:
+  case 202:
 
-/* Line 1455 of yacc.c  */
-#line 1311 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1319 "go.y"
     {
                (yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1);
                (yyval.node) = nod(OTFUNC, N, N);
@@ -4103,19 +4143,19 @@ yyreduce:
        }
     break;
 
-  case 202:
+  case 203:
 
-/* Line 1455 of yacc.c  */
-#line 1319 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1327 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 203:
+  case 204:
 
-/* Line 1455 of yacc.c  */
-#line 1323 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1331 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (3)].list);
                if((yyval.list) == nil)
@@ -4123,75 +4163,75 @@ yyreduce:
        }
     break;
 
-  case 204:
+  case 205:
 
-/* Line 1455 of yacc.c  */
-#line 1331 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1339 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 205:
+  case 206:
 
-/* Line 1455 of yacc.c  */
-#line 1335 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1343 "go.y"
     {
                (yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node)));
        }
     break;
 
-  case 206:
+  case 207:
 
-/* Line 1455 of yacc.c  */
-#line 1339 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1347 "go.y"
     {
                (yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0);
                (yyval.list) = (yyvsp[(2) - (3)].list);
        }
     break;
 
-  case 207:
+  case 208:
 
-/* Line 1455 of yacc.c  */
-#line 1346 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1354 "go.y"
     {
                closurehdr((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 208:
+  case 209:
 
-/* Line 1455 of yacc.c  */
-#line 1352 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1360 "go.y"
     {
                (yyval.node) = closurebody((yyvsp[(3) - (4)].list));
                fixlbrace((yyvsp[(2) - (4)].i));
        }
     break;
 
-  case 209:
+  case 210:
 
-/* Line 1455 of yacc.c  */
-#line 1357 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1365 "go.y"
     {
                (yyval.node) = closurebody(nil);
        }
     break;
 
-  case 210:
+  case 211:
 
-/* Line 1455 of yacc.c  */
-#line 1368 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1376 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 211:
+  case 212:
 
-/* Line 1455 of yacc.c  */
-#line 1372 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1380 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list));
                if(nsyntaxerrors == 0)
@@ -4199,73 +4239,73 @@ yyreduce:
        }
     break;
 
-  case 213:
+  case 214:
 
-/* Line 1455 of yacc.c  */
-#line 1381 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1389 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 215:
+  case 216:
 
-/* Line 1455 of yacc.c  */
-#line 1388 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1396 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 216:
+  case 217:
 
-/* Line 1455 of yacc.c  */
-#line 1394 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1402 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 217:
+  case 218:
 
-/* Line 1455 of yacc.c  */
-#line 1398 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1406 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 219:
+  case 220:
 
-/* Line 1455 of yacc.c  */
-#line 1405 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1413 "go.y"
     {
                (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list));
        }
     break;
 
-  case 220:
+  case 221:
 
-/* Line 1455 of yacc.c  */
-#line 1411 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1419 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 221:
+  case 222:
 
-/* Line 1455 of yacc.c  */
-#line 1415 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1423 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 222:
+  case 223:
 
-/* Line 1455 of yacc.c  */
-#line 1421 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1429 "go.y"
     {
                NodeList *l;
 
@@ -4290,20 +4330,20 @@ yyreduce:
        }
     break;
 
-  case 223:
+  case 224:
 
-/* Line 1455 of yacc.c  */
-#line 1444 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1452 "go.y"
     {
                (yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val);
                (yyval.list) = list1((yyvsp[(1) - (2)].node));
        }
     break;
 
-  case 224:
+  case 225:
 
-/* Line 1455 of yacc.c  */
-#line 1449 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1457 "go.y"
     {
                (yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val);
                (yyval.list) = list1((yyvsp[(2) - (4)].node));
@@ -4311,10 +4351,10 @@ yyreduce:
        }
     break;
 
-  case 225:
+  case 226:
 
-/* Line 1455 of yacc.c  */
-#line 1455 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1463 "go.y"
     {
                (yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N);
                (yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val);
@@ -4322,10 +4362,10 @@ yyreduce:
        }
     break;
 
-  case 226:
+  case 227:
 
-/* Line 1455 of yacc.c  */
-#line 1461 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1469 "go.y"
     {
                (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
                (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4334,10 +4374,10 @@ yyreduce:
        }
     break;
 
-  case 227:
+  case 228:
 
-/* Line 1455 of yacc.c  */
-#line 1468 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1476 "go.y"
     {
                (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N);
                (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val);
@@ -4346,10 +4386,10 @@ yyreduce:
        }
     break;
 
-  case 228:
+  case 229:
 
-/* Line 1455 of yacc.c  */
-#line 1477 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1485 "go.y"
     {
                Node *n;
 
@@ -4360,10 +4400,10 @@ yyreduce:
        }
     break;
 
-  case 229:
+  case 230:
 
-/* Line 1455 of yacc.c  */
-#line 1486 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1494 "go.y"
     {
                Pkg *pkg;
 
@@ -4378,48 +4418,48 @@ yyreduce:
        }
     break;
 
-  case 230:
+  case 231:
 
-/* Line 1455 of yacc.c  */
-#line 1501 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1509 "go.y"
     {
                (yyval.node) = embedded((yyvsp[(1) - (1)].sym));
        }
     break;
 
-  case 231:
+  case 232:
 
-/* Line 1455 of yacc.c  */
-#line 1507 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1515 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
                ifacedcl((yyval.node));
        }
     break;
 
-  case 232:
+  case 233:
 
-/* Line 1455 of yacc.c  */
-#line 1512 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1520 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym)));
        }
     break;
 
-  case 233:
+  case 234:
 
-/* Line 1455 of yacc.c  */
-#line 1516 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1524 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym)));
                yyerror("cannot parenthesize embedded type");
        }
     break;
 
-  case 234:
+  case 235:
 
-/* Line 1455 of yacc.c  */
-#line 1523 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1531 "go.y"
     {
                // without func keyword
                (yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1);
@@ -4429,10 +4469,10 @@ yyreduce:
        }
     break;
 
-  case 236:
+  case 237:
 
-/* Line 1455 of yacc.c  */
-#line 1537 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1545 "go.y"
     {
                (yyval.node) = nod(ONONAME, N, N);
                (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4440,10 +4480,10 @@ yyreduce:
        }
     break;
 
-  case 237:
+  case 238:
 
-/* Line 1455 of yacc.c  */
-#line 1543 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1551 "go.y"
     {
                (yyval.node) = nod(ONONAME, N, N);
                (yyval.node)->sym = (yyvsp[(1) - (2)].sym);
@@ -4451,83 +4491,83 @@ yyreduce:
        }
     break;
 
-  case 239:
+  case 240:
 
-/* Line 1455 of yacc.c  */
-#line 1552 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1560 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 240:
+  case 241:
 
-/* Line 1455 of yacc.c  */
-#line 1556 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1564 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 241:
+  case 242:
 
-/* Line 1455 of yacc.c  */
-#line 1561 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1569 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 242:
+  case 243:
 
-/* Line 1455 of yacc.c  */
-#line 1565 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1573 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (2)].list);
        }
     break;
 
-  case 243:
+  case 244:
 
-/* Line 1455 of yacc.c  */
-#line 1573 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1581 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 245:
+  case 246:
 
-/* Line 1455 of yacc.c  */
-#line 1578 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1586 "go.y"
     {
                (yyval.node) = liststmt((yyvsp[(1) - (1)].list));
        }
     break;
 
-  case 247:
+  case 248:
 
-/* Line 1455 of yacc.c  */
-#line 1583 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1591 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 253:
+  case 254:
 
-/* Line 1455 of yacc.c  */
-#line 1594 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1602 "go.y"
     {
                (yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N);
                (yyvsp[(1) - (2)].node)->sym = dclstack;  // context, for goto restrictions
        }
     break;
 
-  case 254:
+  case 255:
 
-/* Line 1455 of yacc.c  */
-#line 1599 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1607 "go.y"
     {
                NodeList *l;
 
@@ -4539,66 +4579,66 @@ yyreduce:
        }
     break;
 
-  case 255:
+  case 256:
 
-/* Line 1455 of yacc.c  */
-#line 1609 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1617 "go.y"
     {
                // will be converted to OFALL
                (yyval.node) = nod(OXFALL, N, N);
        }
     break;
 
-  case 256:
+  case 257:
 
-/* Line 1455 of yacc.c  */
-#line 1614 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1622 "go.y"
     {
                (yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 257:
+  case 258:
 
-/* Line 1455 of yacc.c  */
-#line 1618 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1626 "go.y"
     {
                (yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 258:
+  case 259:
 
-/* Line 1455 of yacc.c  */
-#line 1622 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1630 "go.y"
     {
                (yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 259:
+  case 260:
 
-/* Line 1455 of yacc.c  */
-#line 1626 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1634 "go.y"
     {
                (yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N);
        }
     break;
 
-  case 260:
+  case 261:
 
-/* Line 1455 of yacc.c  */
-#line 1630 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1638 "go.y"
     {
                (yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N);
                (yyval.node)->sym = dclstack;  // context, for goto restrictions
        }
     break;
 
-  case 261:
+  case 262:
 
-/* Line 1455 of yacc.c  */
-#line 1635 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1643 "go.y"
     {
                (yyval.node) = nod(ORETURN, N, N);
                (yyval.node)->list = (yyvsp[(2) - (2)].list);
@@ -4617,10 +4657,10 @@ yyreduce:
        }
     break;
 
-  case 262:
+  case 263:
 
-/* Line 1455 of yacc.c  */
-#line 1654 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1662 "go.y"
     {
                (yyval.list) = nil;
                if((yyvsp[(1) - (1)].node) != N)
@@ -4628,10 +4668,10 @@ yyreduce:
        }
     break;
 
-  case 263:
+  case 264:
 
-/* Line 1455 of yacc.c  */
-#line 1660 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1668 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (3)].list);
                if((yyvsp[(3) - (3)].node) != N)
@@ -4639,244 +4679,244 @@ yyreduce:
        }
     break;
 
-  case 264:
+  case 265:
 
-/* Line 1455 of yacc.c  */
-#line 1668 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1676 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 265:
+  case 266:
 
-/* Line 1455 of yacc.c  */
-#line 1672 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1680 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 266:
+  case 267:
 
-/* Line 1455 of yacc.c  */
-#line 1678 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1686 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 267:
+  case 268:
 
-/* Line 1455 of yacc.c  */
-#line 1682 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1690 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 268:
+  case 269:
 
-/* Line 1455 of yacc.c  */
-#line 1688 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1696 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 269:
+  case 270:
 
-/* Line 1455 of yacc.c  */
-#line 1692 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1700 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 270:
+  case 271:
 
-/* Line 1455 of yacc.c  */
-#line 1698 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1706 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 271:
+  case 272:
 
-/* Line 1455 of yacc.c  */
-#line 1702 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1710 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 272:
+  case 273:
 
-/* Line 1455 of yacc.c  */
-#line 1711 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1719 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 273:
+  case 274:
 
-/* Line 1455 of yacc.c  */
-#line 1715 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1723 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 274:
+  case 275:
 
-/* Line 1455 of yacc.c  */
-#line 1719 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1727 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 275:
+  case 276:
 
-/* Line 1455 of yacc.c  */
-#line 1723 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1731 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 276:
+  case 277:
 
-/* Line 1455 of yacc.c  */
-#line 1728 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1736 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 277:
+  case 278:
 
-/* Line 1455 of yacc.c  */
-#line 1732 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1740 "go.y"
     {
                (yyval.list) = (yyvsp[(1) - (2)].list);
        }
     break;
 
-  case 282:
+  case 283:
 
-/* Line 1455 of yacc.c  */
-#line 1746 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1754 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 284:
+  case 285:
 
-/* Line 1455 of yacc.c  */
-#line 1752 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1760 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 286:
+  case 287:
 
-/* Line 1455 of yacc.c  */
-#line 1758 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1766 "go.y"
     {
                (yyval.node) = N;
        }
     break;
 
-  case 288:
+  case 289:
 
-/* Line 1455 of yacc.c  */
-#line 1764 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1772 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 290:
+  case 291:
 
-/* Line 1455 of yacc.c  */
-#line 1770 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1778 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 292:
+  case 293:
 
-/* Line 1455 of yacc.c  */
-#line 1776 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1784 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 294:
+  case 295:
 
-/* Line 1455 of yacc.c  */
-#line 1782 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1790 "go.y"
     {
                (yyval.val).ctype = CTxxx;
        }
     break;
 
-  case 296:
+  case 297:
 
-/* Line 1455 of yacc.c  */
-#line 1792 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1800 "go.y"
     {
                importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval);
        }
     break;
 
-  case 297:
+  case 298:
 
-/* Line 1455 of yacc.c  */
-#line 1796 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1804 "go.y"
     {
                importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type));
        }
     break;
 
-  case 298:
+  case 299:
 
-/* Line 1455 of yacc.c  */
-#line 1800 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1808 "go.y"
     {
                importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node));
        }
     break;
 
-  case 299:
+  case 300:
 
-/* Line 1455 of yacc.c  */
-#line 1804 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1812 "go.y"
     {
                importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node));
        }
     break;
 
-  case 300:
+  case 301:
 
-/* Line 1455 of yacc.c  */
-#line 1808 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1816 "go.y"
     {
                importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type));
        }
     break;
 
-  case 301:
+  case 302:
 
-/* Line 1455 of yacc.c  */
-#line 1812 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1820 "go.y"
     {
                if((yyvsp[(2) - (4)].node) == N)
                        break;
@@ -4894,39 +4934,39 @@ yyreduce:
        }
     break;
 
-  case 302:
+  case 303:
 
-/* Line 1455 of yacc.c  */
-#line 1830 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1838 "go.y"
     {
                (yyval.sym) = (yyvsp[(1) - (1)].sym);
                structpkg = (yyval.sym)->pkg;
        }
     break;
 
-  case 303:
+  case 304:
 
-/* Line 1455 of yacc.c  */
-#line 1837 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1845 "go.y"
     {
                (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
                importsym((yyvsp[(1) - (1)].sym), OTYPE);
        }
     break;
 
-  case 309:
+  case 310:
 
-/* Line 1455 of yacc.c  */
-#line 1857 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1865 "go.y"
     {
                (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym));
        }
     break;
 
-  case 310:
+  case 311:
 
-/* Line 1455 of yacc.c  */
-#line 1861 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1869 "go.y"
     {
                // predefined name like uint8
                (yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg);
@@ -4938,64 +4978,64 @@ yyreduce:
        }
     break;
 
-  case 311:
+  case 312:
 
-/* Line 1455 of yacc.c  */
-#line 1871 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1879 "go.y"
     {
                (yyval.type) = aindex(N, (yyvsp[(3) - (3)].type));
        }
     break;
 
-  case 312:
+  case 313:
 
-/* Line 1455 of yacc.c  */
-#line 1875 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1883 "go.y"
     {
                (yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type));
        }
     break;
 
-  case 313:
+  case 314:
 
-/* Line 1455 of yacc.c  */
-#line 1879 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1887 "go.y"
     {
                (yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type));
        }
     break;
 
-  case 314:
+  case 315:
 
-/* Line 1455 of yacc.c  */
-#line 1883 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1891 "go.y"
     {
                (yyval.type) = tostruct((yyvsp[(3) - (4)].list));
        }
     break;
 
-  case 315:
+  case 316:
 
-/* Line 1455 of yacc.c  */
-#line 1887 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1895 "go.y"
     {
                (yyval.type) = tointerface((yyvsp[(3) - (4)].list));
        }
     break;
 
-  case 316:
+  case 317:
 
-/* Line 1455 of yacc.c  */
-#line 1891 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1899 "go.y"
     {
                (yyval.type) = ptrto((yyvsp[(2) - (2)].type));
        }
     break;
 
-  case 317:
+  case 318:
 
-/* Line 1455 of yacc.c  */
-#line 1895 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1903 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(2) - (2)].type);
@@ -5003,10 +5043,10 @@ yyreduce:
        }
     break;
 
-  case 318:
+  case 319:
 
-/* Line 1455 of yacc.c  */
-#line 1901 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1909 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (4)].type);
@@ -5014,10 +5054,10 @@ yyreduce:
        }
     break;
 
-  case 319:
+  case 320:
 
-/* Line 1455 of yacc.c  */
-#line 1907 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1915 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -5025,10 +5065,10 @@ yyreduce:
        }
     break;
 
-  case 320:
+  case 321:
 
-/* Line 1455 of yacc.c  */
-#line 1915 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1923 "go.y"
     {
                (yyval.type) = typ(TCHAN);
                (yyval.type)->type = (yyvsp[(3) - (3)].type);
@@ -5036,19 +5076,19 @@ yyreduce:
        }
     break;
 
-  case 321:
+  case 322:
 
-/* Line 1455 of yacc.c  */
-#line 1923 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1931 "go.y"
     {
                (yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list));
        }
     break;
 
-  case 322:
+  case 323:
 
-/* Line 1455 of yacc.c  */
-#line 1929 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1937 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type)));
                if((yyvsp[(1) - (3)].sym))
@@ -5057,10 +5097,10 @@ yyreduce:
        }
     break;
 
-  case 323:
+  case 324:
 
-/* Line 1455 of yacc.c  */
-#line 1936 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1944 "go.y"
     {
                Type *t;
        
@@ -5076,10 +5116,10 @@ yyreduce:
        }
     break;
 
-  case 324:
+  case 325:
 
-/* Line 1455 of yacc.c  */
-#line 1952 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1960 "go.y"
     {
                Sym *s;
 
@@ -5097,64 +5137,64 @@ yyreduce:
        }
     break;
 
-  case 325:
+  case 326:
 
-/* Line 1455 of yacc.c  */
-#line 1970 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1978 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list))));
        }
     break;
 
-  case 326:
+  case 327:
 
-/* Line 1455 of yacc.c  */
-#line 1974 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1982 "go.y"
     {
                (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)));
        }
     break;
 
-  case 327:
+  case 328:
 
-/* Line 1455 of yacc.c  */
-#line 1979 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1987 "go.y"
     {
                (yyval.list) = nil;
        }
     break;
 
-  case 329:
+  case 330:
 
-/* Line 1455 of yacc.c  */
-#line 1986 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1994 "go.y"
     {
                (yyval.list) = (yyvsp[(2) - (3)].list);
        }
     break;
 
-  case 330:
+  case 331:
 
-/* Line 1455 of yacc.c  */
-#line 1990 "go.y"
+/* Line 1806 of yacc.c  */
+#line 1998 "go.y"
     {
                (yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))));
        }
     break;
 
-  case 331:
+  case 332:
 
-/* Line 1455 of yacc.c  */
-#line 2000 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2008 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(1) - (1)].val));
        }
     break;
 
-  case 332:
+  case 333:
 
-/* Line 1455 of yacc.c  */
-#line 2004 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2012 "go.y"
     {
                (yyval.node) = nodlit((yyvsp[(2) - (2)].val));
                switch((yyval.node)->val.ctype){
@@ -5171,10 +5211,10 @@ yyreduce:
        }
     break;
 
-  case 333:
+  case 334:
 
-/* Line 1455 of yacc.c  */
-#line 2019 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2027 "go.y"
     {
                (yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg));
                if((yyval.node)->op != OLITERAL)
@@ -5182,10 +5222,10 @@ yyreduce:
        }
     break;
 
-  case 335:
+  case 336:
 
-/* Line 1455 of yacc.c  */
-#line 2028 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2036 "go.y"
     {
                if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) {
                        (yyval.node) = (yyvsp[(2) - (5)].node);
@@ -5196,55 +5236,55 @@ yyreduce:
        }
     break;
 
-  case 338:
+  case 339:
 
-/* Line 1455 of yacc.c  */
-#line 2042 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2050 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 339:
+  case 340:
 
-/* Line 1455 of yacc.c  */
-#line 2046 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2054 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 340:
+  case 341:
 
-/* Line 1455 of yacc.c  */
-#line 2052 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2060 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 341:
+  case 342:
 
-/* Line 1455 of yacc.c  */
-#line 2056 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2064 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
     break;
 
-  case 342:
+  case 343:
 
-/* Line 1455 of yacc.c  */
-#line 2062 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2070 "go.y"
     {
                (yyval.list) = list1((yyvsp[(1) - (1)].node));
        }
     break;
 
-  case 343:
+  case 344:
 
-/* Line 1455 of yacc.c  */
-#line 2066 "go.y"
+/* Line 1806 of yacc.c  */
+#line 2074 "go.y"
     {
                (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node));
        }
@@ -5252,10 +5292,21 @@ yyreduce:
 
 
 
-/* Line 1455 of yacc.c  */
-#line 5258 "y.tab.c"
+/* Line 1806 of yacc.c  */
+#line 5298 "y.tab.c"
       default: break;
     }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
 
   YYPOPSTACK (yylen);
@@ -5283,6 +5334,10 @@ yyreduce:
 | yyerrlab -- here on detecting error |
 `------------------------------------*/
 yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
   /* If not already recovering from an error, report this error.  */
   if (!yyerrstatus)
     {
@@ -5290,37 +5345,36 @@ yyerrlab:
 #if ! YYERROR_VERBOSE
       yyerror (YY_("syntax error"));
 #else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
       {
-       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-         {
-           YYSIZE_T yyalloc = 2 * yysize;
-           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-             yyalloc = YYSTACK_ALLOC_MAXIMUM;
-           if (yymsg != yymsgbuf)
-             YYSTACK_FREE (yymsg);
-           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-           if (yymsg)
-             yymsg_alloc = yyalloc;
-           else
-             {
-               yymsg = yymsgbuf;
-               yymsg_alloc = sizeof yymsgbuf;
-             }
-         }
-
-       if (0 < yysize && yysize <= yymsg_alloc)
-         {
-           (void) yysyntax_error (yymsg, yystate, yychar);
-           yyerror (yymsg);
-         }
-       else
-         {
-           yyerror (YY_("syntax error"));
-           if (yysize != 0)
-             goto yyexhaustedlab;
-         }
+        char *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
       }
+# undef YYSYNTAX_ERROR
 #endif
     }
 
@@ -5379,7 +5433,7 @@ yyerrlab1:
   for (;;)
     {
       yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
+      if (!yypact_value_is_default (yyn))
        {
          yyn += YYTERROR;
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -5438,8 +5492,13 @@ yyexhaustedlab:
 
 yyreturn:
   if (yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                yytoken, &yylval);
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval);
+    }
   /* Do not reclaim the symbols of the rule which action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
@@ -5464,8 +5523,8 @@ yyreturn:
 
 
 
-/* Line 1675 of yacc.c  */
-#line 2070 "go.y"
+/* Line 2067 of yacc.c  */
+#line 2078 "go.y"
 
 
 static void
index 11e19b6af04169619d57df5f6835804e9e7131c0..bc6c47d6d288fbc34ccaa8e87b8e15c3a93eeca9 100644 (file)
@@ -1,10 +1,8 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
 
-/* A Bison parser, made by GNU Bison 2.4.1.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
+/* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 typedef union YYSTYPE
 {
 
-/* Line 1676 of yacc.c  */
+/* Line 2068 of yacc.c  */
 #line 28 "go.y"
 
        Node*           node;
@@ -160,8 +158,8 @@ typedef union YYSTYPE
 
 
 
-/* Line 1676 of yacc.c  */
-#line 165 "y.tab.h"
+/* Line 2068 of yacc.c  */
+#line 163 "y.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index 731ca7c8d988c75e2851db31d15001064868067b..588890d0edfe0ff06f27cb84ab123841e4b9a54b 100644 (file)
@@ -14,25 +14,25 @@ static struct {
        // is converted by bisonerrors into the yystate and yychar caused
        // by that token list.
 
-       220, ',',
+       221, ',',
        "unexpected comma during import block",
 
-       376, ';',
+       377, ';',
        "unexpected semicolon or newline before {",
 
-       397, ';',
+       398, ';',
        "unexpected semicolon or newline before {",
 
-       236, ';',
+       237, ';',
        "unexpected semicolon or newline before {",
 
-       473, LBODY,
+       474, LBODY,
        "unexpected semicolon or newline before {",
 
        22, '{',
        "unexpected semicolon or newline before {",
 
-       143, ';',
+       144, ';',
        "unexpected semicolon or newline in type declaration",
 
        37, '}',
@@ -44,30 +44,30 @@ static struct {
        37, ',',
        "unexpected comma in channel type",
 
-       436, LELSE,
+       437, LELSE,
        "unexpected semicolon or newline before else",
 
-       256, ',',
+       257, ',',
        "name list not allowed in interface type",
 
-       236, LVAR,
+       237, LVAR,
        "var declaration not allowed in for initializer",
 
        65, '{',
        "unexpected { at end of statement",
 
-       375, '{',
+       376, '{',
        "unexpected { at end of statement",
        
-       124, ';',
+       125, ';',
        "argument to go/defer must be function call",
        
-       424, ';',
+       425, ';',
        "need trailing comma before newline in composite literal",
        
-       111, LNAME,
+       112, LNAME,
        "nested func not allowed",
 
-       614, ';',
+       615, ';',
        "else must be followed by if or statement block"
 };
index 54d22fd9e183b3fb904ae97cd8c7d520a7e30ca5..02d443b2e2b81ffaa3c1eb3eb967c258256026b6 100644 (file)
@@ -4,10 +4,48 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Verify that imports with backslashes are rejected by the compiler.
+// Verify that invalid imports are rejected by the compiler.
 // Does not compile.
-// TODO: make more thorough.
 
 package main
 
-import `net\http`  // ERROR "backslash"
+// Correct import paths.
+import _ "fmt"
+import _ `time`
+import _ "m\x61th"
+import _ "go/parser"
+
+// Correct import paths, but the packages don't exist.
+// Don't test.
+//import "a.b"
+//import "greek/αβ"
+
+// Import paths must be strings.
+import 42    // ERROR "import statement"
+import 'a'   // ERROR "import statement"
+import 3.14  // ERROR "import statement"
+import 0.25i // ERROR "import statement"
+
+// Each of these pairs tests both `` vs "" strings
+// and also use of invalid characters spelled out as
+// escape sequences and written directly.
+// For example `"\x00"` tests import "\x00"
+// while "`\x00`" tests import `<actual-NUL-byte>`.
+import ""         // ERROR "import path"
+import ``         // ERROR "import path"
+import "\x00"     // ERROR "import path"
+import `\x00`     // ERROR "import path"
+import "\x7f"     // ERROR "import path"
+import `\x7f`     // ERROR "import path"
+import "a!"       // ERROR "import path"
+import `a!`       // ERROR "import path"
+import "a b"      // ERROR "import path"
+import `a b`      // ERROR "import path"
+import "a\\b"     // ERROR "import path"
+import `a\\b`     // ERROR "import path"
+import "\"`a`\""  // ERROR "import path"
+import `\"a\"`    // ERROR "import path"
+import "\x80\x80" // ERROR "import path"
+import `\x80\x80` // ERROR "import path"
+import "\xFFFD"   // ERROR "import path"
+import `\xFFFD`   // ERROR "import path"