Merge remote branch 'origin/master' into pipe-video
[mesa.git] / src / glsl / glsl_parser.cpp
index ab6e83bead647737700ebf6c7573a588036ab53c..1db7e901a96b9b55f7504d3e6fecccbe649c941a 100644 (file)
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1.  */
+/* A Bison parser, made by GNU Bison 2.4.3.  */
 
 /* Skeleton implementation for Bison's 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, 2001, 2002, 2003, 2004, 2005, 2006,
+   2009, 2010 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 +45,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 
 
 /* Line 189 of yacc.c  */
-#line 118 "glsl_parser.cpp"
+#line 117 "glsl_parser.cpp"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
      VOID_TOK = 329,
      WHILE = 330,
      IDENTIFIER = 331,
-     FLOATCONSTANT = 332,
-     INTCONSTANT = 333,
-     UINTCONSTANT = 334,
-     BOOLCONSTANT = 335,
-     FIELD_SELECTION = 336,
-     LEFT_OP = 337,
-     RIGHT_OP = 338,
-     INC_OP = 339,
-     DEC_OP = 340,
-     LE_OP = 341,
-     GE_OP = 342,
-     EQ_OP = 343,
-     NE_OP = 344,
-     AND_OP = 345,
-     OR_OP = 346,
-     XOR_OP = 347,
-     MUL_ASSIGN = 348,
-     DIV_ASSIGN = 349,
-     ADD_ASSIGN = 350,
-     MOD_ASSIGN = 351,
-     LEFT_ASSIGN = 352,
-     RIGHT_ASSIGN = 353,
-     AND_ASSIGN = 354,
-     XOR_ASSIGN = 355,
-     OR_ASSIGN = 356,
-     SUB_ASSIGN = 357,
-     INVARIANT = 358,
-     LOWP = 359,
-     MEDIUMP = 360,
-     HIGHP = 361,
-     SUPERP = 362,
-     PRECISION = 363,
-     VERSION = 364,
-     EXTENSION = 365,
-     LINE = 366,
-     COLON = 367,
-     EOL = 368,
-     INTERFACE = 369,
-     OUTPUT = 370,
-     PRAGMA_DEBUG_ON = 371,
-     PRAGMA_DEBUG_OFF = 372,
-     PRAGMA_OPTIMIZE_ON = 373,
-     PRAGMA_OPTIMIZE_OFF = 374,
-     PRAGMA_INVARIANT_ALL = 375,
-     LAYOUT_TOK = 376,
-     ASM = 377,
-     CLASS = 378,
-     UNION = 379,
-     ENUM = 380,
-     TYPEDEF = 381,
-     TEMPLATE = 382,
-     THIS = 383,
-     PACKED_TOK = 384,
-     GOTO = 385,
-     INLINE_TOK = 386,
-     NOINLINE = 387,
-     VOLATILE = 388,
-     PUBLIC_TOK = 389,
-     STATIC = 390,
-     EXTERN = 391,
-     EXTERNAL = 392,
-     LONG_TOK = 393,
-     SHORT_TOK = 394,
-     DOUBLE_TOK = 395,
-     HALF = 396,
-     FIXED_TOK = 397,
-     UNSIGNED = 398,
-     INPUT_TOK = 399,
-     OUPTUT = 400,
-     HVEC2 = 401,
-     HVEC3 = 402,
-     HVEC4 = 403,
-     DVEC2 = 404,
-     DVEC3 = 405,
-     DVEC4 = 406,
-     FVEC2 = 407,
-     FVEC3 = 408,
-     FVEC4 = 409,
-     SAMPLER2DRECT = 410,
-     SAMPLER3DRECT = 411,
-     SAMPLER2DRECTSHADOW = 412,
-     SIZEOF = 413,
-     CAST = 414,
-     NAMESPACE = 415,
-     USING = 416,
-     ERROR_TOK = 417,
-     COMMON = 418,
-     PARTITION = 419,
-     ACTIVE = 420,
-     SAMPLERBUFFER = 421,
-     FILTER = 422,
-     IMAGE1D = 423,
-     IMAGE2D = 424,
-     IMAGE3D = 425,
-     IMAGECUBE = 426,
-     IMAGE1DARRAY = 427,
-     IMAGE2DARRAY = 428,
-     IIMAGE1D = 429,
-     IIMAGE2D = 430,
-     IIMAGE3D = 431,
-     IIMAGECUBE = 432,
-     IIMAGE1DARRAY = 433,
-     IIMAGE2DARRAY = 434,
-     UIMAGE1D = 435,
-     UIMAGE2D = 436,
-     UIMAGE3D = 437,
-     UIMAGECUBE = 438,
-     UIMAGE1DARRAY = 439,
-     UIMAGE2DARRAY = 440,
-     IMAGE1DSHADOW = 441,
-     IMAGE2DSHADOW = 442,
-     IMAGEBUFFER = 443,
-     IIMAGEBUFFER = 444,
-     UIMAGEBUFFER = 445,
-     IMAGE1DARRAYSHADOW = 446,
-     IMAGE2DARRAYSHADOW = 447,
-     ROW_MAJOR = 448
+     TYPE_IDENTIFIER = 332,
+     NEW_IDENTIFIER = 333,
+     FLOATCONSTANT = 334,
+     INTCONSTANT = 335,
+     UINTCONSTANT = 336,
+     BOOLCONSTANT = 337,
+     FIELD_SELECTION = 338,
+     LEFT_OP = 339,
+     RIGHT_OP = 340,
+     INC_OP = 341,
+     DEC_OP = 342,
+     LE_OP = 343,
+     GE_OP = 344,
+     EQ_OP = 345,
+     NE_OP = 346,
+     AND_OP = 347,
+     OR_OP = 348,
+     XOR_OP = 349,
+     MUL_ASSIGN = 350,
+     DIV_ASSIGN = 351,
+     ADD_ASSIGN = 352,
+     MOD_ASSIGN = 353,
+     LEFT_ASSIGN = 354,
+     RIGHT_ASSIGN = 355,
+     AND_ASSIGN = 356,
+     XOR_ASSIGN = 357,
+     OR_ASSIGN = 358,
+     SUB_ASSIGN = 359,
+     INVARIANT = 360,
+     LOWP = 361,
+     MEDIUMP = 362,
+     HIGHP = 363,
+     SUPERP = 364,
+     PRECISION = 365,
+     VERSION = 366,
+     EXTENSION = 367,
+     LINE = 368,
+     COLON = 369,
+     EOL = 370,
+     INTERFACE = 371,
+     OUTPUT = 372,
+     PRAGMA_DEBUG_ON = 373,
+     PRAGMA_DEBUG_OFF = 374,
+     PRAGMA_OPTIMIZE_ON = 375,
+     PRAGMA_OPTIMIZE_OFF = 376,
+     PRAGMA_INVARIANT_ALL = 377,
+     LAYOUT_TOK = 378,
+     ASM = 379,
+     CLASS = 380,
+     UNION = 381,
+     ENUM = 382,
+     TYPEDEF = 383,
+     TEMPLATE = 384,
+     THIS = 385,
+     PACKED_TOK = 386,
+     GOTO = 387,
+     INLINE_TOK = 388,
+     NOINLINE = 389,
+     VOLATILE = 390,
+     PUBLIC_TOK = 391,
+     STATIC = 392,
+     EXTERN = 393,
+     EXTERNAL = 394,
+     LONG_TOK = 395,
+     SHORT_TOK = 396,
+     DOUBLE_TOK = 397,
+     HALF = 398,
+     FIXED_TOK = 399,
+     UNSIGNED = 400,
+     INPUT_TOK = 401,
+     OUPTUT = 402,
+     HVEC2 = 403,
+     HVEC3 = 404,
+     HVEC4 = 405,
+     DVEC2 = 406,
+     DVEC3 = 407,
+     DVEC4 = 408,
+     FVEC2 = 409,
+     FVEC3 = 410,
+     FVEC4 = 411,
+     SAMPLER2DRECT = 412,
+     SAMPLER3DRECT = 413,
+     SAMPLER2DRECTSHADOW = 414,
+     SIZEOF = 415,
+     CAST = 416,
+     NAMESPACE = 417,
+     USING = 418,
+     ERROR_TOK = 419,
+     COMMON = 420,
+     PARTITION = 421,
+     ACTIVE = 422,
+     SAMPLERBUFFER = 423,
+     FILTER = 424,
+     IMAGE1D = 425,
+     IMAGE2D = 426,
+     IMAGE3D = 427,
+     IMAGECUBE = 428,
+     IMAGE1DARRAY = 429,
+     IMAGE2DARRAY = 430,
+     IIMAGE1D = 431,
+     IIMAGE2D = 432,
+     IIMAGE3D = 433,
+     IIMAGECUBE = 434,
+     IIMAGE1DARRAY = 435,
+     IIMAGE2DARRAY = 436,
+     UIMAGE1D = 437,
+     UIMAGE2D = 438,
+     UIMAGE3D = 439,
+     UIMAGECUBE = 440,
+     UIMAGE1DARRAY = 441,
+     UIMAGE2DARRAY = 442,
+     IMAGE1DSHADOW = 443,
+     IMAGE2DSHADOW = 444,
+     IMAGEBUFFER = 445,
+     IIMAGEBUFFER = 446,
+     UIMAGEBUFFER = 447,
+     IMAGE1DARRAYSHADOW = 448,
+     IMAGE2DARRAYSHADOW = 449,
+     ROW_MAJOR = 450
    };
 #endif
 
@@ -375,7 +376,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 379 "glsl_parser.cpp"
+#line 380 "glsl_parser.cpp"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -400,7 +401,7 @@ typedef struct YYLTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 404 "glsl_parser.cpp"
+#line 405 "glsl_parser.cpp"
 
 #ifdef short
 # undef short
@@ -450,7 +451,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)
@@ -617,20 +618,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3738
+#define YYLAST   3692
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  218
+#define YYNTOKENS  220
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  87
+#define YYNNTS  93
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  279
+#define YYNRULES  291
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  415
+#define YYNSTATES  434
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   448
+#define YYMAXUTOK   450
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -641,16 +642,16 @@ static const yytype_uint8 yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   202,     2,     2,     2,   206,   209,     2,
-     194,   195,   204,   200,   199,   201,   198,   205,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   213,   215,
-     207,   214,   208,   212,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   204,     2,     2,     2,   208,   211,     2,
+     196,   197,   206,   202,   201,   203,   200,   207,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   215,   217,
+     209,   216,   210,   214,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   196,     2,   197,   210,     2,     2,     2,     2,     2,
+       2,   198,     2,   199,   212,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   216,   211,   217,   203,     2,     2,     2,
+       2,     2,     2,   218,   213,   219,   205,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -682,7 +683,8 @@ static const yytype_uint8 yytranslate[] =
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195
 };
 
 #if YYDEBUG
@@ -691,151 +693,158 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint16 yyprhs[] =
 {
        0,     0,     3,     4,     9,    10,    14,    17,    20,    23,
-      26,    29,    30,    33,    39,    41,    44,    46,    48,    50,
-      52,    54,    56,    60,    62,    67,    69,    73,    76,    79,
-      81,    83,    85,    89,    92,    95,    98,   100,   103,   107,
-     110,   112,   114,   116,   118,   121,   124,   127,   129,   131,
-     133,   135,   137,   141,   145,   149,   151,   155,   159,   161,
-     165,   169,   171,   175,   179,   183,   187,   189,   193,   197,
-     199,   203,   205,   209,   211,   215,   217,   221,   223,   227,
-     229,   233,   235,   241,   243,   247,   249,   251,   253,   255,
-     257,   259,   261,   263,   265,   267,   269,   271,   275,   277,
-     280,   283,   288,   291,   293,   295,   298,   302,   306,   309,
-     315,   319,   322,   326,   329,   330,   332,   334,   336,   338,
-     340,   344,   350,   357,   365,   374,   380,   382,   385,   390,
-     396,   403,   411,   416,   419,   421,   424,   429,   431,   435,
-     437,   441,   443,   445,   447,   449,   451,   453,   456,   458,
-     461,   464,   468,   470,   472,   474,   476,   479,   481,   483,
-     486,   489,   491,   493,   496,   498,   502,   507,   509,   511,
-     513,   515,   517,   519,   521,   523,   525,   527,   529,   531,
-     533,   535,   537,   539,   541,   543,   545,   547,   549,   551,
-     553,   555,   557,   559,   561,   563,   565,   567,   569,   571,
-     573,   575,   577,   579,   581,   583,   585,   587,   589,   591,
-     593,   595,   597,   599,   601,   603,   605,   607,   609,   611,
-     613,   615,   617,   619,   621,   627,   632,   634,   637,   641,
-     643,   647,   649,   654,   656,   658,   660,   662,   664,   666,
-     668,   670,   672,   674,   676,   679,   683,   685,   687,   690,
-     694,   696,   699,   701,   704,   710,   714,   716,   718,   723,
-     729,   733,   736,   742,   750,   757,   759,   761,   763,   764,
-     767,   771,   774,   777,   780,   784,   787,   789,   791,   793
+      26,    29,    30,    33,    35,    37,    39,    45,    47,    50,
+      52,    54,    56,    58,    60,    62,    64,    68,    70,    75,
+      77,    81,    84,    87,    89,    91,    93,    97,   100,   103,
+     106,   108,   111,   115,   118,   120,   122,   124,   127,   130,
+     133,   135,   138,   142,   145,   147,   150,   153,   156,   158,
+     160,   162,   164,   166,   170,   174,   178,   180,   184,   188,
+     190,   194,   198,   200,   204,   208,   212,   216,   218,   222,
+     226,   228,   232,   234,   238,   240,   244,   246,   250,   252,
+     256,   258,   262,   264,   270,   272,   276,   278,   280,   282,
+     284,   286,   288,   290,   292,   294,   296,   298,   300,   304,
+     306,   309,   312,   317,   320,   322,   324,   327,   331,   335,
+     338,   344,   348,   351,   355,   358,   359,   361,   363,   365,
+     367,   369,   373,   379,   386,   394,   403,   409,   411,   414,
+     419,   425,   432,   440,   445,   448,   450,   453,   458,   460,
+     464,   466,   470,   472,   474,   476,   478,   480,   482,   485,
+     487,   490,   493,   497,   499,   501,   503,   505,   508,   510,
+     512,   515,   518,   520,   522,   525,   527,   531,   536,   538,
+     540,   542,   544,   546,   548,   550,   552,   554,   556,   558,
+     560,   562,   564,   566,   568,   570,   572,   574,   576,   578,
+     580,   582,   584,   586,   588,   590,   592,   594,   596,   598,
+     600,   602,   604,   606,   608,   610,   612,   614,   616,   618,
+     620,   622,   624,   626,   628,   630,   632,   634,   636,   638,
+     640,   642,   644,   646,   648,   650,   656,   661,   663,   666,
+     670,   672,   676,   678,   683,   685,   687,   689,   691,   693,
+     695,   697,   699,   701,   703,   705,   708,   709,   714,   716,
+     718,   721,   725,   727,   730,   732,   735,   741,   745,   747,
+     749,   754,   760,   764,   767,   773,   781,   788,   790,   792,
+     794,   795,   798,   802,   805,   808,   811,   815,   818,   820,
+     822,   824
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     219,     0,    -1,    -1,   221,   223,   220,   225,    -1,    -1,
-     109,    78,   113,    -1,   116,   113,    -1,   117,   113,    -1,
-     118,   113,    -1,   119,   113,    -1,   120,   113,    -1,    -1,
-     223,   224,    -1,   110,    76,   112,    76,   113,    -1,   303,
-      -1,   225,   303,    -1,    76,    -1,   226,    -1,    78,    -1,
-      79,    -1,    77,    -1,    80,    -1,   194,   253,   195,    -1,
-     227,    -1,   228,   196,   229,   197,    -1,   230,    -1,   228,
-     198,    76,    -1,   228,    84,    -1,   228,    85,    -1,   253,
-      -1,   231,    -1,   232,    -1,   228,   198,   232,    -1,   234,
-     195,    -1,   233,   195,    -1,   235,    74,    -1,   235,    -1,
-     235,   251,    -1,   234,   199,   251,    -1,   236,   194,    -1,
-     274,    -1,    76,    -1,    81,    -1,   228,    -1,    84,   237,
-      -1,    85,   237,    -1,   238,   237,    -1,   200,    -1,   201,
-      -1,   202,    -1,   203,    -1,   237,    -1,   239,   204,   237,
-      -1,   239,   205,   237,    -1,   239,   206,   237,    -1,   239,
-      -1,   240,   200,   239,    -1,   240,   201,   239,    -1,   240,
-      -1,   241,    82,   240,    -1,   241,    83,   240,    -1,   241,
-      -1,   242,   207,   241,    -1,   242,   208,   241,    -1,   242,
-      86,   241,    -1,   242,    87,   241,    -1,   242,    -1,   243,
-      88,   242,    -1,   243,    89,   242,    -1,   243,    -1,   244,
-     209,   243,    -1,   244,    -1,   245,   210,   244,    -1,   245,
-      -1,   246,   211,   245,    -1,   246,    -1,   247,    90,   246,
-      -1,   247,    -1,   248,    92,   247,    -1,   248,    -1,   249,
-      91,   248,    -1,   249,    -1,   249,   212,   253,   213,   251,
-      -1,   250,    -1,   237,   252,   251,    -1,   214,    -1,    93,
-      -1,    94,    -1,    96,    -1,    95,    -1,   102,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   251,
-      -1,   253,   199,   251,    -1,   250,    -1,   256,   215,    -1,
-     264,   215,    -1,   108,   278,   275,   215,    -1,   257,   195,
-      -1,   259,    -1,   258,    -1,   259,   261,    -1,   258,   199,
-     261,    -1,   266,    76,   194,    -1,   274,    76,    -1,   274,
-      76,   196,   254,   197,    -1,   271,   262,   260,    -1,   262,
-     260,    -1,   271,   262,   263,    -1,   262,   263,    -1,    -1,
-      33,    -1,    34,    -1,    35,    -1,   274,    -1,   265,    -1,
-     264,   199,    76,    -1,   264,   199,    76,   196,   197,    -1,
-     264,   199,    76,   196,   254,   197,    -1,   264,   199,    76,
-     196,   197,   214,   284,    -1,   264,   199,    76,   196,   254,
-     197,   214,   284,    -1,   264,   199,    76,   214,   284,    -1,
-     266,    -1,   266,    76,    -1,   266,    76,   196,   197,    -1,
-     266,    76,   196,   254,   197,    -1,   266,    76,   196,   197,
-     214,   284,    -1,   266,    76,   196,   254,   197,   214,   284,
-      -1,   266,    76,   214,   284,    -1,   103,    76,    -1,   274,
-      -1,   272,   274,    -1,   121,   194,   268,   195,    -1,   269,
-      -1,   268,   199,   269,    -1,    76,    -1,    76,   214,    78,
-      -1,    40,    -1,    39,    -1,    38,    -1,     4,    -1,   273,
-      -1,   267,    -1,   267,   273,    -1,   270,    -1,   270,   273,
-      -1,   103,   273,    -1,   103,   270,   273,    -1,   103,    -1,
-       4,    -1,     3,    -1,    37,    -1,    32,    37,    -1,    33,
-      -1,    34,    -1,    32,    33,    -1,    32,    34,    -1,    36,
-      -1,   275,    -1,   278,   275,    -1,   276,    -1,   276,   196,
-     197,    -1,   276,   196,   254,   197,    -1,   277,    -1,   279,
-      -1,    76,    -1,    74,    -1,     6,    -1,     7,    -1,     8,
-      -1,     5,    -1,    29,    -1,    30,    -1,    31,    -1,    20,
-      -1,    21,    -1,    22,    -1,    23,    -1,    24,    -1,    25,
-      -1,    26,    -1,    27,    -1,    28,    -1,    41,    -1,    42,
-      -1,    43,    -1,    44,    -1,    45,    -1,    46,    -1,    47,
-      -1,    48,    -1,    49,    -1,    50,    -1,    51,    -1,   155,
-      -1,    52,    -1,    53,    -1,    54,    -1,    55,    -1,   157,
-      -1,    56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,
-      -1,    61,    -1,    62,    -1,    63,    -1,    64,    -1,    65,
-      -1,    66,    -1,    67,    -1,    68,    -1,    69,    -1,    70,
-      -1,    71,    -1,    72,    -1,   106,    -1,   105,    -1,   104,
-      -1,    73,    76,   216,   280,   217,    -1,    73,   216,   280,
-     217,    -1,   281,    -1,   280,   281,    -1,   274,   282,   215,
-      -1,   283,    -1,   282,   199,   283,    -1,    76,    -1,    76,
-     196,   254,   197,    -1,   251,    -1,   255,    -1,   288,    -1,
-     287,    -1,   285,    -1,   292,    -1,   293,    -1,   296,    -1,
-     297,    -1,   298,    -1,   302,    -1,   216,   217,    -1,   216,
-     291,   217,    -1,   290,    -1,   287,    -1,   216,   217,    -1,
-     216,   291,   217,    -1,   286,    -1,   291,   286,    -1,   215,
-      -1,   253,   215,    -1,    14,   194,   253,   195,   294,    -1,
-     286,    12,   286,    -1,   286,    -1,   253,    -1,   266,    76,
-     214,   284,    -1,    17,   194,   253,   195,   288,    -1,    18,
-     253,   213,    -1,    19,   213,    -1,    75,   194,   295,   195,
-     289,    -1,    11,   286,    75,   194,   253,   195,   215,    -1,
-      13,   194,   299,   301,   195,   289,    -1,   292,    -1,   285,
-      -1,   295,    -1,    -1,   300,   215,    -1,   300,   215,   253,
-      -1,    10,   215,    -1,     9,   215,    -1,    16,   215,    -1,
-      16,   253,   215,    -1,    15,   215,    -1,   304,    -1,   255,
-      -1,   222,    -1,   256,   290,    -1
+     221,     0,    -1,    -1,   223,   225,   222,   228,    -1,    -1,
+     111,    80,   115,    -1,   118,   115,    -1,   119,   115,    -1,
+     120,   115,    -1,   121,   115,    -1,   122,   115,    -1,    -1,
+     225,   227,    -1,    76,    -1,    77,    -1,    78,    -1,   112,
+     226,   114,   226,   115,    -1,   311,    -1,   228,   311,    -1,
+      76,    -1,    78,    -1,   229,    -1,    80,    -1,    81,    -1,
+      79,    -1,    82,    -1,   196,   260,   197,    -1,   230,    -1,
+     231,   198,   232,   199,    -1,   233,    -1,   231,   200,   226,
+      -1,   231,    86,    -1,   231,    87,    -1,   260,    -1,   234,
+      -1,   235,    -1,   231,   200,   240,    -1,   237,   197,    -1,
+     236,   197,    -1,   238,    74,    -1,   238,    -1,   238,   258,
+      -1,   237,   201,   258,    -1,   239,   196,    -1,   281,    -1,
+     229,    -1,    83,    -1,   242,   197,    -1,   241,   197,    -1,
+     243,    74,    -1,   243,    -1,   243,   258,    -1,   242,   201,
+     258,    -1,   229,   196,    -1,   231,    -1,    86,   244,    -1,
+      87,   244,    -1,   245,   244,    -1,   202,    -1,   203,    -1,
+     204,    -1,   205,    -1,   244,    -1,   246,   206,   244,    -1,
+     246,   207,   244,    -1,   246,   208,   244,    -1,   246,    -1,
+     247,   202,   246,    -1,   247,   203,   246,    -1,   247,    -1,
+     248,    84,   247,    -1,   248,    85,   247,    -1,   248,    -1,
+     249,   209,   248,    -1,   249,   210,   248,    -1,   249,    88,
+     248,    -1,   249,    89,   248,    -1,   249,    -1,   250,    90,
+     249,    -1,   250,    91,   249,    -1,   250,    -1,   251,   211,
+     250,    -1,   251,    -1,   252,   212,   251,    -1,   252,    -1,
+     253,   213,   252,    -1,   253,    -1,   254,    92,   253,    -1,
+     254,    -1,   255,    94,   254,    -1,   255,    -1,   256,    93,
+     255,    -1,   256,    -1,   256,   214,   260,   215,   258,    -1,
+     257,    -1,   244,   259,   258,    -1,   216,    -1,    95,    -1,
+      96,    -1,    98,    -1,    97,    -1,   104,    -1,    99,    -1,
+     100,    -1,   101,    -1,   102,    -1,   103,    -1,   258,    -1,
+     260,   201,   258,    -1,   257,    -1,   263,   217,    -1,   271,
+     217,    -1,   110,   285,   282,   217,    -1,   264,   197,    -1,
+     266,    -1,   265,    -1,   266,   268,    -1,   265,   201,   268,
+      -1,   273,   229,   196,    -1,   281,   226,    -1,   281,   226,
+     198,   261,   199,    -1,   278,   269,   267,    -1,   269,   267,
+      -1,   278,   269,   270,    -1,   269,   270,    -1,    -1,    33,
+      -1,    34,    -1,    35,    -1,   281,    -1,   272,    -1,   271,
+     201,   226,    -1,   271,   201,   226,   198,   199,    -1,   271,
+     201,   226,   198,   261,   199,    -1,   271,   201,   226,   198,
+     199,   216,   291,    -1,   271,   201,   226,   198,   261,   199,
+     216,   291,    -1,   271,   201,   226,   216,   291,    -1,   273,
+      -1,   273,   226,    -1,   273,   226,   198,   199,    -1,   273,
+     226,   198,   261,   199,    -1,   273,   226,   198,   199,   216,
+     291,    -1,   273,   226,   198,   261,   199,   216,   291,    -1,
+     273,   226,   216,   291,    -1,   105,   229,    -1,   281,    -1,
+     279,   281,    -1,   123,   196,   275,   197,    -1,   276,    -1,
+     275,   201,   276,    -1,   226,    -1,   226,   216,    80,    -1,
+      40,    -1,    39,    -1,    38,    -1,     4,    -1,   280,    -1,
+     274,    -1,   274,   280,    -1,   277,    -1,   277,   280,    -1,
+     105,   280,    -1,   105,   277,   280,    -1,   105,    -1,     4,
+      -1,     3,    -1,    37,    -1,    32,    37,    -1,    33,    -1,
+      34,    -1,    32,    33,    -1,    32,    34,    -1,    36,    -1,
+     282,    -1,   285,   282,    -1,   283,    -1,   283,   198,   199,
+      -1,   283,   198,   261,   199,    -1,   284,    -1,   286,    -1,
+      77,    -1,    74,    -1,     6,    -1,     7,    -1,     8,    -1,
+       5,    -1,    29,    -1,    30,    -1,    31,    -1,    20,    -1,
+      21,    -1,    22,    -1,    23,    -1,    24,    -1,    25,    -1,
+      26,    -1,    27,    -1,    28,    -1,    41,    -1,    42,    -1,
+      43,    -1,    44,    -1,    45,    -1,    46,    -1,    47,    -1,
+      48,    -1,    49,    -1,    50,    -1,    51,    -1,   157,    -1,
+      52,    -1,    53,    -1,    54,    -1,    55,    -1,   159,    -1,
+      56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,
+      61,    -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,
+      66,    -1,    67,    -1,    68,    -1,    69,    -1,    70,    -1,
+      71,    -1,    72,    -1,   108,    -1,   107,    -1,   106,    -1,
+      73,   226,   218,   287,   219,    -1,    73,   218,   287,   219,
+      -1,   288,    -1,   287,   288,    -1,   281,   289,   217,    -1,
+     290,    -1,   289,   201,   290,    -1,   226,    -1,   226,   198,
+     261,   199,    -1,   258,    -1,   262,    -1,   295,    -1,   294,
+      -1,   292,    -1,   300,    -1,   301,    -1,   304,    -1,   305,
+      -1,   306,    -1,   310,    -1,   218,   219,    -1,    -1,   218,
+     296,   299,   219,    -1,   298,    -1,   294,    -1,   218,   219,
+      -1,   218,   299,   219,    -1,   293,    -1,   299,   293,    -1,
+     217,    -1,   260,   217,    -1,    14,   196,   260,   197,   302,
+      -1,   293,    12,   293,    -1,   293,    -1,   260,    -1,   273,
+     226,   216,   291,    -1,    17,   196,   260,   197,   295,    -1,
+      18,   260,   215,    -1,    19,   215,    -1,    75,   196,   303,
+     197,   297,    -1,    11,   293,    75,   196,   260,   197,   217,
+      -1,    13,   196,   307,   309,   197,   297,    -1,   300,    -1,
+     292,    -1,   303,    -1,    -1,   308,   217,    -1,   308,   217,
+     260,    -1,    10,   217,    -1,     9,   217,    -1,    16,   217,
+      -1,    16,   260,   217,    -1,    15,   217,    -1,   312,    -1,
+     262,    -1,   224,    -1,   263,   298,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   213,   213,   212,   219,   221,   241,   242,   243,   244,
-     245,   260,   262,   266,   275,   283,   294,   298,   305,   312,
-     319,   326,   333,   340,   341,   347,   351,   358,   364,   373,
-     377,   381,   382,   391,   392,   396,   397,   401,   407,   419,
-     423,   429,   436,   447,   448,   454,   460,   470,   471,   472,
-     473,   477,   478,   484,   490,   499,   500,   506,   515,   516,
-     522,   531,   532,   538,   544,   550,   559,   560,   566,   575,
-     576,   585,   586,   595,   596,   605,   606,   615,   616,   625,
-     626,   635,   636,   645,   646,   655,   656,   657,   658,   659,
-     660,   661,   662,   663,   664,   665,   669,   673,   689,   693,
-     697,   701,   715,   719,   720,   724,   729,   737,   748,   758,
-     773,   780,   785,   796,   809,   812,   817,   822,   831,   835,
-     836,   845,   854,   863,   872,   881,   894,   905,   914,   923,
-     932,   941,   950,   959,   973,   980,   991,   998,   999,  1018,
-    1047,  1088,  1093,  1098,  1106,  1114,  1115,  1116,  1121,  1122,
-    1127,  1132,  1138,  1146,  1151,  1156,  1161,  1167,  1172,  1177,
-    1182,  1187,  1195,  1196,  1204,  1205,  1211,  1220,  1226,  1232,
-    1241,  1242,  1243,  1244,  1245,  1246,  1247,  1248,  1249,  1250,
-    1251,  1252,  1253,  1254,  1255,  1256,  1257,  1258,  1259,  1260,
-    1261,  1262,  1263,  1264,  1265,  1266,  1267,  1268,  1269,  1270,
-    1271,  1272,  1273,  1274,  1275,  1276,  1277,  1278,  1279,  1280,
-    1281,  1282,  1283,  1284,  1285,  1286,  1287,  1288,  1289,  1290,
-    1291,  1295,  1306,  1317,  1331,  1337,  1346,  1351,  1359,  1374,
-    1379,  1387,  1393,  1402,  1406,  1412,  1413,  1417,  1418,  1419,
-    1420,  1421,  1422,  1423,  1427,  1433,  1442,  1443,  1447,  1453,
-    1462,  1472,  1484,  1490,  1499,  1508,  1513,  1521,  1525,  1539,
-    1543,  1544,  1548,  1555,  1562,  1572,  1573,  1577,  1579,  1585,
-    1590,  1599,  1605,  1611,  1617,  1623,  1632,  1633,  1634,  1638
+       0,   218,   218,   217,   229,   231,   271,   272,   273,   274,
+     275,   287,   289,   293,   294,   295,   299,   308,   316,   327,
+     328,   332,   339,   346,   353,   360,   367,   374,   375,   381,
+     385,   392,   398,   407,   411,   415,   416,   425,   426,   430,
+     431,   435,   441,   453,   457,   463,   470,   480,   481,   485,
+     486,   490,   496,   508,   519,   520,   526,   532,   542,   543,
+     544,   545,   549,   550,   556,   562,   571,   572,   578,   587,
+     588,   594,   603,   604,   610,   616,   622,   631,   632,   638,
+     647,   648,   657,   658,   667,   668,   677,   678,   687,   688,
+     697,   698,   707,   708,   717,   718,   727,   728,   729,   730,
+     731,   732,   733,   734,   735,   736,   737,   741,   745,   761,
+     765,   770,   774,   783,   787,   788,   792,   797,   805,   819,
+     829,   844,   851,   856,   867,   880,   883,   888,   893,   902,
+     906,   907,   917,   927,   937,   947,   957,   971,   982,   991,
+    1000,  1009,  1018,  1027,  1036,  1050,  1057,  1068,  1075,  1076,
+    1095,  1147,  1188,  1193,  1198,  1206,  1214,  1215,  1216,  1221,
+    1222,  1227,  1232,  1238,  1246,  1251,  1256,  1261,  1267,  1272,
+    1277,  1282,  1287,  1295,  1299,  1307,  1308,  1314,  1323,  1329,
+    1335,  1344,  1345,  1346,  1347,  1348,  1349,  1350,  1351,  1352,
+    1353,  1354,  1355,  1356,  1357,  1358,  1359,  1360,  1361,  1362,
+    1363,  1364,  1365,  1366,  1367,  1368,  1369,  1370,  1371,  1372,
+    1373,  1374,  1375,  1376,  1377,  1378,  1379,  1380,  1381,  1382,
+    1383,  1384,  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1392,
+    1393,  1394,  1398,  1408,  1418,  1431,  1438,  1447,  1452,  1460,
+    1475,  1480,  1488,  1495,  1504,  1508,  1514,  1515,  1519,  1520,
+    1521,  1522,  1523,  1524,  1525,  1529,  1536,  1535,  1549,  1550,
+    1554,  1560,  1569,  1579,  1591,  1597,  1606,  1615,  1620,  1628,
+    1632,  1646,  1650,  1651,  1655,  1662,  1669,  1679,  1680,  1684,
+    1686,  1692,  1697,  1706,  1712,  1718,  1724,  1730,  1739,  1740,
+    1741,  1745
 };
 #endif
 
@@ -858,38 +867,41 @@ static const char *const yytname[] =
   "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
   "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
   "USAMPLER2DARRAY", "STRUCT", "VOID_TOK", "WHILE", "IDENTIFIER",
-  "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
-  "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
-  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
-  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
-  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT",
-  "LOWP", "MEDIUMP", "HIGHP", "SUPERP", "PRECISION", "VERSION",
-  "EXTENSION", "LINE", "COLON", "EOL", "INTERFACE", "OUTPUT",
-  "PRAGMA_DEBUG_ON", "PRAGMA_DEBUG_OFF", "PRAGMA_OPTIMIZE_ON",
-  "PRAGMA_OPTIMIZE_OFF", "PRAGMA_INVARIANT_ALL", "LAYOUT_TOK", "ASM",
-  "CLASS", "UNION", "ENUM", "TYPEDEF", "TEMPLATE", "THIS", "PACKED_TOK",
-  "GOTO", "INLINE_TOK", "NOINLINE", "VOLATILE", "PUBLIC_TOK", "STATIC",
-  "EXTERN", "EXTERNAL", "LONG_TOK", "SHORT_TOK", "DOUBLE_TOK", "HALF",
-  "FIXED_TOK", "UNSIGNED", "INPUT_TOK", "OUPTUT", "HVEC2", "HVEC3",
-  "HVEC4", "DVEC2", "DVEC3", "DVEC4", "FVEC2", "FVEC3", "FVEC4",
-  "SAMPLER2DRECT", "SAMPLER3DRECT", "SAMPLER2DRECTSHADOW", "SIZEOF",
-  "CAST", "NAMESPACE", "USING", "ERROR_TOK", "COMMON", "PARTITION",
-  "ACTIVE", "SAMPLERBUFFER", "FILTER", "IMAGE1D", "IMAGE2D", "IMAGE3D",
-  "IMAGECUBE", "IMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE1D", "IIMAGE2D",
-  "IIMAGE3D", "IIMAGECUBE", "IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D",
-  "UIMAGE2D", "UIMAGE3D", "UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY",
-  "IMAGE1DSHADOW", "IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER",
-  "UIMAGEBUFFER", "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "ROW_MAJOR",
-  "'('", "')'", "'['", "']'", "'.'", "','", "'+'", "'-'", "'!'", "'~'",
-  "'*'", "'/'", "'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'",
-  "'='", "';'", "'{'", "'}'", "$accept", "translation_unit", "$@1",
-  "version_statement", "pragma_statement", "extension_statement_list",
-  "extension_statement", "external_declaration_list",
-  "variable_identifier", "primary_expression", "postfix_expression",
-  "integer_expression", "function_call", "function_call_or_method",
-  "function_call_generic", "function_call_header_no_parameters",
+  "TYPE_IDENTIFIER", "NEW_IDENTIFIER", "FLOATCONSTANT", "INTCONSTANT",
+  "UINTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP",
+  "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP",
+  "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
+  "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
+  "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT", "LOWP", "MEDIUMP", "HIGHP",
+  "SUPERP", "PRECISION", "VERSION", "EXTENSION", "LINE", "COLON", "EOL",
+  "INTERFACE", "OUTPUT", "PRAGMA_DEBUG_ON", "PRAGMA_DEBUG_OFF",
+  "PRAGMA_OPTIMIZE_ON", "PRAGMA_OPTIMIZE_OFF", "PRAGMA_INVARIANT_ALL",
+  "LAYOUT_TOK", "ASM", "CLASS", "UNION", "ENUM", "TYPEDEF", "TEMPLATE",
+  "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK", "NOINLINE", "VOLATILE",
+  "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", "LONG_TOK", "SHORT_TOK",
+  "DOUBLE_TOK", "HALF", "FIXED_TOK", "UNSIGNED", "INPUT_TOK", "OUPTUT",
+  "HVEC2", "HVEC3", "HVEC4", "DVEC2", "DVEC3", "DVEC4", "FVEC2", "FVEC3",
+  "FVEC4", "SAMPLER2DRECT", "SAMPLER3DRECT", "SAMPLER2DRECTSHADOW",
+  "SIZEOF", "CAST", "NAMESPACE", "USING", "ERROR_TOK", "COMMON",
+  "PARTITION", "ACTIVE", "SAMPLERBUFFER", "FILTER", "IMAGE1D", "IMAGE2D",
+  "IMAGE3D", "IMAGECUBE", "IMAGE1DARRAY", "IMAGE2DARRAY", "IIMAGE1D",
+  "IIMAGE2D", "IIMAGE3D", "IIMAGECUBE", "IIMAGE1DARRAY", "IIMAGE2DARRAY",
+  "UIMAGE1D", "UIMAGE2D", "UIMAGE3D", "UIMAGECUBE", "UIMAGE1DARRAY",
+  "UIMAGE2DARRAY", "IMAGE1DSHADOW", "IMAGE2DSHADOW", "IMAGEBUFFER",
+  "IIMAGEBUFFER", "UIMAGEBUFFER", "IMAGE1DARRAYSHADOW",
+  "IMAGE2DARRAYSHADOW", "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'",
+  "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'",
+  "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept",
+  "translation_unit", "$@1", "version_statement", "pragma_statement",
+  "extension_statement_list", "any_identifier", "extension_statement",
+  "external_declaration_list", "variable_identifier", "primary_expression",
+  "postfix_expression", "integer_expression", "function_call",
+  "function_call_or_method", "function_call_generic",
+  "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
-  "function_identifier", "unary_expression", "unary_operator",
+  "function_identifier", "method_call_generic",
+  "method_call_header_no_parameters", "method_call_header_with_parameters",
+  "method_call_header", "unary_expression", "unary_operator",
   "multiplicative_expression", "additive_expression", "shift_expression",
   "relational_expression", "equality_expression", "and_expression",
   "exclusive_or_expression", "inclusive_or_expression",
@@ -908,7 +920,7 @@ static const char *const yytname[] =
   "precision_qualifier", "struct_specifier", "struct_declaration_list",
   "struct_declaration", "struct_declarator_list", "struct_declarator",
   "initializer", "declaration_statement", "statement", "simple_statement",
-  "compound_statement", "statement_no_new_scope",
+  "compound_statement", "$@2", "statement_no_new_scope",
   "compound_statement_no_new_scope", "statement_list",
   "expression_statement", "selection_statement",
   "selection_rest_statement", "condition", "switch_statement",
@@ -942,76 +954,80 @@ static const yytype_uint16 yytoknum[] =
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,    40,    41,    91,    93,    46,    44,
-      43,    45,    33,   126,    42,    47,    37,    60,    62,    38,
-      94,   124,    63,    58,    61,    59,   123,   125
+     445,   446,   447,   448,   449,   450,    40,    41,    91,    93,
+      46,    44,    43,    45,    33,   126,    42,    47,    37,    60,
+      62,    38,    94,   124,    63,    58,    61,    59,   123,   125
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   218,   220,   219,   221,   221,   222,   222,   222,   222,
-     222,   223,   223,   224,   225,   225,   226,   227,   227,   227,
-     227,   227,   227,   228,   228,   228,   228,   228,   228,   229,
-     230,   231,   231,   232,   232,   233,   233,   234,   234,   235,
-     236,   236,   236,   237,   237,   237,   237,   238,   238,   238,
-     238,   239,   239,   239,   239,   240,   240,   240,   241,   241,
-     241,   242,   242,   242,   242,   242,   243,   243,   243,   244,
-     244,   245,   245,   246,   246,   247,   247,   248,   248,   249,
-     249,   250,   250,   251,   251,   252,   252,   252,   252,   252,
-     252,   252,   252,   252,   252,   252,   253,   253,   254,   255,
-     255,   255,   256,   257,   257,   258,   258,   259,   260,   260,
-     261,   261,   261,   261,   262,   262,   262,   262,   263,   264,
-     264,   264,   264,   264,   264,   264,   265,   265,   265,   265,
-     265,   265,   265,   265,   266,   266,   267,   268,   268,   269,
-     269,   270,   270,   270,   271,   272,   272,   272,   272,   272,
-     272,   272,   272,   273,   273,   273,   273,   273,   273,   273,
-     273,   273,   274,   274,   275,   275,   275,   276,   276,   276,
-     277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
-     277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
-     277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
-     277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
-     277,   277,   277,   277,   277,   277,   277,   277,   277,   277,
-     277,   278,   278,   278,   279,   279,   280,   280,   281,   282,
-     282,   283,   283,   284,   285,   286,   286,   287,   287,   287,
-     287,   287,   287,   287,   288,   288,   289,   289,   290,   290,
-     291,   291,   292,   292,   293,   294,   294,   295,   295,   296,
-     297,   297,   298,   298,   298,   299,   299,   300,   300,   301,
-     301,   302,   302,   302,   302,   302,   303,   303,   303,   304
+       0,   220,   222,   221,   223,   223,   224,   224,   224,   224,
+     224,   225,   225,   226,   226,   226,   227,   228,   228,   229,
+     229,   230,   230,   230,   230,   230,   230,   231,   231,   231,
+     231,   231,   231,   232,   233,   234,   234,   235,   235,   236,
+     236,   237,   237,   238,   239,   239,   239,   240,   240,   241,
+     241,   242,   242,   243,   244,   244,   244,   244,   245,   245,
+     245,   245,   246,   246,   246,   246,   247,   247,   247,   248,
+     248,   248,   249,   249,   249,   249,   249,   250,   250,   250,
+     251,   251,   252,   252,   253,   253,   254,   254,   255,   255,
+     256,   256,   257,   257,   258,   258,   259,   259,   259,   259,
+     259,   259,   259,   259,   259,   259,   259,   260,   260,   261,
+     262,   262,   262,   263,   264,   264,   265,   265,   266,   267,
+     267,   268,   268,   268,   268,   269,   269,   269,   269,   270,
+     271,   271,   271,   271,   271,   271,   271,   272,   272,   272,
+     272,   272,   272,   272,   272,   273,   273,   274,   275,   275,
+     276,   276,   277,   277,   277,   278,   279,   279,   279,   279,
+     279,   279,   279,   279,   280,   280,   280,   280,   280,   280,
+     280,   280,   280,   281,   281,   282,   282,   282,   283,   283,
+     283,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   284,   284,   284,   284,   284,   284,   284,   284,
+     284,   284,   285,   285,   285,   286,   286,   287,   287,   288,
+     289,   289,   290,   290,   291,   292,   293,   293,   294,   294,
+     294,   294,   294,   294,   294,   295,   296,   295,   297,   297,
+     298,   298,   299,   299,   300,   300,   301,   302,   302,   303,
+     303,   304,   305,   305,   306,   306,   306,   307,   307,   308,
+     308,   309,   309,   310,   310,   310,   310,   310,   311,   311,
+     311,   312
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     4,     0,     3,     2,     2,     2,     2,
-       2,     0,     2,     5,     1,     2,     1,     1,     1,     1,
-       1,     1,     3,     1,     4,     1,     3,     2,     2,     1,
-       1,     1,     3,     2,     2,     2,     1,     2,     3,     2,
-       1,     1,     1,     1,     2,     2,     2,     1,     1,     1,
-       1,     1,     3,     3,     3,     1,     3,     3,     1,     3,
-       3,     1,     3,     3,     3,     3,     1,     3,     3,     1,
-       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-       3,     1,     5,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     1,     2,
-       2,     4,     2,     1,     1,     2,     3,     3,     2,     5,
-       3,     2,     3,     2,     0,     1,     1,     1,     1,     1,
-       3,     5,     6,     7,     8,     5,     1,     2,     4,     5,
-       6,     7,     4,     2,     1,     2,     4,     1,     3,     1,
-       3,     1,     1,     1,     1,     1,     1,     2,     1,     2,
-       2,     3,     1,     1,     1,     1,     2,     1,     1,     2,
-       2,     1,     1,     2,     1,     3,     4,     1,     1,     1,
+       2,     0,     2,     1,     1,     1,     5,     1,     2,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     4,     1,
+       3,     2,     2,     1,     1,     1,     3,     2,     2,     2,
+       1,     2,     3,     2,     1,     1,     1,     2,     2,     2,
+       1,     2,     3,     2,     1,     2,     2,     2,     1,     1,
+       1,     1,     1,     3,     3,     3,     1,     3,     3,     1,
+       3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     3,     1,     5,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       2,     2,     4,     2,     1,     1,     2,     3,     3,     2,
+       5,     3,     2,     3,     2,     0,     1,     1,     1,     1,
+       1,     3,     5,     6,     7,     8,     5,     1,     2,     4,
+       5,     6,     7,     4,     2,     1,     2,     4,     1,     3,
+       1,     3,     1,     1,     1,     1,     1,     1,     2,     1,
+       2,     2,     3,     1,     1,     1,     1,     2,     1,     1,
+       2,     2,     1,     1,     2,     1,     3,     4,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     5,     4,     1,     2,     3,     1,
-       3,     1,     4,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     3,     1,     1,     2,     3,
-       1,     2,     1,     2,     5,     3,     1,     1,     4,     5,
-       3,     2,     5,     7,     6,     1,     1,     1,     0,     2,
-       3,     2,     2,     2,     3,     2,     1,     1,     1,     2
+       1,     1,     1,     1,     1,     5,     4,     1,     2,     3,
+       1,     3,     1,     4,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     0,     4,     1,     1,
+       2,     3,     1,     2,     1,     2,     5,     3,     1,     1,
+       4,     5,     3,     2,     5,     7,     6,     1,     1,     1,
+       0,     2,     3,     2,     2,     2,     3,     2,     1,     1,
+       1,     2
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1020,637 +1036,620 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint16 yydefact[] =
 {
        4,     0,     0,    11,     0,     1,     2,     5,     0,     0,
-      12,     0,   154,   153,   174,   171,   172,   173,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   175,   176,   177,
-       0,   157,   158,   161,   155,   143,   142,   141,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   199,
-     200,   201,   202,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-       0,   170,   169,   152,   223,   222,   221,     0,     0,     0,
-       0,     0,     0,     0,   198,   203,   278,     3,   277,     0,
-       0,   104,   114,     0,   119,   126,   146,   148,     0,   145,
-     134,   162,   164,   167,     0,   168,    14,   276,     0,   159,
-     160,   156,     0,     0,   133,     0,   150,     0,     6,     7,
-       8,     9,    10,     0,    15,    99,     0,   279,   102,   114,
-     144,   115,   116,   117,   105,     0,   114,     0,   100,   127,
-     147,   149,   135,     0,   163,     0,     0,     0,     0,   226,
-     151,     0,   139,     0,   137,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    16,    20,    18,    19,
-      21,    42,     0,     0,     0,    47,    48,    49,    50,   252,
-       0,   248,    17,    23,    43,    25,    30,    31,     0,     0,
-      36,     0,    51,     0,    55,    58,    61,    66,    69,    71,
-      73,    75,    77,    79,    81,    83,    96,     0,   234,     0,
-     134,   237,   250,   236,   235,     0,   238,   239,   240,   241,
-     242,   243,   106,   111,   113,   118,     0,   120,   107,     0,
-       0,   165,    51,    98,     0,    40,    13,     0,   231,     0,
-     229,   225,   227,   101,     0,   136,     0,   272,   271,     0,
-       0,     0,   275,   273,     0,     0,     0,   261,     0,    44,
-      45,     0,   244,     0,    27,    28,     0,     0,    34,    33,
-       0,   170,    37,    39,    86,    87,    89,    88,    91,    92,
-      93,    94,    95,    90,    85,     0,    46,     0,     0,     0,
+      12,    13,    14,    15,     0,   165,   164,   185,   182,   183,
+     184,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     186,   187,   188,     0,   168,   169,   172,   166,   154,   153,
+     152,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   210,   211,   212,   213,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,     0,   181,   180,   163,   234,   233,   232,
+       0,     0,     0,     0,     0,     0,     0,   209,   214,   290,
+       3,   289,     0,     0,   115,   125,     0,   130,   137,   157,
+     159,     0,   156,   145,   173,   175,   178,     0,   179,    17,
+     288,     0,   170,   171,   167,     0,     0,    19,    20,   144,
+       0,   161,     0,     6,     7,     8,     9,    10,     0,    18,
+     110,     0,   291,   113,   125,   155,   126,   127,   128,   116,
+       0,   125,     0,   111,    13,    15,   138,     0,   158,   160,
+     146,     0,   174,     0,     0,     0,   237,     0,   162,     0,
+     150,     0,   148,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    24,    22,    23,    25,    46,     0,
+       0,     0,    58,    59,    60,    61,   264,   256,   260,    21,
+      27,    54,    29,    34,    35,     0,     0,    40,     0,    62,
+       0,    66,    69,    72,    77,    80,    82,    84,    86,    88,
+      90,    92,    94,   107,     0,   245,     0,   145,   248,   262,
+     247,   246,     0,   249,   250,   251,   252,   253,   254,   117,
+     122,   124,   129,     0,   131,     0,     0,   118,   176,    62,
+     109,     0,    44,    16,   242,     0,   240,   236,   238,     0,
+     112,     0,   147,     0,   284,   283,     0,     0,     0,   287,
+     285,     0,     0,     0,   273,     0,    55,    56,     0,   255,
+       0,    31,    32,     0,     0,    38,    37,     0,   181,    41,
+      43,    97,    98,   100,    99,   102,   103,   104,   105,   106,
+     101,    96,     0,    57,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   253,   249,
-     251,   108,   110,   112,     0,     0,   128,     0,   233,   132,
-     166,   224,     0,     0,   228,   140,   138,     0,   266,   265,
-     268,     0,   274,     0,   260,   152,   257,     0,     0,    22,
-     245,     0,    29,    26,    32,    38,    84,    52,    53,    54,
-      56,    57,    59,    60,    64,    65,    62,    63,    67,    68,
-      70,    72,    74,    76,    78,    80,     0,    97,     0,   121,
-       0,   125,     0,   129,     0,   230,     0,   267,     0,     0,
-       0,     0,     0,     0,    24,     0,     0,     0,   122,   130,
-       0,   232,     0,   269,     0,   256,   254,   259,     0,   247,
-     262,   246,    82,   109,   123,     0,   131,     0,   270,   264,
-       0,   258,   124,   263,   255
+       0,     0,     0,     0,     0,   265,   261,   263,   119,   121,
+     123,     0,     0,   139,     0,   244,   143,   177,     0,     0,
+     239,   235,   151,   149,     0,   278,   277,   280,     0,   286,
+       0,   272,   163,   269,     0,     0,    26,     0,     0,    33,
+      30,     0,    36,     0,     0,    50,    42,    95,    63,    64,
+      65,    67,    68,    70,    71,    75,    76,    73,    74,    78,
+      79,    81,    83,    85,    87,    89,    91,     0,   108,     0,
+     132,     0,   136,     0,   140,     0,   241,     0,   279,     0,
+       0,     0,     0,     0,     0,   257,    28,    53,    48,    47,
+       0,   181,    51,     0,     0,     0,   133,   141,     0,   243,
+       0,   281,     0,   268,   266,   271,     0,   259,   274,   258,
+      52,    93,   120,   134,     0,   142,     0,   282,   276,     0,
+     270,   135,   275,   267
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     9,     3,    86,     6,    10,    87,   182,   183,
-     184,   341,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   285,   207,   234,   208,   209,    90,
-      91,    92,   223,   134,   135,   224,    93,    94,    95,    96,
-     153,   154,    97,   136,    98,    99,   235,   101,   102,   103,
-     104,   105,   148,   149,   239,   240,   319,   211,   212,   213,
-     214,   400,   401,   215,   216,   217,   396,   338,   218,   219,
-     220,   330,   378,   379,   221,   106,   107
+      -1,     2,     9,     3,    89,     6,   160,    10,    90,   189,
+     190,   191,   348,   192,   193,   194,   195,   196,   197,   198,
+     352,   353,   354,   355,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   292,
+     214,   241,   215,   216,    93,    94,    95,   230,   139,   140,
+     231,    96,    97,    98,    99,   161,   162,   100,   141,   101,
+     102,   242,   104,   105,   106,   107,   108,   155,   156,   245,
+     246,   326,   218,   219,   220,   221,   270,   418,   419,   222,
+     223,   224,   414,   345,   225,   226,   227,   337,   389,   390,
+     228,   109,   110
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -321
+#define YYPACT_NINF -366
 static const yytype_int16 yypact[] =
 {
-     -86,   -57,    45,  -321,   -56,  -321,   -50,  -321,   -10,  3320,
-    -321,   -26,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-      79,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-     -70,  -321,  -321,    43,  -321,  -321,  -321,    18,   -22,   -12,
-      -5,     2,    25,  -101,  -321,  -321,  -321,  3320,  -321,   -43,
-     -55,   -54,     6,  -148,  -321,    52,   211,   211,  3509,  -321,
-    -321,  -321,   -47,  -321,  3581,  -321,  -321,  -321,   110,  -321,
-    -321,  -321,   -14,  3509,  -321,   211,  -321,  3581,  -321,  -321,
-    -321,  -321,  -321,   131,  -321,  -321,   389,  -321,  -321,    15,
-    -321,  -321,  -321,  -321,  -321,  3509,   109,   136,  -321,  -152,
-    -321,  -321,  -321,  2400,  -321,   105,  3509,   143,  1781,  -321,
-    -321,     7,     9,  -107,  -321,    10,    12,  1249,    27,    36,
-      17,  2015,    40,  2952,    22,    42,   -65,  -321,  -321,  -321,
-    -321,  -321,  2952,  2952,  2952,  -321,  -321,  -321,  -321,  -321,
-     604,  -321,  -321,  -321,   -20,  -321,  -321,  -321,    47,   -92,
-    3136,    46,   -67,  2952,   -24,   -16,   111,   -73,   108,    37,
-      41,    39,   162,   161,   -82,  -321,  -321,  -147,  -321,    44,
-      61,  -321,  -321,  -321,  -321,   819,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,   181,  3509,  -160,  -321,  2584,
-    2952,  -321,  -321,  -321,    63,  -321,  -321,  1898,    62,  -146,
-    -321,  -321,  -321,  -321,   183,  -321,   131,  -321,  -321,   187,
-    1664,  2952,  -321,  -321,  -144,  2952,  -140,  -321,  2216,  -321,
-    -321,   -81,  -321,  1034,  -321,  -321,  2952,  3437,  -321,  -321,
-    2952,    70,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,  2952,  -321,  2952,  2952,  2952,
-    2952,  2952,  2952,  2952,  2952,  2952,  2952,  2952,  2952,  2952,
-    2952,  2952,  2952,  2952,  2952,  2952,  2952,  2952,  -321,  -321,
-    -321,    74,  -321,  -321,  2768,  2952,    64,    69,  -321,  -321,
-    -321,  -321,  2952,   143,  -321,  -321,  -321,    82,  -321,  -321,
-    2216,   -74,  -321,   -68,  -321,   235,    78,   203,    85,  -321,
-    -321,    84,    78,    88,  -321,  -321,  -321,  -321,  -321,  -321,
-     -24,   -24,   -16,   -16,   111,   111,   111,   111,   -73,   -73,
-     108,    37,    41,    39,   162,   161,  -129,  -321,  2952,    71,
-      86,  -321,  2952,    72,    87,  -321,  2952,  -321,    73,    92,
-    1249,    75,    76,  1463,  -321,  2952,    95,  2952,    80,  -321,
-    2952,  -321,   -63,  2952,  1463,   277,  -321,  -321,  2952,  -321,
-    -321,  -321,  -321,  -321,  -321,  2952,  -321,    81,    78,  -321,
-    1249,  -321,  -321,  -321,  -321
+     -57,   -43,    62,  -366,   -50,  -366,   -30,  -366,    67,  3341,
+    -366,  -366,  -366,  -366,    -6,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,     8,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,   -65,  -366,  -366,   226,  -366,  -366,  -366,
+      51,   -31,   -28,     6,    13,    15,   -44,  -366,  -366,  -366,
+    3341,  -366,  -183,   -47,   -29,    18,  -169,  -366,   140,    24,
+      24,  3460,  -366,  -366,  -366,   -24,  -366,  3533,  -366,  -366,
+    -366,    67,  -366,  -366,  -366,  3460,   -48,  -366,  -366,  -366,
+      24,  -366,  3533,  -366,  -366,  -366,  -366,  -366,    67,  -366,
+    -366,   408,  -366,  -366,    55,  -366,  -366,  -366,  -366,  -366,
+    3460,   200,    67,  -366,   -20,   -18,  -178,    23,  -366,  -366,
+    -366,  2225,  -366,    72,    67,  1598,  -366,  3460,  -366,     4,
+      10,   -84,  -366,    11,    14,  1059,    40,    42,    29,  1836,
+      43,  2783,    34,    54,  -366,  -366,  -366,  -366,  -366,  2783,
+    2783,  2783,  -366,  -366,  -366,  -366,  -366,    32,  -366,    56,
+    -366,   -71,  -366,  -366,  -366,    57,   -81,  2969,    61,   -27,
+    2783,    35,   -88,   -41,   -70,    33,    60,    41,    59,   181,
+     180,   -89,  -366,  -366,  -168,  -366,    58,    80,  -366,  -366,
+    -366,  -366,   625,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,    67,  3460,  -177,  2411,  2783,  -366,  -366,  -366,
+    -366,    78,  -366,  -366,    81,  -137,  -366,  -366,  -366,  1717,
+    -366,   201,  -366,    67,  -366,  -366,   205,  1478,  2783,  -366,
+    -366,  -134,  2783,  -115,  -366,  2039,  -366,  -366,   -60,  -366,
+    1059,  -366,  -366,  2783,   140,  -366,  -366,  2783,    85,  -366,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  2783,  -366,  2783,  2783,  2783,  2783,  2783,  2783,
+    2783,  2783,  2783,  2783,  2783,  2783,  2783,  2783,  2783,  2783,
+    2783,  2783,  2783,  2783,  2783,  -366,  -366,  -366,    86,  -366,
+    -366,  2597,  2783,    69,    87,  -366,  -366,  -366,  2783,    67,
+    -366,  -366,  -366,  -366,    91,  -366,  -366,  2039,   -59,  -366,
+     -46,  -366,   129,    88,    67,    93,  -366,   842,    89,    88,
+    -366,    95,  -366,    96,   -37,  3155,  -366,  -366,  -366,  -366,
+    -366,    35,    35,   -88,   -88,   -41,   -41,   -41,   -41,   -70,
+     -70,    33,    60,    41,    59,   181,   180,   -96,  -366,  2783,
+      76,    97,  -366,  2783,    79,    98,  -366,  2783,  -366,    77,
+     101,  1059,    83,    90,  1275,  -366,  -366,  -366,  -366,  -366,
+    2783,   102,  -366,  2783,   108,  2783,    94,  -366,  2783,  -366,
+     -26,  2783,  1275,   297,  -366,  -366,  2783,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  2783,  -366,   100,    88,  -366,  1059,
+    -366,  -366,  -366,  -366
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,  -321,
-    -321,  -321,  -321,  -321,    26,  -321,  -321,  -321,  -321,  -135,
-    -321,   -91,   -88,  -106,   -90,    -3,    -6,    -4,    -2,    -1,
-       0,  -321,  -139,  -174,  -321,  -156,  -217,    11,    13,  -321,
-    -321,  -321,    83,   170,   164,    89,  -321,  -321,  -243,  -321,
-    -321,    56,   -71,  -321,  -321,   -72,    -9,   -32,  -321,  -321,
-     227,  -321,   160,  -131,  -321,   -15,  -195,    57,  -154,  -320,
-     -69,   -84,   222,   133,    66,  -321,  -321,   -13,  -321,  -321,
-    -321,  -321,  -321,  -321,  -321,   231,  -321
+    -366,  -366,  -366,  -366,  -366,  -366,    -7,  -366,  -366,   -62,
+    -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,  -366,  -366,  -366,  -101,  -366,  -113,  -109,  -121,   -61,
+       5,     3,     9,    16,     2,     7,  -366,  -142,  -100,  -366,
+    -164,  -225,    21,    22,  -366,  -366,  -366,    82,   186,   173,
+      92,  -366,  -366,  -242,  -366,  -366,    68,   -73,  -366,  -366,
+     -74,    -9,   -67,  -366,  -366,   243,  -366,   170,  -147,  -366,
+       0,  -298,    73,  -159,  -365,   -58,  -366,   -80,   239,    63,
+      84,  -366,  -366,    -2,  -366,  -366,  -366,  -366,  -366,  -366,
+    -366,   246,  -366
 };
 
 /* 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 -170
+#define YYTABLE_NINF -115
 static const yytype_int16 yytable[] =
 {
-     100,   116,   115,   249,   233,   254,   112,   256,   232,   305,
-     130,  -169,   317,   294,   295,   337,   272,   242,   261,   130,
-      88,     4,    89,     1,   140,   141,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   314,   259,   260,   131,
-     132,   133,   228,   150,   229,     5,    12,    13,   131,   132,
-     133,   137,   307,   323,   315,   307,   318,     7,   286,   307,
-       8,   310,   230,   399,   264,   265,    11,   138,   308,   324,
-     307,   332,   144,   334,   399,    30,    31,    32,   100,    33,
-      34,    35,    36,    37,   385,   151,   108,   337,   245,   142,
-     233,   118,   246,   123,   232,   331,   345,   370,    88,   333,
-      89,   119,   336,   269,   147,   374,   242,   270,   120,   310,
-     342,   346,   109,   110,   339,   121,   111,   210,   307,   114,
-     371,   380,    74,    75,    76,   307,   225,   381,   139,   -41,
-     306,   307,   407,   367,   296,   297,   307,   147,   122,   147,
-     128,   318,   131,   132,   133,   129,   113,   284,   210,   143,
-     366,   386,   347,   348,   349,   232,   232,   232,   232,   232,
-     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
-     232,   210,   125,   126,   336,   233,   266,   389,   267,   232,
-     287,   288,   289,   233,   290,   291,   145,   232,   354,   355,
-     356,   357,   404,   292,   293,   406,   298,   299,   318,   350,
-     351,  -103,   146,   411,   352,   353,   210,   152,   358,   359,
-     412,   402,   227,   318,    12,    13,   318,   225,   236,   238,
-     392,   250,   243,   244,   318,   247,   395,   248,   147,   233,
-     251,   318,   252,   232,   255,   257,   258,   408,    12,    13,
-     273,   210,   268,    30,    31,    32,   300,    33,    34,   210,
-     302,   301,   303,   304,   210,   -40,   414,   311,   322,   125,
-     320,   325,   327,   116,   115,   -35,   373,    30,    31,    32,
-     368,    33,    34,    35,    36,    37,   376,   307,   372,   382,
-     383,   384,   -41,   388,   391,   387,   390,   394,   393,   410,
-     398,   180,   403,   344,   405,   361,   413,   360,   362,   222,
-     226,   363,   326,   364,   117,   365,   237,   328,   375,   312,
-     409,   127,   397,   263,     0,   313,   329,   377,   124,     0,
-       0,   210,     0,     0,     0,     0,     0,     0,     0,     0,
+     103,    14,   121,   120,   312,   261,   256,   263,   248,   240,
+     324,    11,    12,    13,   119,   271,   272,   268,   301,   302,
+     235,   321,   135,   344,   382,   148,   149,    15,    16,   417,
+      91,    92,   142,   314,   130,   131,   147,     4,   236,   322,
+     152,   112,   113,   299,   300,   114,   158,   417,   143,   315,
+     239,   136,   137,   138,     1,   159,    33,    34,    35,   135,
+      36,    37,     5,   317,   329,     7,   116,   314,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   266,   267,
+     330,   103,     8,   339,   123,   407,   314,   124,   136,   137,
+     138,   146,   150,   240,   338,   344,   381,   279,   340,   293,
+     341,   343,   248,   385,   153,   314,   154,   423,   111,   349,
+     425,    91,    92,   252,   297,   298,   276,   253,   430,   403,
+     277,   125,   217,   305,   306,   313,   431,   273,   126,   274,
+     127,   232,    15,    16,   239,   234,   325,   346,   391,   303,
+     304,   314,   314,    11,    12,    13,   154,   244,   154,   377,
+     133,   392,   128,   115,   404,   314,   217,    77,    78,    79,
+     399,    33,    34,    35,   400,    36,    37,    38,    39,    40,
+     157,   426,   134,   343,   151,   314,   -19,   356,   -20,   240,
+     365,   366,   367,   368,   361,   362,   240,   243,   317,   291,
+     363,   364,   357,   358,   359,   360,   239,   239,   239,   239,
+     239,   239,   239,   239,   239,   239,   239,   239,   239,   239,
+     239,   239,   351,   217,   378,  -114,   144,    12,   145,   237,
+     239,   250,   325,   410,   232,   318,   251,   239,   254,    15,
+      16,   255,   413,   136,   137,   138,   257,   240,   258,   262,
+     154,   294,   295,   296,   369,   370,   259,   427,   217,   264,
+     265,   269,   -45,   308,   275,   402,   217,   280,    33,    34,
+      35,   217,    36,    37,    38,    39,    40,   350,   121,   120,
+     433,   307,   309,   310,   311,   130,   -44,   327,   239,   328,
+     334,   332,   -39,   325,   379,   383,   384,   387,   396,   314,
+     394,   397,   405,   398,   411,   408,   406,   409,   412,   -49,
+     420,   187,   117,   421,   118,   325,   416,   422,   325,   429,
+     424,   372,   371,   375,   233,   319,   325,   432,   373,   376,
+     229,   333,   244,   122,   325,   320,   374,   249,   217,   386,
+     335,   132,   428,   347,   415,   388,   129,   393,   217,     0,
+       0,   336,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   217,     0,     0,   217,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   210,     0,     0,   210,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   210,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,   155,   156,
-     157,   210,   158,   159,   160,   161,   162,   163,   164,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,   165,   166,   167,   168,   169,   170,
-     171,     0,     0,   172,   173,     0,     0,     0,     0,     0,
+       0,     0,     0,   217,     0,     0,     0,     0,     0,     0,
+       0,    15,    16,    17,    18,    19,    20,   163,   164,   165,
+     217,   166,   167,   168,   169,   170,   171,   172,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,   173,   117,    75,   118,   174,   175,   176,
+     177,   178,     0,     0,   179,   180,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
+       0,     0,     0,    76,    77,    78,    79,     0,    80,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      83,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    86,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    84,     0,    85,     0,     0,     0,
+       0,     0,     0,     0,     0,    87,     0,    88,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   174,     0,     0,     0,     0,     0,   175,
-     176,   177,   178,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,   180,   181,    12,    13,    14,
-      15,    16,    17,   155,   156,   157,     0,   158,   159,   160,
-     161,   162,   163,   164,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,   165,
-     166,   167,   168,   169,   170,   171,     0,     0,   172,   173,
+       0,     0,     0,     0,   181,     0,     0,     0,     0,     0,
+     182,   183,   184,   185,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   186,   187,   188,    15,    16,
+      17,    18,    19,    20,   163,   164,   165,     0,   166,   167,
+     168,   169,   170,   171,   172,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+     173,   117,    75,   118,   174,   175,   176,   177,   178,     0,
+       0,   179,   180,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      76,    77,    78,    79,     0,    80,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    86,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    83,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    84,
-       0,    85,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,    88,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   174,     0,
-       0,     0,     0,     0,   175,   176,   177,   178,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
-     180,   262,    12,    13,    14,    15,    16,    17,   155,   156,
-     157,     0,   158,   159,   160,   161,   162,   163,   164,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   181,     0,     0,     0,     0,     0,   182,   183,   184,
+     185,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   186,   187,   316,    15,    16,    17,    18,    19,
+      20,   163,   164,   165,     0,   166,   167,   168,   169,   170,
+     171,   172,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,     0,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,   165,   166,   167,   168,   169,   170,
-     171,     0,     0,   172,   173,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
+      68,    69,    70,    71,    72,    73,    74,   173,   117,    75,
+     118,   174,   175,   176,   177,   178,     0,     0,   179,   180,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      83,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    76,    77,    78,
+      79,     0,    80,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    86,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    84,     0,    85,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    87,
+       0,    88,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   181,     0,
+       0,     0,     0,     0,   182,   183,   184,   185,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   186,
+     187,   395,    15,    16,    17,    18,    19,    20,   163,   164,
+     165,     0,   166,   167,   168,   169,   170,   171,   172,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,   173,   117,    75,   118,   174,   175,
+     176,   177,   178,     0,     0,   179,   180,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   174,     0,     0,     0,     0,     0,   175,
-     176,   177,   178,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,   180,   309,    12,    13,    14,
-      15,    16,    17,   155,   156,   157,     0,   158,   159,   160,
-     161,   162,   163,   164,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,   165,
-     166,   167,   168,   169,   170,   171,     0,     0,   172,   173,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    83,     0,     0,     0,     0,
+       0,     0,     0,     0,    76,    77,    78,    79,     0,    80,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    86,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    84,
-       0,    85,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,    88,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   174,     0,
-       0,     0,     0,     0,   175,   176,   177,   178,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
-     180,   340,    12,    13,    14,    15,    16,    17,   155,   156,
-     157,     0,   158,   159,   160,   161,   162,   163,   164,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,     0,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,   165,   166,   167,   168,   169,   170,
-     171,     0,     0,   172,   173,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    73,    74,    75,    76,     0,    77,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      83,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   181,     0,     0,     0,     0,
+       0,   182,   183,   184,   185,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   186,   187,    15,    16,
+      17,    18,    19,    20,   163,   164,   165,     0,   166,   167,
+     168,   169,   170,   171,   172,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+     173,   117,    75,   118,   174,   175,   176,   177,   178,     0,
+       0,   179,   180,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      76,    77,    78,    79,     0,    80,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    86,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    84,     0,    85,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,    88,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   174,     0,     0,     0,     0,     0,   175,
-     176,   177,   178,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,   180,    12,    13,    14,    15,
-      16,    17,   155,   156,   157,     0,   158,   159,   160,   161,
-     162,   163,   164,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,     0,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,   165,   166,
-     167,   168,   169,   170,   171,     0,     0,   172,   173,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    73,    74,    75,    76,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    83,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   181,     0,     0,     0,     0,     0,   182,   183,   184,
+     185,    15,    16,    17,    18,    19,    20,     0,     0,     0,
+       0,     0,   186,   131,     0,     0,     0,     0,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,     0,   117,    75,   118,   174,   175,   176,
+     177,   178,     0,     0,   179,   180,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    84,     0,
-      85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    76,    77,    78,    79,     0,    80,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    86,     0,    17,    18,    19,    20,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+       0,     0,     0,     0,     0,    87,     0,    88,     0,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,     0,   181,    75,     0,     0,     0,     0,
+     182,   183,   184,   185,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   186,     0,     0,     0,     0,
+       0,     0,     0,     0,    77,    78,    79,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   174,     0,     0,
-       0,     0,     0,   175,   176,   177,   178,    12,    13,    14,
-      15,    16,    17,     0,     0,     0,     0,     0,   179,   126,
-       0,     0,     0,     0,    18,    19,    20,    21,    22,    23,
+       0,     0,    17,    18,    19,    20,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+       0,     0,     0,     0,     0,    87,     0,    88,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
-     166,   167,   168,   169,   170,   171,     0,     0,   172,   173,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    73,    74,    75,
-      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    83,    14,    15,    16,    17,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,     0,     0,     0,     0,     0,     0,    84,
-       0,    85,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,     0,    72,   174,     0,
-       0,     0,     0,     0,   175,   176,   177,   178,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
-       0,     0,     0,     0,     0,    74,    75,    76,     0,     0,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,     0,     0,    75,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    14,    15,    16,    17,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-       0,     0,     0,     0,     0,     0,    84,     0,    85,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,     0,    72,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   247,     0,     0,
+       0,     0,     0,    77,    78,    79,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   241,     0,
-       0,     0,    74,    75,    76,     0,     0,     0,     0,     0,
+       0,    17,    18,    19,    20,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,     0,     0,
+       0,     0,     0,     0,    87,     0,    88,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,     0,   117,    75,   118,   174,   175,   176,   177,   178,
+       0,     0,   179,   180,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   331,     0,     0,     0,
+       0,     0,    77,    78,    79,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      14,    15,    16,    17,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
-       0,     0,     0,    84,     0,    85,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-       0,   166,   167,   168,   169,   170,   171,     0,     0,   172,
-     173,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   321,     0,     0,     0,    74,
-      75,    76,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    87,     0,    88,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      84,     0,    85,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   174,
-       0,     0,     0,     0,     0,   175,   176,   177,   178,    12,
-      13,    14,    15,    16,    17,     0,     0,     0,     0,     0,
-     253,     0,     0,     0,     0,     0,    18,    19,    20,    21,
+       0,     0,   181,     0,     0,     0,     0,     0,   182,   183,
+     184,   185,    15,    16,    17,    18,    19,    20,     0,     0,
+       0,     0,     0,   260,     0,     0,     0,     0,     0,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,     0,    33,    34,    35,    36,    37,    38,    39,    40,
+      32,    33,    34,    35,     0,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,     0,   166,   167,   168,   169,   170,   171,     0,     0,
-     172,   173,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   335,
-      74,    75,    76,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    83,     0,     0,
+      71,    72,    73,    74,     0,   117,    75,   118,   174,   175,
+     176,   177,   178,     0,     0,   179,   180,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   342,    77,    78,    79,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    86,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    84,     0,    85,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,    88,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    14,    15,    16,    17,     0,
-     174,     0,     0,     0,     0,     0,   175,   176,   177,   178,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,     0,   166,   167,   168,   169,
-     170,   171,     0,     0,   172,   173,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    74,    75,    76,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      17,    18,    19,    20,     0,   181,     0,     0,     0,     0,
+       0,   182,   183,   184,   185,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+       0,   117,    75,   118,   174,   175,   176,   177,   178,     0,
+       0,   179,   180,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    77,    78,    79,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    84,     0,    85,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    14,
-      15,    16,    17,     0,   174,     0,     0,   231,     0,     0,
-     175,   176,   177,   178,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,     0,
-     166,   167,   168,   169,   170,   171,     0,     0,   172,   173,
+       0,     0,    87,     0,    88,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
-      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    17,    18,    19,    20,
+       0,   181,     0,     0,   238,     0,     0,   182,   183,   184,
+     185,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,     0,   117,    75,   118,
+     174,   175,   176,   177,   178,     0,     0,   179,   180,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    77,    78,    79,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    84,
-       0,    85,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    14,    15,    16,    17,     0,   174,     0,
-       0,   316,     0,     0,   175,   176,   177,   178,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,     0,   166,   167,   168,   169,   170,   171,
-       0,     0,   172,   173,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    75,    76,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    87,     0,
+      88,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    17,    18,    19,    20,     0,   181,     0,     0,
+     323,     0,     0,   182,   183,   184,   185,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,     0,   117,    75,   118,   174,   175,   176,   177,
+     178,     0,     0,   179,   180,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    77,    78,    79,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    84,     0,    85,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    14,    15,    16,
-      17,     0,   174,     0,     0,   369,     0,     0,   175,   176,
-     177,   178,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,     0,   166,   167,
-     168,   169,   170,   171,     0,     0,   172,   173,     0,     0,
+       0,     0,     0,     0,    87,     0,    88,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    74,    75,    76,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    17,    18,
+      19,    20,     0,   181,     0,     0,   380,     0,     0,   182,
+     183,   184,   185,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,     0,   117,
+      75,   118,   174,   175,   176,   177,   178,     0,     0,   179,
+     180,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
+      78,    79,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    84,     0,    85,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      87,     0,    88,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    14,    15,    16,    17,     0,   174,     0,     0,     0,
-       0,     0,   175,   176,   177,   178,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    38,    39,    40,
+       0,     0,     0,     0,    17,    18,    19,    20,     0,   181,
+       0,     0,     0,     0,     0,   182,   183,   184,   185,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-     271,     0,   166,   167,   168,   169,   170,   171,     0,     0,
-     172,   173,     0,     0,     0,     0,     0,     0,     0,     0,
+      71,    72,    73,   278,     0,   117,    75,   118,   174,   175,
+     176,   177,   178,     0,     0,   179,   180,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      74,    75,    76,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    77,    78,    79,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    84,     0,    85,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,    88,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,     0,
-     174,     0,     0,     0,     0,     0,   175,   176,   177,   178,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,     0,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,     0,    72,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      17,    18,    19,    20,     0,   181,     0,     0,     0,     0,
+       0,   182,   183,   184,   185,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,   401,
+       0,   117,    75,   118,   174,   175,   176,   177,   178,     0,
+       0,   179,   180,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    77,    78,    79,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    73,    74,    75,    76,     0,    77,     0,
-       0,     0,     0,     0,     0,     0,    78,    79,    80,    81,
-      82,    83,    14,    15,    16,    17,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,     0,
-       0,     0,     0,     0,     0,    84,     0,    85,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,    88,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    15,    16,    17,    18,    19,    20,
+       0,   181,     0,     0,     0,     0,     0,   182,   183,   184,
+     185,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,     0,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,     0,     0,    75,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    76,    77,    78,    79,
+       0,    80,     0,     0,     0,     0,     0,     0,     0,    81,
+      82,    83,    84,    85,    86,    17,    18,    19,    20,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,     0,     0,     0,     0,     0,     0,    87,     0,
+      88,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,     0,   343,    14,    15,    16,    17,   171,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    74,    75,    76,     0,     0,     0,     0,     0,     0,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,     0,    72,    14,    15,    16,    17,
-       0,     0,    84,     0,    85,     0,     0,     0,     0,     0,
-       0,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    74,    75,    76,     0,     0,     0,     0,
-       0,     0,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,     0,    72,     0,     0,
-       0,     0,     0,     0,    84,     0,    85,     0,     0,     0,
+      70,    71,    72,    73,    74,     0,     0,    75,    17,    18,
+      19,    20,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,     0,    77,    78,    79,     0,
+       0,     0,     0,     0,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,     0,     0,
+      75,     0,     0,     0,     0,     0,     0,    87,     0,    88,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    84,     0,    85
+      87,     0,    88
 };
 
 static const yytype_int16 yycheck[] =
 {
-       9,    73,    73,   157,   143,   161,    76,   163,   143,    91,
-       4,    76,   229,    86,    87,   258,   190,   148,   174,     4,
-       9,    78,     9,   109,    96,    97,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   196,   172,   173,    33,
-      34,    35,   194,   115,   196,     0,     3,     4,    33,    34,
-      35,   199,   199,   199,   214,   199,   230,   113,   193,   199,
-     110,   215,   214,   383,    84,    85,    76,   215,   215,   215,
-     199,   215,   104,   213,   394,    32,    33,    34,    87,    36,
-      37,    38,    39,    40,   213,   117,   112,   330,   195,    98,
-     229,   113,   199,   194,   229,   251,   270,   314,    87,   255,
-      87,   113,   258,   195,   113,   322,   237,   199,   113,   263,
-     266,   285,    33,    34,   195,   113,    37,   126,   199,    76,
-     315,   195,   104,   105,   106,   199,   135,   195,    76,   194,
-     212,   199,   195,   307,   207,   208,   199,   146,   113,   148,
-     195,   315,    33,    34,    35,   199,   216,   214,   157,   196,
-     306,   368,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   180,   215,   216,   330,   314,   196,   372,   198,   314,
-     204,   205,   206,   322,   200,   201,    76,   322,   294,   295,
-     296,   297,   387,    82,    83,   390,    88,    89,   372,   290,
-     291,   195,   216,   398,   292,   293,   215,    76,   298,   299,
-     405,   385,    76,   387,     3,     4,   390,   226,   113,    76,
-     376,   194,   215,   214,   398,   215,   380,   215,   237,   368,
-     194,   405,   215,   368,   194,   213,   194,   393,     3,     4,
-     194,   250,   195,    32,    33,    34,   209,    36,    37,   258,
-     211,   210,    90,    92,   263,   194,   410,    76,   196,   215,
-     197,    78,    75,   335,   335,   195,   197,    32,    33,    34,
-     196,    36,    37,    38,    39,    40,   194,   199,   214,    76,
-     195,   197,   194,   197,   197,   214,   214,   195,   215,    12,
-     214,   216,   197,   267,   214,   301,   215,   300,   302,   129,
-     136,   303,   246,   304,    77,   305,   146,   250,   323,   226,
-     394,    89,   381,   180,    -1,   226,   250,   330,    87,    -1,
-      -1,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   380,    -1,    -1,   383,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   394,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   410,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
+       9,     8,    76,    76,    93,   169,   165,   171,   155,   151,
+     235,    76,    77,    78,    76,    86,    87,   181,    88,    89,
+     198,   198,     4,   265,   322,    99,   100,     3,     4,   394,
+       9,     9,   201,   201,   217,   218,    98,    80,   216,   216,
+     107,    33,    34,    84,    85,    37,   120,   412,   217,   217,
+     151,    33,    34,    35,   111,   122,    32,    33,    34,     4,
+      36,    37,     0,   222,   201,   115,    73,   201,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   179,   180,
+     217,    90,   112,   217,   115,   383,   201,   115,    33,    34,
+      35,    98,   101,   235,   258,   337,   321,   197,   262,   200,
+     215,   265,   249,   328,   111,   201,   115,   405,   114,   273,
+     408,    90,    90,   197,   202,   203,   197,   201,   416,   215,
+     201,   115,   131,    90,    91,   214,   424,   198,   115,   200,
+     115,   140,     3,     4,   235,   142,   236,   197,   197,   209,
+     210,   201,   201,    76,    77,    78,   155,   154,   157,   313,
+     197,   197,   196,   218,   379,   201,   165,   106,   107,   108,
+     197,    32,    33,    34,   201,    36,    37,    38,    39,    40,
+     218,   197,   201,   337,   198,   201,   196,   277,   196,   321,
+     301,   302,   303,   304,   297,   298,   328,   115,   347,   216,
+     299,   300,   292,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   274,   222,   314,   197,    76,    77,    78,   196,
+     321,   217,   322,   387,   233,   232,   216,   328,   217,     3,
+       4,   217,   391,    33,    34,    35,   196,   379,   196,   196,
+     249,   206,   207,   208,   305,   306,   217,   411,   257,   215,
+     196,   219,   196,   212,   197,   355,   265,   196,    32,    33,
+      34,   270,    36,    37,    38,    39,    40,   274,   342,   342,
+     429,   211,   213,    92,    94,   217,   196,   199,   379,   198,
+      75,    80,   197,   383,   198,   216,   199,   196,   199,   201,
+     197,   196,   216,   197,   217,   216,   199,   199,   197,   197,
+     400,   218,    76,   403,    78,   405,   216,   199,   408,    12,
+     216,   308,   307,   311,   141,   233,   416,   217,   309,   312,
+     134,   253,   329,    80,   424,   233,   310,   157,   337,   329,
+     257,    92,   412,   270,   392,   337,    90,   344,   347,    -1,
+      -1,   257,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,
+      -1,    -1,   391,    -1,    -1,   394,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   412,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     429,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   105,   106,   107,   108,    -1,   110,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   194,    -1,    -1,    -1,    -1,    -1,   200,
-     201,   202,   203,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   215,   216,   217,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
+      -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
-     106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-      -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   194,    -1,
-      -1,    -1,    -1,    -1,   200,   201,   202,   203,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   215,
-     216,   217,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,
+     202,   203,   204,   205,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   217,   218,   219,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
+     105,   106,   107,   108,    -1,   110,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,
+      -1,    -1,   157,    -1,   159,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   194,    -1,    -1,    -1,    -1,    -1,   200,
-     201,   202,   203,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   215,   216,   217,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
+      -1,   196,    -1,    -1,    -1,    -1,    -1,   202,   203,   204,
+     205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   217,   218,   219,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    -1,    -1,    86,    87,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
-     106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   105,   106,   107,
+     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   123,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-      -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,
+      -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   194,    -1,
-      -1,    -1,    -1,    -1,   200,   201,   202,   203,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   215,
-     216,   217,     3,     4,     5,     6,     7,     8,     9,    10,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   196,    -1,
+      -1,    -1,    -1,    -1,   202,   203,   204,   205,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   217,
+     218,   219,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
@@ -1658,295 +1657,312 @@ static const yytype_int16 yycheck[] =
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
+      81,    82,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,   105,   106,   107,   108,    -1,   110,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   194,    -1,    -1,    -1,    -1,    -1,   200,
-     201,   202,   203,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   215,   216,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    -1,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    84,    85,    -1,
+      -1,    -1,    -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,
+      -1,   202,   203,   204,   205,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   217,   218,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      -1,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,   106,
-      -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,
+     105,   106,   107,   108,    -1,   110,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,    -1,
-     157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   157,    -1,   159,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   194,    -1,    -1,
-      -1,    -1,    -1,   200,   201,   202,   203,     3,     4,     5,
-       6,     7,     8,    -1,    -1,    -1,    -1,    -1,   215,   216,
-      -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
-     106,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,     5,     6,     7,     8,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-      -1,   157,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    -1,    76,   194,    -1,
-      -1,    -1,    -1,    -1,   200,   201,   202,   203,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   215,
-      -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,
+      -1,   196,    -1,    -1,    -1,    -1,    -1,   202,   203,   204,
+     205,     3,     4,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,   217,   218,    -1,    -1,    -1,    -1,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    -1,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      82,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     5,     6,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    -1,   105,   106,   107,   108,    -1,   110,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   123,    -1,     5,     6,     7,     8,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,   155,    -1,   157,    41,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    -1,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    -1,    76,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    -1,   196,    77,    -1,    -1,    -1,    -1,
+     202,   203,   204,   205,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   217,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   106,   107,   108,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
+      -1,    -1,    -1,   106,   107,   108,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,    -1,   159,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    83,
+      -1,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,    -1,
+      -1,    -1,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   217,    -1,
-      -1,    -1,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   157,    -1,   159,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,   202,   203,
+     204,   205,     3,     4,     5,     6,     7,     8,    -1,    -1,
+      -1,    -1,    -1,   217,    -1,    -1,    -1,    -1,    -1,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    -1,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   105,   106,   107,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       5,     6,     7,     8,    -1,   196,    -1,    -1,    -1,    -1,
+      -1,   202,   203,   204,   205,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,    -1,   157,    41,    42,    43,    44,
+      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      -1,    76,    77,    78,    79,    80,    81,    -1,    -1,    84,
-      85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   217,    -1,    -1,    -1,   104,
-     105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   194,
-      -1,    -1,    -1,    -1,    -1,   200,   201,   202,   203,     3,
-       4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    -1,
-     215,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
-     104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,
+      -1,    -1,   157,    -1,   159,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,
+      -1,   196,    -1,    -1,   199,    -1,    -1,   202,   203,   204,
+     205,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+      79,    80,    81,    82,    83,    -1,    -1,    86,    87,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,   107,   108,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,
-     194,    -1,    -1,    -1,    -1,    -1,   200,   201,   202,   203,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,   105,   106,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
+     159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     5,     6,     7,     8,    -1,   196,    -1,    -1,
+     199,    -1,    -1,   202,   203,   204,   205,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      83,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   155,    -1,   157,    -1,    -1,
+      -1,    -1,    -1,   106,   107,   108,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
-       6,     7,     8,    -1,   194,    -1,    -1,   197,    -1,    -1,
-     200,   201,   202,   203,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-      76,    77,    78,    79,    80,    81,    -1,    -1,    84,    85,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,   105,
-     106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,    -1,   159,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
-      -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
+       7,     8,    -1,   196,    -1,    -1,   199,    -1,    -1,   202,
+     203,   204,   205,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    83,    -1,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,
+     107,   108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     5,     6,     7,     8,    -1,   194,    -1,
-      -1,   197,    -1,    -1,   200,   201,   202,   203,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     157,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     5,     6,     7,     8,    -1,   196,
+      -1,    -1,    -1,    -1,    -1,   202,   203,   204,   205,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   106,   107,   108,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,
-       8,    -1,   194,    -1,    -1,   197,    -1,    -1,   200,   201,
-     202,   203,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    84,    85,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,   105,   106,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,   159,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,    -1,   157,
+       5,     6,     7,     8,    -1,   196,    -1,    -1,    -1,    -1,
+      -1,   202,   203,   204,   205,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      -1,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   106,   107,   108,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     5,     6,     7,     8,    -1,   194,    -1,    -1,    -1,
-      -1,    -1,   200,   201,   202,   203,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   157,    -1,   159,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
+      -1,   196,    -1,    -1,    -1,    -1,    -1,   202,   203,   204,
+     205,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    -1,    -1,    77,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   105,   106,   107,   108,
+      -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,     5,     6,     7,     8,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,     6,     7,     8,    -1,
-     194,    -1,    -1,    -1,    -1,    -1,   200,   201,   202,   203,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
+     159,    41,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    -1,    76,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      70,    71,    72,    73,    74,    -1,    -1,    77,     5,     6,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    -1,   106,   107,   108,    -1,
+      -1,    -1,    -1,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,   159,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   103,   104,   105,   106,    -1,   108,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,
-     120,   121,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,   155,    -1,   157,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    -1,    76,     5,     6,     7,     8,    81,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    -1,    76,     5,     6,     7,     8,
-      -1,    -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-      -1,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,   104,   105,   106,    -1,    -1,    -1,    -1,
-      -1,    -1,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   155,    -1,   157
+     157,    -1,   159
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   109,   219,   221,    78,     0,   223,   113,   110,   220,
-     224,    76,     3,     4,     5,     6,     7,     8,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    76,   103,   104,   105,   106,   108,   116,   117,
-     118,   119,   120,   121,   155,   157,   222,   225,   255,   256,
-     257,   258,   259,   264,   265,   266,   267,   270,   272,   273,
-     274,   275,   276,   277,   278,   279,   303,   304,   112,    33,
-      34,    37,    76,   216,    76,   270,   273,   278,   113,   113,
-     113,   113,   113,   194,   303,   215,   216,   290,   195,   199,
-       4,    33,    34,    35,   261,   262,   271,   199,   215,    76,
-     273,   273,   274,   196,   275,    76,   216,   274,   280,   281,
-     273,   275,    76,   268,   269,     9,    10,    11,    13,    14,
-      15,    16,    17,    18,    19,    75,    76,    77,    78,    79,
-      80,    81,    84,    85,   194,   200,   201,   202,   203,   215,
-     216,   217,   226,   227,   228,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   253,   255,   256,
-     274,   285,   286,   287,   288,   291,   292,   293,   296,   297,
-     298,   302,   261,   260,   263,   274,   262,    76,   194,   196,
-     214,   197,   237,   250,   254,   274,   113,   280,    76,   282,
-     283,   217,   281,   215,   214,   195,   199,   215,   215,   286,
-     194,   194,   215,   215,   253,   194,   253,   213,   194,   237,
-     237,   253,   217,   291,    84,    85,   196,   198,   195,   195,
-     199,    74,   251,   194,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   214,   252,   237,   204,   205,   206,
-     200,   201,    82,    83,    86,    87,   207,   208,    88,    89,
-     209,   210,   211,    90,    92,    91,   212,   199,   215,   217,
-     286,    76,   260,   263,   196,   214,   197,   254,   251,   284,
-     197,   217,   196,   199,   215,    78,   269,    75,   285,   292,
-     299,   253,   215,   253,   213,   103,   253,   266,   295,   195,
-     217,   229,   253,    76,   232,   251,   251,   237,   237,   237,
-     239,   239,   240,   240,   241,   241,   241,   241,   242,   242,
-     243,   244,   245,   246,   247,   248,   253,   251,   196,   197,
-     254,   284,   214,   197,   254,   283,   194,   295,   300,   301,
-     195,   195,    76,   195,   197,   213,   254,   214,   197,   284,
-     214,   197,   253,   215,   195,   286,   294,   288,   214,   287,
-     289,   290,   251,   197,   284,   214,   284,   195,   253,   289,
-      12,   284,   284,   215,   286
+       0,   111,   221,   223,    80,     0,   225,   115,   112,   222,
+     227,    76,    77,    78,   226,     3,     4,     5,     6,     7,
+       8,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    77,   105,   106,   107,   108,
+     110,   118,   119,   120,   121,   122,   123,   157,   159,   224,
+     228,   262,   263,   264,   265,   266,   271,   272,   273,   274,
+     277,   279,   280,   281,   282,   283,   284,   285,   286,   311,
+     312,   114,    33,    34,    37,   218,   226,    76,    78,   229,
+     277,   280,   285,   115,   115,   115,   115,   115,   196,   311,
+     217,   218,   298,   197,   201,     4,    33,    34,    35,   268,
+     269,   278,   201,   217,    76,    78,   226,   229,   280,   280,
+     281,   198,   282,   226,   281,   287,   288,   218,   280,   282,
+     226,   275,   276,     9,    10,    11,    13,    14,    15,    16,
+      17,    18,    19,    75,    79,    80,    81,    82,    83,    86,
+      87,   196,   202,   203,   204,   205,   217,   218,   219,   229,
+     230,   231,   233,   234,   235,   236,   237,   238,   239,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   260,   262,   263,   281,   292,   293,
+     294,   295,   299,   300,   301,   304,   305,   306,   310,   268,
+     267,   270,   281,   269,   226,   198,   216,   196,   199,   244,
+     257,   261,   281,   115,   226,   289,   290,   219,   288,   287,
+     217,   216,   197,   201,   217,   217,   293,   196,   196,   217,
+     217,   260,   196,   260,   215,   196,   244,   244,   260,   219,
+     296,    86,    87,   198,   200,   197,   197,   201,    74,   258,
+     196,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   216,   259,   244,   206,   207,   208,   202,   203,    84,
+      85,    88,    89,   209,   210,    90,    91,   211,   212,   213,
+      92,    94,    93,   214,   201,   217,   219,   293,   226,   267,
+     270,   198,   216,   199,   261,   258,   291,   199,   198,   201,
+     217,   219,    80,   276,    75,   292,   300,   307,   260,   217,
+     260,   215,   105,   260,   273,   303,   197,   299,   232,   260,
+     226,   229,   240,   241,   242,   243,   258,   258,   244,   244,
+     244,   246,   246,   247,   247,   248,   248,   248,   248,   249,
+     249,   250,   251,   252,   253,   254,   255,   260,   258,   198,
+     199,   261,   291,   216,   199,   261,   290,   196,   303,   308,
+     309,   197,   197,   226,   197,   219,   199,   196,   197,   197,
+     201,    74,   258,   215,   261,   216,   199,   291,   216,   199,
+     260,   217,   197,   293,   302,   295,   216,   294,   297,   298,
+     258,   258,   199,   291,   216,   291,   197,   260,   297,    12,
+     291,   291,   217,   293
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1961,9 +1977,18 @@ static const yytype_uint16 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)
 
@@ -2020,7 +2045,7 @@ while (YYID (0))
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)                 \
      fprintf (File, "%d.%d-%d.%d",                     \
              (Loc).first_line, (Loc).first_column,     \
@@ -2562,7 +2587,7 @@ YYLTYPE yylloc;
     YYLTYPE *yylsp;
 
     /* The locations where the error started and ended.  */
-    YYLTYPE yyerror_range[2];
+    YYLTYPE yyerror_range[3];
 
     YYSIZE_T yystacksize;
 
@@ -2609,7 +2634,7 @@ YYLTYPE yylloc;
   yyvsp = yyvs;
   yylsp = yyls;
 
-#if YYLTYPE_IS_TRIVIAL
+#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
   /* Initialize the default location before parsing starts.  */
   yylloc.first_line   = yylloc.last_line   = 1;
   yylloc.first_column = yylloc.last_column = 1;
@@ -2617,7 +2642,7 @@ YYLTYPE yylloc;
 
 /* User initialization code.  */
 
-/* Line 1242 of yacc.c  */
+/* Line 1251 of yacc.c  */
 #line 41 "glsl_parser.ypp"
 {
    yylloc.first_line = 1;
@@ -2627,8 +2652,8 @@ YYLTYPE yylloc;
    yylloc.source = 0;
 }
 
-/* Line 1242 of yacc.c  */
-#line 2632 "glsl_parser.cpp"
+/* Line 1251 of yacc.c  */
+#line 2657 "glsl_parser.cpp"
   yylsp[0] = yylloc;
 
   goto yysetstate;
@@ -2815,57 +2840,85 @@ yyreduce:
     {
         case 2:
 
-/* Line 1455 of yacc.c  */
-#line 213 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 218 "glsl_parser.ypp"
     {
           _mesa_glsl_initialize_types(state);
        ;}
     break;
 
-  case 5:
+  case 3:
 
-/* Line 1455 of yacc.c  */
+/* Line 1464 of yacc.c  */
 #line 222 "glsl_parser.ypp"
     {
+          delete state->symbols;
+          state->symbols = new(ralloc_parent(state)) glsl_symbol_table;
+          _mesa_glsl_initialize_types(state);
+       ;}
+    break;
+
+  case 5:
+
+/* Line 1464 of yacc.c  */
+#line 232 "glsl_parser.ypp"
+    {
+          bool supported = false;
+
           switch ((yyvsp[(2) - (3)].n)) {
           case 100:
              state->es_shader = true;
+             supported = state->Const.GLSL_100ES;
+             break;
           case 110:
+             supported = state->Const.GLSL_110;
+             break;
           case 120:
+             supported = state->Const.GLSL_120;
+             break;
           case 130:
-             /* FINISHME: Check against implementation support versions. */
-             state->language_version = (yyvsp[(2) - (3)].n);
+             supported = state->Const.GLSL_130;
              break;
           default:
-             _mesa_glsl_error(& (yylsp[(2) - (3)]), state, "Shading language version"
-                              "%u is not supported\n", (yyvsp[(2) - (3)].n));
+             supported = false;
              break;
           }
+
+          state->language_version = (yyvsp[(2) - (3)].n);
+          state->version_string =
+             ralloc_asprintf(state, "GLSL%s %d.%02d",
+                             state->es_shader ? " ES" : "",
+                             state->language_version / 100,
+                             state->language_version % 100);
+
+          if (!supported) {
+             _mesa_glsl_error(& (yylsp[(2) - (3)]), state, "%s is not supported. "
+                              "Supported versions are: %s\n",
+                              state->version_string,
+                              state->supported_version_string);
+          }
        ;}
     break;
 
   case 10:
 
-/* Line 1455 of yacc.c  */
-#line 246 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 276 "glsl_parser.ypp"
     {
           if (state->language_version < 120) {
              _mesa_glsl_warning(& (yylsp[(1) - (2)]), state,
-                                "pragma `invariant(all)' not supported in "
-                                "GLSL%s %d.%02d",
-                                state->es_shader ? " ES" : "",
-                                state->language_version / 100,
-                                state->language_version % 100);
+                                "pragma `invariant(all)' not supported in %s",
+                                state->version_string);
           } else {
              state->all_invariant = true;
           }
        ;}
     break;
 
-  case 13:
+  case 16:
 
-/* Line 1455 of yacc.c  */
-#line 267 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 300 "glsl_parser.ypp"
     {
           if (!_mesa_glsl_process_extension((yyvsp[(2) - (5)].identifier), & (yylsp[(2) - (5)]), (yyvsp[(4) - (5)].identifier), & (yylsp[(4) - (5)]), state)) {
              YYERROR;
@@ -2873,36 +2926,36 @@ yyreduce:
        ;}
     break;
 
-  case 14:
+  case 17:
 
-/* Line 1455 of yacc.c  */
-#line 276 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 309 "glsl_parser.ypp"
     {
-          /* FINISHME: The NULL test is only required because 'precision'
-           * FINISHME: statements are not yet supported.
+          /* FINISHME: The NULL test is required because pragmas are set to
+           * FINISHME: NULL. (See production rule for external_declaration.)
            */
           if ((yyvsp[(1) - (1)].node) != NULL)
              state->translation_unit.push_tail(& (yyvsp[(1) - (1)].node)->link);
        ;}
     break;
 
-  case 15:
+  case 18:
 
-/* Line 1455 of yacc.c  */
-#line 284 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 317 "glsl_parser.ypp"
     {
-          /* FINISHME: The NULL test is only required because 'precision'
-           * FINISHME: statements are not yet supported.
+          /* FINISHME: The NULL test is required because pragmas are set to
+           * FINISHME: NULL. (See production rule for external_declaration.)
            */
           if ((yyvsp[(2) - (2)].node) != NULL)
              state->translation_unit.push_tail(& (yyvsp[(2) - (2)].node)->link);
        ;}
     break;
 
-  case 17:
+  case 21:
 
-/* Line 1455 of yacc.c  */
-#line 299 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 333 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL);
@@ -2911,10 +2964,10 @@ yyreduce:
        ;}
     break;
 
-  case 18:
+  case 22:
 
-/* Line 1455 of yacc.c  */
-#line 306 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 340 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL);
@@ -2923,10 +2976,10 @@ yyreduce:
        ;}
     break;
 
-  case 19:
+  case 23:
 
-/* Line 1455 of yacc.c  */
-#line 313 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 347 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL);
@@ -2935,10 +2988,10 @@ yyreduce:
        ;}
     break;
 
-  case 20:
+  case 24:
 
-/* Line 1455 of yacc.c  */
-#line 320 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 354 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL);
@@ -2947,10 +3000,10 @@ yyreduce:
        ;}
     break;
 
-  case 21:
+  case 25:
 
-/* Line 1455 of yacc.c  */
-#line 327 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 361 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL);
@@ -2959,19 +3012,19 @@ yyreduce:
        ;}
     break;
 
-  case 22:
+  case 26:
 
-/* Line 1455 of yacc.c  */
-#line 334 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 368 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(2) - (3)].expression);
        ;}
     break;
 
-  case 24:
+  case 28:
 
-/* Line 1455 of yacc.c  */
-#line 342 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 376 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[(1) - (4)].expression), (yyvsp[(3) - (4)].expression), NULL);
@@ -2979,19 +3032,19 @@ yyreduce:
        ;}
     break;
 
-  case 25:
+  case 29:
 
-/* Line 1455 of yacc.c  */
-#line 348 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 382 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 26:
+  case 30:
 
-/* Line 1455 of yacc.c  */
-#line 352 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 386 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), NULL, NULL);
@@ -3000,10 +3053,10 @@ yyreduce:
        ;}
     break;
 
-  case 27:
+  case 31:
 
-/* Line 1455 of yacc.c  */
-#line 359 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 393 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -3011,10 +3064,10 @@ yyreduce:
        ;}
     break;
 
-  case 28:
+  case 32:
 
-/* Line 1455 of yacc.c  */
-#line 365 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 399 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -3022,10 +3075,10 @@ yyreduce:
        ;}
     break;
 
-  case 32:
+  case 36:
 
-/* Line 1455 of yacc.c  */
-#line 383 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 417 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3033,10 +3086,10 @@ yyreduce:
        ;}
     break;
 
-  case 37:
+  case 41:
 
-/* Line 1455 of yacc.c  */
-#line 402 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 436 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (2)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3044,10 +3097,10 @@ yyreduce:
        ;}
     break;
 
-  case 38:
+  case 42:
 
-/* Line 1455 of yacc.c  */
-#line 408 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 442 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (3)].expression);
           (yyval.expression)->set_location(yylloc);
@@ -3055,10 +3108,10 @@ yyreduce:
        ;}
     break;
 
-  case 40:
+  case 44:
 
-/* Line 1455 of yacc.c  */
-#line 424 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 458 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_function_expression((yyvsp[(1) - (1)].type_specifier));
@@ -3066,10 +3119,10 @@ yyreduce:
        ;}
     break;
 
-  case 41:
+  case 45:
 
-/* Line 1455 of yacc.c  */
-#line 430 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 464 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3078,10 +3131,10 @@ yyreduce:
        ;}
     break;
 
-  case 42:
+  case 46:
 
-/* Line 1455 of yacc.c  */
-#line 437 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 471 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3090,10 +3143,44 @@ yyreduce:
        ;}
     break;
 
-  case 44:
+  case 51:
 
-/* Line 1455 of yacc.c  */
-#line 449 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 491 "glsl_parser.ypp"
+    {
+          (yyval.expression) = (yyvsp[(1) - (2)].expression);
+          (yyval.expression)->set_location(yylloc);
+          (yyval.expression)->expressions.push_tail(& (yyvsp[(2) - (2)].expression)->link);
+       ;}
+    break;
+
+  case 52:
+
+/* Line 1464 of yacc.c  */
+#line 497 "glsl_parser.ypp"
+    {
+          (yyval.expression) = (yyvsp[(1) - (3)].expression);
+          (yyval.expression)->set_location(yylloc);
+          (yyval.expression)->expressions.push_tail(& (yyvsp[(3) - (3)].expression)->link);
+       ;}
+    break;
+
+  case 53:
+
+/* Line 1464 of yacc.c  */
+#line 509 "glsl_parser.ypp"
+    {
+          void *ctx = state;
+          ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (2)].identifier));
+          (yyval.expression) = new(ctx) ast_function_expression(callee);
+          (yyval.expression)->set_location(yylloc);
+       ;}
+    break;
+
+  case 55:
+
+/* Line 1464 of yacc.c  */
+#line 521 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3101,10 +3188,10 @@ yyreduce:
        ;}
     break;
 
-  case 45:
+  case 56:
 
-/* Line 1455 of yacc.c  */
-#line 455 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 527 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3112,10 +3199,10 @@ yyreduce:
        ;}
     break;
 
-  case 46:
+  case 57:
 
-/* Line 1455 of yacc.c  */
-#line 461 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 533 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(1) - (2)].n), (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3123,38 +3210,38 @@ yyreduce:
        ;}
     break;
 
-  case 47:
+  case 58:
 
-/* Line 1455 of yacc.c  */
-#line 470 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 542 "glsl_parser.ypp"
     { (yyval.n) = ast_plus; ;}
     break;
 
-  case 48:
+  case 59:
 
-/* Line 1455 of yacc.c  */
-#line 471 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 543 "glsl_parser.ypp"
     { (yyval.n) = ast_neg; ;}
     break;
 
-  case 49:
+  case 60:
 
-/* Line 1455 of yacc.c  */
-#line 472 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 544 "glsl_parser.ypp"
     { (yyval.n) = ast_logic_not; ;}
     break;
 
-  case 50:
+  case 61:
 
-/* Line 1455 of yacc.c  */
-#line 473 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 545 "glsl_parser.ypp"
     { (yyval.n) = ast_bit_not; ;}
     break;
 
-  case 52:
+  case 63:
 
-/* Line 1455 of yacc.c  */
-#line 479 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 551 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3162,10 +3249,10 @@ yyreduce:
        ;}
     break;
 
-  case 53:
+  case 64:
 
-/* Line 1455 of yacc.c  */
-#line 485 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 557 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3173,10 +3260,10 @@ yyreduce:
        ;}
     break;
 
-  case 54:
+  case 65:
 
-/* Line 1455 of yacc.c  */
-#line 491 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 563 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3184,10 +3271,10 @@ yyreduce:
        ;}
     break;
 
-  case 56:
+  case 67:
 
-/* Line 1455 of yacc.c  */
-#line 501 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 573 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3195,10 +3282,10 @@ yyreduce:
        ;}
     break;
 
-  case 57:
+  case 68:
 
-/* Line 1455 of yacc.c  */
-#line 507 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 579 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3206,10 +3293,10 @@ yyreduce:
        ;}
     break;
 
-  case 59:
+  case 70:
 
-/* Line 1455 of yacc.c  */
-#line 517 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 589 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3217,10 +3304,10 @@ yyreduce:
        ;}
     break;
 
-  case 60:
+  case 71:
 
-/* Line 1455 of yacc.c  */
-#line 523 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 595 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3228,10 +3315,10 @@ yyreduce:
        ;}
     break;
 
-  case 62:
+  case 73:
 
-/* Line 1455 of yacc.c  */
-#line 533 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 605 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3239,10 +3326,10 @@ yyreduce:
        ;}
     break;
 
-  case 63:
+  case 74:
 
-/* Line 1455 of yacc.c  */
-#line 539 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 611 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3250,10 +3337,10 @@ yyreduce:
        ;}
     break;
 
-  case 64:
+  case 75:
 
-/* Line 1455 of yacc.c  */
-#line 545 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 617 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3261,10 +3348,10 @@ yyreduce:
        ;}
     break;
 
-  case 65:
+  case 76:
 
-/* Line 1455 of yacc.c  */
-#line 551 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 623 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3272,10 +3359,10 @@ yyreduce:
        ;}
     break;
 
-  case 67:
+  case 78:
 
-/* Line 1455 of yacc.c  */
-#line 561 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 633 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3283,10 +3370,10 @@ yyreduce:
        ;}
     break;
 
-  case 68:
+  case 79:
 
-/* Line 1455 of yacc.c  */
-#line 567 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 639 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3294,10 +3381,10 @@ yyreduce:
        ;}
     break;
 
-  case 70:
+  case 81:
 
-/* Line 1455 of yacc.c  */
-#line 577 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 649 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3305,10 +3392,10 @@ yyreduce:
        ;}
     break;
 
-  case 72:
+  case 83:
 
-/* Line 1455 of yacc.c  */
-#line 587 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 659 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3316,10 +3403,10 @@ yyreduce:
        ;}
     break;
 
-  case 74:
+  case 85:
 
-/* Line 1455 of yacc.c  */
-#line 597 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 669 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3327,10 +3414,10 @@ yyreduce:
        ;}
     break;
 
-  case 76:
+  case 87:
 
-/* Line 1455 of yacc.c  */
-#line 607 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 679 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3338,10 +3425,10 @@ yyreduce:
        ;}
     break;
 
-  case 78:
+  case 89:
 
-/* Line 1455 of yacc.c  */
-#line 617 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 689 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3349,10 +3436,10 @@ yyreduce:
        ;}
     break;
 
-  case 80:
+  case 91:
 
-/* Line 1455 of yacc.c  */
-#line 627 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 699 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3360,10 +3447,10 @@ yyreduce:
        ;}
     break;
 
-  case 82:
+  case 93:
 
-/* Line 1455 of yacc.c  */
-#line 637 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 709 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[(1) - (5)].expression), (yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].expression));
@@ -3371,10 +3458,10 @@ yyreduce:
        ;}
     break;
 
-  case 84:
+  case 95:
 
-/* Line 1455 of yacc.c  */
-#line 647 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 719 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.expression) = new(ctx) ast_expression((yyvsp[(2) - (3)].n), (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3382,96 +3469,96 @@ yyreduce:
        ;}
     break;
 
-  case 85:
+  case 96:
 
-/* Line 1455 of yacc.c  */
-#line 655 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 727 "glsl_parser.ypp"
     { (yyval.n) = ast_assign; ;}
     break;
 
-  case 86:
+  case 97:
 
-/* Line 1455 of yacc.c  */
-#line 656 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 728 "glsl_parser.ypp"
     { (yyval.n) = ast_mul_assign; ;}
     break;
 
-  case 87:
+  case 98:
 
-/* Line 1455 of yacc.c  */
-#line 657 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 729 "glsl_parser.ypp"
     { (yyval.n) = ast_div_assign; ;}
     break;
 
-  case 88:
+  case 99:
 
-/* Line 1455 of yacc.c  */
-#line 658 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 730 "glsl_parser.ypp"
     { (yyval.n) = ast_mod_assign; ;}
     break;
 
-  case 89:
+  case 100:
 
-/* Line 1455 of yacc.c  */
-#line 659 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 731 "glsl_parser.ypp"
     { (yyval.n) = ast_add_assign; ;}
     break;
 
-  case 90:
+  case 101:
 
-/* Line 1455 of yacc.c  */
-#line 660 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 732 "glsl_parser.ypp"
     { (yyval.n) = ast_sub_assign; ;}
     break;
 
-  case 91:
+  case 102:
 
-/* Line 1455 of yacc.c  */
-#line 661 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 733 "glsl_parser.ypp"
     { (yyval.n) = ast_ls_assign; ;}
     break;
 
-  case 92:
+  case 103:
 
-/* Line 1455 of yacc.c  */
-#line 662 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 734 "glsl_parser.ypp"
     { (yyval.n) = ast_rs_assign; ;}
     break;
 
-  case 93:
+  case 104:
 
-/* Line 1455 of yacc.c  */
-#line 663 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 735 "glsl_parser.ypp"
     { (yyval.n) = ast_and_assign; ;}
     break;
 
-  case 94:
+  case 105:
 
-/* Line 1455 of yacc.c  */
-#line 664 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 736 "glsl_parser.ypp"
     { (yyval.n) = ast_xor_assign; ;}
     break;
 
-  case 95:
+  case 106:
 
-/* Line 1455 of yacc.c  */
-#line 665 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 737 "glsl_parser.ypp"
     { (yyval.n) = ast_or_assign; ;}
     break;
 
-  case 96:
+  case 107:
 
-/* Line 1455 of yacc.c  */
-#line 670 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 742 "glsl_parser.ypp"
     {
           (yyval.expression) = (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 97:
+  case 108:
 
-/* Line 1455 of yacc.c  */
-#line 674 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 746 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (3)].expression)->oper != ast_sequence) {
@@ -3486,77 +3573,76 @@ yyreduce:
        ;}
     break;
 
-  case 99:
+  case 110:
 
-/* Line 1455 of yacc.c  */
-#line 694 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 766 "glsl_parser.ypp"
     {
+          state->symbols->pop_scope();
           (yyval.node) = (yyvsp[(1) - (2)].function);
        ;}
     break;
 
-  case 100:
+  case 111:
 
-/* Line 1455 of yacc.c  */
-#line 698 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 771 "glsl_parser.ypp"
     {
           (yyval.node) = (yyvsp[(1) - (2)].declarator_list);
        ;}
     break;
 
-  case 101:
+  case 112:
 
-/* Line 1455 of yacc.c  */
-#line 702 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 775 "glsl_parser.ypp"
     {
-          if (((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_float)
-              && ((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_int)) {
-             _mesa_glsl_error(& (yylsp[(3) - (4)]), state, "global precision qualifier can "
-                              "only be applied to `int' or `float'\n");
-             YYERROR;
-          }
-
-          (yyval.node) = NULL; /* FINISHME */
+          (yyvsp[(3) - (4)].type_specifier)->precision = (yyvsp[(2) - (4)].n);
+          (yyvsp[(3) - (4)].type_specifier)->is_precision_statement = true;
+          (yyval.node) = (yyvsp[(3) - (4)].type_specifier);
        ;}
     break;
 
-  case 105:
+  case 116:
 
-/* Line 1455 of yacc.c  */
-#line 725 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 793 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (2)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(2) - (2)].parameter_declarator)->link);
        ;}
     break;
 
-  case 106:
+  case 117:
 
-/* Line 1455 of yacc.c  */
-#line 730 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 798 "glsl_parser.ypp"
     {
           (yyval.function) = (yyvsp[(1) - (3)].function);
           (yyval.function)->parameters.push_tail(& (yyvsp[(3) - (3)].parameter_declarator)->link);
        ;}
     break;
 
-  case 107:
+  case 118:
 
-/* Line 1455 of yacc.c  */
-#line 738 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 806 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function) = new(ctx) ast_function();
           (yyval.function)->set_location(yylloc);
           (yyval.function)->return_type = (yyvsp[(1) - (3)].fully_specified_type);
           (yyval.function)->identifier = (yyvsp[(2) - (3)].identifier);
+
+          state->symbols->add_function(new(state) ir_function((yyvsp[(2) - (3)].identifier)));
+          state->symbols->push_scope();
        ;}
     break;
 
-  case 108:
+  case 119:
 
-/* Line 1455 of yacc.c  */
-#line 749 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 820 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3568,10 +3654,10 @@ yyreduce:
        ;}
     break;
 
-  case 109:
+  case 120:
 
-/* Line 1455 of yacc.c  */
-#line 759 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 830 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3585,10 +3671,10 @@ yyreduce:
        ;}
     break;
 
-  case 110:
+  case 121:
 
-/* Line 1455 of yacc.c  */
-#line 774 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 845 "glsl_parser.ypp"
     {
           (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
 
@@ -3597,20 +3683,20 @@ yyreduce:
        ;}
     break;
 
-  case 111:
+  case 122:
 
-/* Line 1455 of yacc.c  */
-#line 781 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 852 "glsl_parser.ypp"
     {
           (yyval.parameter_declarator) = (yyvsp[(2) - (2)].parameter_declarator);
           (yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier);
        ;}
     break;
 
-  case 112:
+  case 123:
 
-/* Line 1455 of yacc.c  */
-#line 786 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 857 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
@@ -3623,10 +3709,10 @@ yyreduce:
        ;}
     break;
 
-  case 113:
+  case 124:
 
-/* Line 1455 of yacc.c  */
-#line 797 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 868 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3637,39 +3723,39 @@ yyreduce:
        ;}
     break;
 
-  case 114:
+  case 125:
 
-/* Line 1455 of yacc.c  */
-#line 809 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 880 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
        ;}
     break;
 
-  case 115:
+  case 126:
 
-/* Line 1455 of yacc.c  */
-#line 813 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 884 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
        ;}
     break;
 
-  case 116:
+  case 127:
 
-/* Line 1455 of yacc.c  */
-#line 818 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 889 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.out = 1;
        ;}
     break;
 
-  case 117:
+  case 128:
 
-/* Line 1455 of yacc.c  */
-#line 823 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 894 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
@@ -3677,10 +3763,10 @@ yyreduce:
        ;}
     break;
 
-  case 120:
+  case 131:
 
-/* Line 1455 of yacc.c  */
-#line 837 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 908 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (3)].identifier), false, NULL, NULL);
@@ -3688,13 +3774,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (3)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (3)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 121:
+  case 132:
 
-/* Line 1455 of yacc.c  */
-#line 846 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 918 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), true, NULL, NULL);
@@ -3702,13 +3789,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (5)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (5)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 122:
+  case 133:
 
-/* Line 1455 of yacc.c  */
-#line 855 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 928 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (6)].identifier), true, (yyvsp[(5) - (6)].expression), NULL);
@@ -3716,13 +3804,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (6)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (6)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 123:
+  case 134:
 
-/* Line 1455 of yacc.c  */
-#line 864 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 938 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (7)].identifier), true, NULL, (yyvsp[(7) - (7)].expression));
@@ -3730,13 +3819,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (7)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (7)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 124:
+  case 135:
 
-/* Line 1455 of yacc.c  */
-#line 873 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 948 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (8)].identifier), true, (yyvsp[(5) - (8)].expression), (yyvsp[(8) - (8)].expression));
@@ -3744,13 +3834,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (8)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (8)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 125:
+  case 136:
 
-/* Line 1455 of yacc.c  */
-#line 882 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 958 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), false, NULL, (yyvsp[(5) - (5)].expression));
@@ -3758,13 +3849,14 @@ yyreduce:
 
           (yyval.declarator_list) = (yyvsp[(1) - (5)].declarator_list);
           (yyval.declarator_list)->declarations.push_tail(&decl->link);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(3) - (5)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 126:
+  case 137:
 
-/* Line 1455 of yacc.c  */
-#line 895 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 972 "glsl_parser.ypp"
     {
           void *ctx = state;
           if ((yyvsp[(1) - (1)].fully_specified_type)->specifier->type_specifier != ast_struct) {
@@ -3777,10 +3869,10 @@ yyreduce:
        ;}
     break;
 
-  case 127:
+  case 138:
 
-/* Line 1455 of yacc.c  */
-#line 906 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 983 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3791,10 +3883,10 @@ yyreduce:
        ;}
     break;
 
-  case 128:
+  case 139:
 
-/* Line 1455 of yacc.c  */
-#line 915 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 992 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), true, NULL, NULL);
@@ -3805,10 +3897,10 @@ yyreduce:
        ;}
     break;
 
-  case 129:
+  case 140:
 
-/* Line 1455 of yacc.c  */
-#line 924 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1001 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (5)].identifier), true, (yyvsp[(4) - (5)].expression), NULL);
@@ -3819,10 +3911,10 @@ yyreduce:
        ;}
     break;
 
-  case 130:
+  case 141:
 
-/* Line 1455 of yacc.c  */
-#line 933 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1010 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (6)].identifier), true, NULL, (yyvsp[(6) - (6)].expression));
@@ -3833,10 +3925,10 @@ yyreduce:
        ;}
     break;
 
-  case 131:
+  case 142:
 
-/* Line 1455 of yacc.c  */
-#line 942 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1019 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (7)].identifier), true, (yyvsp[(4) - (7)].expression), (yyvsp[(7) - (7)].expression));
@@ -3847,10 +3939,10 @@ yyreduce:
        ;}
     break;
 
-  case 132:
+  case 143:
 
-/* Line 1455 of yacc.c  */
-#line 951 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1028 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -3861,10 +3953,10 @@ yyreduce:
        ;}
     break;
 
-  case 133:
+  case 144:
 
-/* Line 1455 of yacc.c  */
-#line 960 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1037 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3877,10 +3969,10 @@ yyreduce:
        ;}
     break;
 
-  case 134:
+  case 145:
 
-/* Line 1455 of yacc.c  */
-#line 974 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1051 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3889,10 +3981,10 @@ yyreduce:
        ;}
     break;
 
-  case 135:
+  case 146:
 
-/* Line 1455 of yacc.c  */
-#line 981 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1058 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3902,19 +3994,19 @@ yyreduce:
        ;}
     break;
 
-  case 136:
+  case 147:
 
-/* Line 1455 of yacc.c  */
-#line 992 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1069 "glsl_parser.ypp"
     {
          (yyval.type_qualifier) = (yyvsp[(3) - (4)].type_qualifier);
        ;}
     break;
 
-  case 138:
+  case 149:
 
-/* Line 1455 of yacc.c  */
-#line 1000 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1077 "glsl_parser.ypp"
     {
           if (((yyvsp[(1) - (3)].type_qualifier).flags.i & (yyvsp[(3) - (3)].type_qualifier).flags.i) != 0) {
              _mesa_glsl_error(& (yylsp[(3) - (3)]), state,
@@ -3932,16 +4024,17 @@ yyreduce:
        ;}
     break;
 
-  case 139:
+  case 150:
 
-/* Line 1455 of yacc.c  */
-#line 1019 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1096 "glsl_parser.ypp"
     {
           bool got_one = false;
 
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
 
-          if (state->ARB_fragment_coord_conventions_enable) {
+          /* Layout qualifiers for ARB_fragment_coord_conventions. */
+          if (!got_one && state->ARB_fragment_coord_conventions_enable) {
              if (strcmp((yyvsp[(1) - (1)].identifier), "origin_upper_left") == 0) {
                 got_one = true;
                 (yyval.type_qualifier).flags.q.origin_upper_left = 1;
@@ -3949,27 +4042,49 @@ yyreduce:
                 got_one = true;
                 (yyval.type_qualifier).flags.q.pixel_center_integer = 1;
              }
+
+             if (got_one && state->ARB_fragment_coord_conventions_warn) {
+                _mesa_glsl_warning(& (yylsp[(1) - (1)]), state,
+                                   "GL_ARB_fragment_coord_conventions layout "
+                                   "identifier `%s' used\n", (yyvsp[(1) - (1)].identifier));
+             }
+          }
+
+          /* Layout qualifiers for AMD_conservative_depth. */
+          if (!got_one && state->AMD_conservative_depth_enable) {
+             if (strcmp((yyvsp[(1) - (1)].identifier), "depth_any") == 0) {
+                got_one = true;
+                (yyval.type_qualifier).flags.q.depth_any = 1;
+             } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_greater") == 0) {
+                got_one = true;
+                (yyval.type_qualifier).flags.q.depth_greater = 1;
+             } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_less") == 0) {
+                got_one = true;
+                (yyval.type_qualifier).flags.q.depth_less = 1;
+             } else if (strcmp((yyvsp[(1) - (1)].identifier), "depth_unchanged") == 0) {
+                got_one = true;
+                (yyval.type_qualifier).flags.q.depth_unchanged = 1;
+             }
+       
+             if (got_one && state->AMD_conservative_depth_warn) {
+                _mesa_glsl_warning(& (yylsp[(1) - (1)]), state,
+                                   "GL_AMD_conservative_depth "
+                                   "layout qualifier `%s' is used\n", (yyvsp[(1) - (1)].identifier));
+             }
           }
 
-          /* If the identifier didn't match any known layout identifiers,
-           * emit an error.
-           */
           if (!got_one) {
              _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "unrecognized layout identifier "
                               "`%s'\n", (yyvsp[(1) - (1)].identifier));
              YYERROR;
-          } else if (state->ARB_fragment_coord_conventions_warn) {
-             _mesa_glsl_warning(& (yylsp[(1) - (1)]), state,
-                                "GL_ARB_fragment_coord_conventions layout "
-                                "identifier `%s' used\n", (yyvsp[(1) - (1)].identifier));
           }
        ;}
     break;
 
-  case 140:
+  case 151:
 
-/* Line 1455 of yacc.c  */
-#line 1048 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1148 "glsl_parser.ypp"
     {
           bool got_one = false;
 
@@ -4009,80 +4124,80 @@ yyreduce:
        ;}
     break;
 
-  case 141:
+  case 152:
 
-/* Line 1455 of yacc.c  */
-#line 1089 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1189 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.smooth = 1;
        ;}
     break;
 
-  case 142:
+  case 153:
 
-/* Line 1455 of yacc.c  */
-#line 1094 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1194 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.flat = 1;
        ;}
     break;
 
-  case 143:
+  case 154:
 
-/* Line 1455 of yacc.c  */
-#line 1099 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1199 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.noperspective = 1;
        ;}
     break;
 
-  case 144:
+  case 155:
 
-/* Line 1455 of yacc.c  */
-#line 1107 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1207 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.constant = 1;
        ;}
     break;
 
-  case 147:
+  case 158:
 
-/* Line 1455 of yacc.c  */
-#line 1117 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1217 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
        ;}
     break;
 
-  case 149:
+  case 160:
 
-/* Line 1455 of yacc.c  */
-#line 1123 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1223 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
        ;}
     break;
 
-  case 150:
+  case 161:
 
-/* Line 1455 of yacc.c  */
-#line 1128 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1228 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(2) - (2)].type_qualifier);
           (yyval.type_qualifier).flags.q.invariant = 1;
        ;}
     break;
 
-  case 151:
+  case 162:
 
-/* Line 1455 of yacc.c  */
-#line 1133 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1233 "glsl_parser.ypp"
     {
           (yyval.type_qualifier) = (yyvsp[(2) - (3)].type_qualifier);
           (yyval.type_qualifier).flags.i |= (yyvsp[(3) - (3)].type_qualifier).flags.i;
@@ -4090,50 +4205,50 @@ yyreduce:
        ;}
     break;
 
-  case 152:
+  case 163:
 
-/* Line 1455 of yacc.c  */
-#line 1139 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1239 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.invariant = 1;
        ;}
     break;
 
-  case 153:
+  case 164:
 
-/* Line 1455 of yacc.c  */
-#line 1147 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1247 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.constant = 1;
        ;}
     break;
 
-  case 154:
+  case 165:
 
-/* Line 1455 of yacc.c  */
-#line 1152 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1252 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.attribute = 1;
        ;}
     break;
 
-  case 155:
+  case 166:
 
-/* Line 1455 of yacc.c  */
-#line 1157 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1257 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.varying = 1;
        ;}
     break;
 
-  case 156:
+  case 167:
 
-/* Line 1455 of yacc.c  */
-#line 1162 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1262 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1;
@@ -4141,70 +4256,79 @@ yyreduce:
        ;}
     break;
 
-  case 157:
+  case 168:
 
-/* Line 1455 of yacc.c  */
-#line 1168 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1268 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.in = 1;
        ;}
     break;
 
-  case 158:
+  case 169:
 
-/* Line 1455 of yacc.c  */
-#line 1173 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1273 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.out = 1;
        ;}
     break;
 
-  case 159:
+  case 170:
 
-/* Line 1455 of yacc.c  */
-#line 1178 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1278 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.in = 1;
        ;}
     break;
 
-  case 160:
+  case 171:
 
-/* Line 1455 of yacc.c  */
-#line 1183 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1283 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.out = 1;
        ;}
     break;
 
-  case 161:
+  case 172:
 
-/* Line 1455 of yacc.c  */
-#line 1188 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1288 "glsl_parser.ypp"
     {
           memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
           (yyval.type_qualifier).flags.q.uniform = 1;
        ;}
     break;
 
-  case 163:
+  case 173:
 
-/* Line 1455 of yacc.c  */
-#line 1197 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1296 "glsl_parser.ypp"
+    {
+          (yyval.type_specifier) = (yyvsp[(1) - (1)].type_specifier);
+       ;}
+    break;
+
+  case 174:
+
+/* Line 1464 of yacc.c  */
+#line 1300 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(2) - (2)].type_specifier);
           (yyval.type_specifier)->precision = (yyvsp[(1) - (2)].n);
        ;}
     break;
 
-  case 165:
+  case 176:
 
-/* Line 1455 of yacc.c  */
-#line 1206 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1309 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (3)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4212,10 +4336,10 @@ yyreduce:
        ;}
     break;
 
-  case 166:
+  case 177:
 
-/* Line 1455 of yacc.c  */
-#line 1212 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1315 "glsl_parser.ypp"
     {
           (yyval.type_specifier) = (yyvsp[(1) - (4)].type_specifier);
           (yyval.type_specifier)->is_array = true;
@@ -4223,10 +4347,10 @@ yyreduce:
        ;}
     break;
 
-  case 167:
+  case 178:
 
-/* Line 1455 of yacc.c  */
-#line 1221 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1324 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].n));
@@ -4234,10 +4358,10 @@ yyreduce:
        ;}
     break;
 
-  case 168:
+  case 179:
 
-/* Line 1455 of yacc.c  */
-#line 1227 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1330 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier));
@@ -4245,10 +4369,10 @@ yyreduce:
        ;}
     break;
 
-  case 169:
+  case 180:
 
-/* Line 1455 of yacc.c  */
-#line 1233 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1336 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier));
@@ -4256,429 +4380,427 @@ yyreduce:
        ;}
     break;
 
-  case 170:
+  case 181:
 
-/* Line 1455 of yacc.c  */
-#line 1241 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1344 "glsl_parser.ypp"
     { (yyval.n) = ast_void; ;}
     break;
 
-  case 171:
+  case 182:
 
-/* Line 1455 of yacc.c  */
-#line 1242 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1345 "glsl_parser.ypp"
     { (yyval.n) = ast_float; ;}
     break;
 
-  case 172:
+  case 183:
 
-/* Line 1455 of yacc.c  */
-#line 1243 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1346 "glsl_parser.ypp"
     { (yyval.n) = ast_int; ;}
     break;
 
-  case 173:
+  case 184:
 
-/* Line 1455 of yacc.c  */
-#line 1244 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1347 "glsl_parser.ypp"
     { (yyval.n) = ast_uint; ;}
     break;
 
-  case 174:
+  case 185:
 
-/* Line 1455 of yacc.c  */
-#line 1245 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1348 "glsl_parser.ypp"
     { (yyval.n) = ast_bool; ;}
     break;
 
-  case 175:
+  case 186:
 
-/* Line 1455 of yacc.c  */
-#line 1246 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1349 "glsl_parser.ypp"
     { (yyval.n) = ast_vec2; ;}
     break;
 
-  case 176:
+  case 187:
 
-/* Line 1455 of yacc.c  */
-#line 1247 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1350 "glsl_parser.ypp"
     { (yyval.n) = ast_vec3; ;}
     break;
 
-  case 177:
+  case 188:
 
-/* Line 1455 of yacc.c  */
-#line 1248 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1351 "glsl_parser.ypp"
     { (yyval.n) = ast_vec4; ;}
     break;
 
-  case 178:
+  case 189:
 
-/* Line 1455 of yacc.c  */
-#line 1249 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1352 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec2; ;}
     break;
 
-  case 179:
+  case 190:
 
-/* Line 1455 of yacc.c  */
-#line 1250 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1353 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec3; ;}
     break;
 
-  case 180:
+  case 191:
 
-/* Line 1455 of yacc.c  */
-#line 1251 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1354 "glsl_parser.ypp"
     { (yyval.n) = ast_bvec4; ;}
     break;
 
-  case 181:
+  case 192:
 
-/* Line 1455 of yacc.c  */
-#line 1252 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1355 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec2; ;}
     break;
 
-  case 182:
+  case 193:
 
-/* Line 1455 of yacc.c  */
-#line 1253 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1356 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec3; ;}
     break;
 
-  case 183:
+  case 194:
 
-/* Line 1455 of yacc.c  */
-#line 1254 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1357 "glsl_parser.ypp"
     { (yyval.n) = ast_ivec4; ;}
     break;
 
-  case 184:
+  case 195:
 
-/* Line 1455 of yacc.c  */
-#line 1255 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1358 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec2; ;}
     break;
 
-  case 185:
+  case 196:
 
-/* Line 1455 of yacc.c  */
-#line 1256 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1359 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec3; ;}
     break;
 
-  case 186:
+  case 197:
 
-/* Line 1455 of yacc.c  */
-#line 1257 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1360 "glsl_parser.ypp"
     { (yyval.n) = ast_uvec4; ;}
     break;
 
-  case 187:
+  case 198:
 
-/* Line 1455 of yacc.c  */
-#line 1258 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1361 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2; ;}
     break;
 
-  case 188:
+  case 199:
 
-/* Line 1455 of yacc.c  */
-#line 1259 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1362 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x3; ;}
     break;
 
-  case 189:
+  case 200:
 
-/* Line 1455 of yacc.c  */
-#line 1260 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1363 "glsl_parser.ypp"
     { (yyval.n) = ast_mat2x4; ;}
     break;
 
-  case 190:
+  case 201:
 
-/* Line 1455 of yacc.c  */
-#line 1261 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1364 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x2; ;}
     break;
 
-  case 191:
+  case 202:
 
-/* Line 1455 of yacc.c  */
-#line 1262 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1365 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3; ;}
     break;
 
-  case 192:
+  case 203:
 
-/* Line 1455 of yacc.c  */
-#line 1263 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1366 "glsl_parser.ypp"
     { (yyval.n) = ast_mat3x4; ;}
     break;
 
-  case 193:
+  case 204:
 
-/* Line 1455 of yacc.c  */
-#line 1264 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1367 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x2; ;}
     break;
 
-  case 194:
+  case 205:
 
-/* Line 1455 of yacc.c  */
-#line 1265 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1368 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4x3; ;}
     break;
 
-  case 195:
+  case 206:
 
-/* Line 1455 of yacc.c  */
-#line 1266 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1369 "glsl_parser.ypp"
     { (yyval.n) = ast_mat4; ;}
     break;
 
-  case 196:
+  case 207:
 
-/* Line 1455 of yacc.c  */
-#line 1267 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1370 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1d; ;}
     break;
 
-  case 197:
+  case 208:
 
-/* Line 1455 of yacc.c  */
-#line 1268 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1371 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2d; ;}
     break;
 
-  case 198:
+  case 209:
 
-/* Line 1455 of yacc.c  */
-#line 1269 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1372 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drect; ;}
     break;
 
-  case 199:
+  case 210:
 
-/* Line 1455 of yacc.c  */
-#line 1270 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1373 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler3d; ;}
     break;
 
-  case 200:
+  case 211:
 
-/* Line 1455 of yacc.c  */
-#line 1271 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1374 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercube; ;}
     break;
 
-  case 201:
+  case 212:
 
-/* Line 1455 of yacc.c  */
-#line 1272 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1375 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1dshadow; ;}
     break;
 
-  case 202:
+  case 213:
 
-/* Line 1455 of yacc.c  */
-#line 1273 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1376 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2dshadow; ;}
     break;
 
-  case 203:
+  case 214:
 
-/* Line 1455 of yacc.c  */
-#line 1274 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1377 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2drectshadow; ;}
     break;
 
-  case 204:
+  case 215:
 
-/* Line 1455 of yacc.c  */
-#line 1275 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1378 "glsl_parser.ypp"
     { (yyval.n) = ast_samplercubeshadow; ;}
     break;
 
-  case 205:
+  case 216:
 
-/* Line 1455 of yacc.c  */
-#line 1276 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1379 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darray; ;}
     break;
 
-  case 206:
+  case 217:
 
-/* Line 1455 of yacc.c  */
-#line 1277 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1380 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darray; ;}
     break;
 
-  case 207:
+  case 218:
 
-/* Line 1455 of yacc.c  */
-#line 1278 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1381 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler1darrayshadow; ;}
     break;
 
-  case 208:
+  case 219:
 
-/* Line 1455 of yacc.c  */
-#line 1279 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1382 "glsl_parser.ypp"
     { (yyval.n) = ast_sampler2darrayshadow; ;}
     break;
 
-  case 209:
+  case 220:
 
-/* Line 1455 of yacc.c  */
-#line 1280 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1383 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1d; ;}
     break;
 
-  case 210:
+  case 221:
 
-/* Line 1455 of yacc.c  */
-#line 1281 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1384 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2d; ;}
     break;
 
-  case 211:
+  case 222:
 
-/* Line 1455 of yacc.c  */
-#line 1282 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1385 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler3d; ;}
     break;
 
-  case 212:
+  case 223:
 
-/* Line 1455 of yacc.c  */
-#line 1283 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1386 "glsl_parser.ypp"
     { (yyval.n) = ast_isamplercube; ;}
     break;
 
-  case 213:
+  case 224:
 
-/* Line 1455 of yacc.c  */
-#line 1284 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1387 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler1darray; ;}
     break;
 
-  case 214:
+  case 225:
 
-/* Line 1455 of yacc.c  */
-#line 1285 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1388 "glsl_parser.ypp"
     { (yyval.n) = ast_isampler2darray; ;}
     break;
 
-  case 215:
+  case 226:
 
-/* Line 1455 of yacc.c  */
-#line 1286 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1389 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1d; ;}
     break;
 
-  case 216:
+  case 227:
 
-/* Line 1455 of yacc.c  */
-#line 1287 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1390 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2d; ;}
     break;
 
-  case 217:
+  case 228:
 
-/* Line 1455 of yacc.c  */
-#line 1288 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1391 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler3d; ;}
     break;
 
-  case 218:
+  case 229:
 
-/* Line 1455 of yacc.c  */
-#line 1289 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1392 "glsl_parser.ypp"
     { (yyval.n) = ast_usamplercube; ;}
     break;
 
-  case 219:
+  case 230:
 
-/* Line 1455 of yacc.c  */
-#line 1290 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1393 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler1darray; ;}
     break;
 
-  case 220:
+  case 231:
 
-/* Line 1455 of yacc.c  */
-#line 1291 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1394 "glsl_parser.ypp"
     { (yyval.n) = ast_usampler2darray; ;}
     break;
 
-  case 221:
+  case 232:
 
-/* Line 1455 of yacc.c  */
-#line 1295 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1398 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
                                         "precision qualifier forbidden "
-                                        "in GLSL %d.%d (1.30 or later "
+                                        "in %s (1.30 or later "
                                         "required)\n",
-                                        state->language_version / 100,
-                                        state->language_version % 100);
+                                        state->version_string);
 
                     (yyval.n) = ast_precision_high;
                  ;}
     break;
 
-  case 222:
+  case 233:
 
-/* Line 1455 of yacc.c  */
-#line 1306 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1408 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
                                         "precision qualifier forbidden "
-                                        "in GLSL %d.%d (1.30 or later "
+                                        "in %s (1.30 or later "
                                         "required)\n",
-                                        state->language_version / 100,
-                                        state->language_version % 100);
+                                        state->version_string);
 
                     (yyval.n) = ast_precision_medium;
                  ;}
     break;
 
-  case 223:
+  case 234:
 
-/* Line 1455 of yacc.c  */
-#line 1317 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1418 "glsl_parser.ypp"
     {
                     if (!state->es_shader && state->language_version < 130)
                        _mesa_glsl_error(& (yylsp[(1) - (1)]), state,
                                         "precision qualifier forbidden "
-                                        "in GLSL %d.%d (1.30 or later "
+                                        "in %s (1.30 or later "
                                         "required)\n",
-                                        state->language_version / 100,
-                                        state->language_version % 100);
+                                        state->version_string);
 
                     (yyval.n) = ast_precision_low;
                  ;}
     break;
 
-  case 224:
+  case 235:
 
-/* Line 1455 of yacc.c  */
-#line 1332 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1432 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].node));
           (yyval.struct_specifier)->set_location(yylloc);
+          state->symbols->add_type((yyvsp[(2) - (5)].identifier), glsl_type::void_type);
        ;}
     break;
 
-  case 225:
+  case 236:
 
-/* Line 1455 of yacc.c  */
-#line 1338 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1439 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].node));
@@ -4686,30 +4808,30 @@ yyreduce:
        ;}
     break;
 
-  case 226:
+  case 237:
 
-/* Line 1455 of yacc.c  */
-#line 1347 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1448 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].declarator_list);
           (yyvsp[(1) - (1)].declarator_list)->link.self_link();
        ;}
     break;
 
-  case 227:
+  case 238:
 
-/* Line 1455 of yacc.c  */
-#line 1352 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1453 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (2)].node);
           (yyval.node)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link);
        ;}
     break;
 
-  case 228:
+  case 239:
 
-/* Line 1455 of yacc.c  */
-#line 1360 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1461 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
@@ -4723,41 +4845,42 @@ yyreduce:
        ;}
     break;
 
-  case 229:
+  case 240:
 
-/* Line 1455 of yacc.c  */
-#line 1375 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1476 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (1)].declaration);
           (yyvsp[(1) - (1)].declaration)->link.self_link();
        ;}
     break;
 
-  case 230:
+  case 241:
 
-/* Line 1455 of yacc.c  */
-#line 1380 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1481 "glsl_parser.ypp"
     {
           (yyval.declaration) = (yyvsp[(1) - (3)].declaration);
           (yyval.declaration)->link.insert_before(& (yyvsp[(3) - (3)].declaration)->link);
        ;}
     break;
 
-  case 231:
+  case 242:
 
-/* Line 1455 of yacc.c  */
-#line 1388 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1489 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (1)].identifier), false, NULL, NULL);
           (yyval.declaration)->set_location(yylloc);
+          state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[(1) - (1)].identifier), ir_var_auto));
        ;}
     break;
 
-  case 232:
+  case 243:
 
-/* Line 1455 of yacc.c  */
-#line 1394 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1496 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (4)].identifier), true, (yyvsp[(3) - (4)].expression), NULL);
@@ -4765,31 +4888,31 @@ yyreduce:
        ;}
     break;
 
-  case 235:
+  case 246:
 
-/* Line 1455 of yacc.c  */
-#line 1412 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1514 "glsl_parser.ypp"
     { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
-  case 240:
+  case 251:
 
-/* Line 1455 of yacc.c  */
-#line 1420 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1522 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
-  case 241:
+  case 252:
 
-/* Line 1455 of yacc.c  */
-#line 1421 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1523 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
-  case 244:
+  case 255:
 
-/* Line 1455 of yacc.c  */
-#line 1428 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1530 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL);
@@ -4797,28 +4920,38 @@ yyreduce:
        ;}
     break;
 
-  case 245:
+  case 256:
+
+/* Line 1464 of yacc.c  */
+#line 1536 "glsl_parser.ypp"
+    {
+          state->symbols->push_scope();
+       ;}
+    break;
+
+  case 257:
 
-/* Line 1455 of yacc.c  */
-#line 1434 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1540 "glsl_parser.ypp"
     {
           void *ctx = state;
-          (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(2) - (3)].node));
+          (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(3) - (4)].node));
           (yyval.compound_statement)->set_location(yylloc);
+          state->symbols->pop_scope();
        ;}
     break;
 
-  case 246:
+  case 258:
 
-/* Line 1455 of yacc.c  */
-#line 1442 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1549 "glsl_parser.ypp"
     { (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
     break;
 
-  case 248:
+  case 260:
 
-/* Line 1455 of yacc.c  */
-#line 1448 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1555 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL);
@@ -4826,10 +4959,10 @@ yyreduce:
        ;}
     break;
 
-  case 249:
+  case 261:
 
-/* Line 1455 of yacc.c  */
-#line 1454 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1561 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[(2) - (3)].node));
@@ -4837,10 +4970,10 @@ yyreduce:
        ;}
     break;
 
-  case 250:
+  case 262:
 
-/* Line 1455 of yacc.c  */
-#line 1463 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1570 "glsl_parser.ypp"
     {
           if ((yyvsp[(1) - (1)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(1) - (1)]), state, "<nil> statement\n");
@@ -4852,10 +4985,10 @@ yyreduce:
        ;}
     break;
 
-  case 251:
+  case 263:
 
-/* Line 1455 of yacc.c  */
-#line 1473 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1580 "glsl_parser.ypp"
     {
           if ((yyvsp[(2) - (2)].node) == NULL) {
              _mesa_glsl_error(& (yylsp[(2) - (2)]), state, "<nil> statement\n");
@@ -4866,10 +4999,10 @@ yyreduce:
        ;}
     break;
 
-  case 252:
+  case 264:
 
-/* Line 1455 of yacc.c  */
-#line 1485 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1592 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement(NULL);
@@ -4877,10 +5010,10 @@ yyreduce:
        ;}
     break;
 
-  case 253:
+  case 265:
 
-/* Line 1455 of yacc.c  */
-#line 1491 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1598 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_expression_statement((yyvsp[(1) - (2)].expression));
@@ -4888,10 +5021,10 @@ yyreduce:
        ;}
     break;
 
-  case 254:
+  case 266:
 
-/* Line 1455 of yacc.c  */
-#line 1500 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1607 "glsl_parser.ypp"
     {
           (yyval.node) = new(state) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].selection_rest_statement).then_statement,
                                                   (yyvsp[(5) - (5)].selection_rest_statement).else_statement);
@@ -4899,39 +5032,39 @@ yyreduce:
        ;}
     break;
 
-  case 255:
+  case 267:
 
-/* Line 1455 of yacc.c  */
-#line 1509 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1616 "glsl_parser.ypp"
     {
           (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (3)].node);
           (yyval.selection_rest_statement).else_statement = (yyvsp[(3) - (3)].node);
        ;}
     break;
 
-  case 256:
+  case 268:
 
-/* Line 1455 of yacc.c  */
-#line 1514 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1621 "glsl_parser.ypp"
     {
           (yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (1)].node);
           (yyval.selection_rest_statement).else_statement = NULL;
        ;}
     break;
 
-  case 257:
+  case 269:
 
-/* Line 1455 of yacc.c  */
-#line 1522 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1629 "glsl_parser.ypp"
     {
           (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].expression);
        ;}
     break;
 
-  case 258:
+  case 270:
 
-/* Line 1455 of yacc.c  */
-#line 1526 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1633 "glsl_parser.ypp"
     {
           void *ctx = state;
           ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -4944,10 +5077,10 @@ yyreduce:
        ;}
     break;
 
-  case 262:
+  case 274:
 
-/* Line 1455 of yacc.c  */
-#line 1549 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1656 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while,
@@ -4956,10 +5089,10 @@ yyreduce:
        ;}
     break;
 
-  case 263:
+  case 275:
 
-/* Line 1455 of yacc.c  */
-#line 1556 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1663 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while,
@@ -4968,10 +5101,10 @@ yyreduce:
        ;}
     break;
 
-  case 264:
+  case 276:
 
-/* Line 1455 of yacc.c  */
-#line 1563 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1670 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for,
@@ -4980,39 +5113,39 @@ yyreduce:
        ;}
     break;
 
-  case 268:
+  case 280:
 
-/* Line 1455 of yacc.c  */
-#line 1579 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1686 "glsl_parser.ypp"
     {
           (yyval.node) = NULL;
        ;}
     break;
 
-  case 269:
+  case 281:
 
-/* Line 1455 of yacc.c  */
-#line 1586 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1693 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (2)].node);
           (yyval.for_rest_statement).rest = NULL;
        ;}
     break;
 
-  case 270:
+  case 282:
 
-/* Line 1455 of yacc.c  */
-#line 1591 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1698 "glsl_parser.ypp"
     {
           (yyval.for_rest_statement).cond = (yyvsp[(1) - (3)].node);
           (yyval.for_rest_statement).rest = (yyvsp[(3) - (3)].expression);
        ;}
     break;
 
-  case 271:
+  case 283:
 
-/* Line 1455 of yacc.c  */
-#line 1600 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1707 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL);
@@ -5020,10 +5153,10 @@ yyreduce:
        ;}
     break;
 
-  case 272:
+  case 284:
 
-/* Line 1455 of yacc.c  */
-#line 1606 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1713 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL);
@@ -5031,10 +5164,10 @@ yyreduce:
        ;}
     break;
 
-  case 273:
+  case 285:
 
-/* Line 1455 of yacc.c  */
-#line 1612 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1719 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL);
@@ -5042,10 +5175,10 @@ yyreduce:
        ;}
     break;
 
-  case 274:
+  case 286:
 
-/* Line 1455 of yacc.c  */
-#line 1618 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1725 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[(2) - (3)].expression));
@@ -5053,10 +5186,10 @@ yyreduce:
        ;}
     break;
 
-  case 275:
+  case 287:
 
-/* Line 1455 of yacc.c  */
-#line 1624 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1731 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL);
@@ -5064,44 +5197,46 @@ yyreduce:
        ;}
     break;
 
-  case 276:
+  case 288:
 
-/* Line 1455 of yacc.c  */
-#line 1632 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1739 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].function_definition); ;}
     break;
 
-  case 277:
+  case 289:
 
-/* Line 1455 of yacc.c  */
-#line 1633 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1740 "glsl_parser.ypp"
     { (yyval.node) = (yyvsp[(1) - (1)].node); ;}
     break;
 
-  case 278:
+  case 290:
 
-/* Line 1455 of yacc.c  */
-#line 1634 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1741 "glsl_parser.ypp"
     { (yyval.node) = NULL; ;}
     break;
 
-  case 279:
+  case 291:
 
-/* Line 1455 of yacc.c  */
-#line 1639 "glsl_parser.ypp"
+/* Line 1464 of yacc.c  */
+#line 1746 "glsl_parser.ypp"
     {
           void *ctx = state;
           (yyval.function_definition) = new(ctx) ast_function_definition();
           (yyval.function_definition)->set_location(yylloc);
           (yyval.function_definition)->prototype = (yyvsp[(1) - (2)].function);
           (yyval.function_definition)->body = (yyvsp[(2) - (2)].compound_statement);
+
+          state->symbols->pop_scope();
        ;}
     break;
 
 
 
-/* Line 1455 of yacc.c  */
-#line 5105 "glsl_parser.cpp"
+/* Line 1464 of yacc.c  */
+#line 5240 "glsl_parser.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5173,7 +5308,7 @@ yyerrlab:
 #endif
     }
 
-  yyerror_range[0] = yylloc;
+  yyerror_range[1] = yylloc;
 
   if (yyerrstatus == 3)
     {
@@ -5210,7 +5345,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  yyerror_range[0] = yylsp[1-yylen];
+  yyerror_range[1] = yylsp[1-yylen];
   /* Do not reclaim the symbols of the rule which action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
@@ -5244,7 +5379,7 @@ yyerrlab1:
       if (yyssp == yyss)
        YYABORT;
 
-      yyerror_range[0] = *yylsp;
+      yyerror_range[1] = *yylsp;
       yydestruct ("Error: popping",
                  yystos[yystate], yyvsp, yylsp, state);
       YYPOPSTACK (1);
@@ -5254,10 +5389,10 @@ yyerrlab1:
 
   *++yyvsp = yylval;
 
-  yyerror_range[1] = yylloc;
+  yyerror_range[2] = yylloc;
   /* Using YYLLOC is tempting, but would change the location of
      the lookahead.  YYLOC is available though.  */
-  YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
   *++yylsp = yyloc;
 
   /* Shift the error token.  */