Add compiler support for shared memory

The patch adds handling of the 'shared' qualifier in the shader
compiler.

BUG=angleproject:1442

TEST=angle_unittests

Change-Id: Iaa288026af0faf2a30e40495faa6ea1f5ff02323
Reviewed-on: https://chromium-review.googlesource.com/413200
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/BaseTypes.h b/src/compiler/translator/BaseTypes.h
index 4334047..cfc336f 100644
--- a/src/compiler/translator/BaseTypes.h
+++ b/src/compiler/translator/BaseTypes.h
@@ -504,6 +504,7 @@
     EvqCentroidIn,  // Implies smooth
 
     // GLSL ES 3.1 compute shader special variables
+    EvqShared,
     EvqComputeIn,
     EvqNumWorkGroups,
     EvqWorkGroupSize,
@@ -707,6 +708,7 @@
     case EvqCentroid:               return "centroid";
     case EvqFlat:                   return "flat";
     case EvqSmooth:                 return "smooth";
+    case EvqShared:                 return "shared";
     case EvqComputeIn:              return "in";
     case EvqNumWorkGroups:          return "NumWorkGroups";
     case EvqWorkGroupSize:          return "WorkGroupSize";
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 0b9da36..bb0affd 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -1099,6 +1099,21 @@
     return true;
 }
 
+void TParseContext::emptyDeclarationErrorCheck(const TPublicType &publicType,
+                                               const TSourceLoc &location)
+{
+    if (publicType.isUnsizedArray())
+    {
+        // ESSL3 spec section 4.1.9: Array declaration which leaves the size unspecified is an
+        // error. It is assumed that this applies to empty declarations as well.
+        error(location, "empty array declaration needs to specify a size", "");
+    }
+    if (publicType.qualifier == EvqShared && !publicType.layoutQualifier.isEmpty())
+    {
+        error(location, "Shared memory declarations cannot have layout specified", "layout");
+    }
+}
+
 // These checks are common for all declarations starting a declarator list, and declarators that
 // follow an empty declaration.
 void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
@@ -1900,13 +1915,7 @@
 
     if (emptyDeclaration)
     {
-        if (publicType.isUnsizedArray())
-        {
-            // ESSL3 spec section 4.1.9: Array declaration which leaves the size unspecified is an
-            // error. It is assumed that this applies to empty declarations as well.
-            error(identifierOrTypeLocation, "empty array declaration needs to specify a size",
-                  identifier.c_str());
-        }
+        emptyDeclarationErrorCheck(publicType, identifierOrTypeLocation);
     }
     else
     {
diff --git a/src/compiler/translator/ParseContext.h b/src/compiler/translator/ParseContext.h
index e6c8901..6159fd2 100644
--- a/src/compiler/translator/ParseContext.h
+++ b/src/compiler/translator/ParseContext.h
@@ -145,6 +145,7 @@
     bool checkCanUseExtension(const TSourceLoc &line, const TString &extension);
     void singleDeclarationErrorCheck(const TPublicType &publicType,
                                      const TSourceLoc &identifierLocation);
+    void emptyDeclarationErrorCheck(const TPublicType &publicType, const TSourceLoc &location);
     void checkLayoutQualifierSupported(const TSourceLoc &location,
                                        const TString &layoutQualifierName,
                                        int versionRequired);
diff --git a/src/compiler/translator/glslang.l b/src/compiler/translator/glslang.l
index a30f2c3..92267ce 100644
--- a/src/compiler/translator/glslang.l
+++ b/src/compiler/translator/glslang.l
@@ -78,6 +78,7 @@
 static int ES2_ident_ES3_keyword(TParseContext *context, int token);
 static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
+static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
 static int uint_constant(TParseContext *context);
 static int int_constant(TParseContext *context);
 static int float_constant(yyscan_t yyscanner);
@@ -131,6 +132,7 @@
 "in"           { return IN_QUAL; }
 "out"          { return OUT_QUAL; }
 "inout"        { return INOUT_QUAL; }
+"shared"       { return ES2_and_ES3_ident_ES3_1_keyword(context, SHARED); }
 
 "float"        { return FLOAT_TYPE; }
 "int"          { return INT_TYPE; }
@@ -516,6 +518,21 @@
     return token;
 }
 
+int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // not a reserved word in GLSL ES 1.00 and GLSL ES 3.00, so could be used as an identifier/type name
+    if (context->getShaderVersion() < 310)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return token;
+}
+
 int uint_constant(TParseContext *context)
 {
     struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
diff --git a/src/compiler/translator/glslang.y b/src/compiler/translator/glslang.y
index c15dd9d..c9c96cf 100644
--- a/src/compiler/translator/glslang.y
+++ b/src/compiler/translator/glslang.y
@@ -169,7 +169,7 @@
 %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
 %token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
 %token <lex> CENTROID FLAT SMOOTH
-%token <lex> READONLY WRITEONLY COHERENT RESTRICT VOLATILE
+%token <lex> READONLY WRITEONLY COHERENT RESTRICT VOLATILE SHARED
 %token <lex> STRUCT VOID_TYPE WHILE
 %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY
 %token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
@@ -959,6 +959,11 @@
     | VOLATILE {
         $$ = new TMemoryQualifierWrapper(EvqVolatile, @1);
     }
+    | SHARED {
+        context->checkIsAtGlobalLevel(@1, "shared");
+        COMPUTE_ONLY("shared", @1);
+        $$ = new TStorageQualifierWrapper(EvqShared, @1);
+    }
     ;
 
 type_specifier
@@ -1006,6 +1011,9 @@
     | IDENTIFIER EQUAL UINTCONSTANT {
         $$ = context->parseLayoutQualifier(*$1.string, @1, $3.i, @3);
     }
+    | SHARED {
+        $$ = context->parseLayoutQualifier("shared", @1);
+    }
     ;
 
 type_specifier_no_prec
diff --git a/src/compiler/translator/glslang_lex.cpp b/src/compiler/translator/glslang_lex.cpp
index ef9d59c..2e22c08 100644
--- a/src/compiler/translator/glslang_lex.cpp
+++ b/src/compiler/translator/glslang_lex.cpp
@@ -401,8 +401,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 240
-#define YY_END_OF_BUFFER 241
+#define YY_NUM_RULES 241
+#define YY_END_OF_BUFFER 242
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -410,98 +410,99 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[820] =
+static yyconst flex_int16_t yy_accept[824] =
     {   0,
-        0,    0,    0,    0,  241,  239,  238,  238,  222,  228,
-      233,  217,  218,  226,  225,  214,  223,  221,  227,  180,
-      180,  215,  211,  229,  216,  230,  234,  177,  219,  220,
-      232,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  212,  231,  213,  224,  237,  236,  240,  235,  208,
-      194,  213,  202,  197,  192,  200,  190,  201,  191,  186,
-      193,  185,  179,  180,    0,  183,    0,  220,  212,  219,
-      209,  205,  207,  206,  210,  177,  198,  204,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+        0,    0,    0,    0,  242,  240,  239,  239,  223,  229,
+      234,  218,  219,  227,  226,  215,  224,  222,  228,  181,
+      181,  216,  212,  230,  217,  231,  235,  178,  220,  221,
+      233,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  213,  232,  214,  225,  238,  237,  241,  236,  209,
+      195,  214,  203,  198,  193,  201,  191,  202,  192,  187,
+      194,  186,  180,  181,    0,  184,    0,  221,  213,  220,
+      210,  206,  208,  207,  211,  178,  199,  205,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
 
-       12,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,   15,  177,  177,   23,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  199,  203,  235,    0,  189,  185,    0,  188,  182,
-        0,  184,  178,  195,  196,  177,  137,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-       13,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+       12,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,   15,  178,  178,   23,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  200,  204,  236,    0,  190,  186,    0,  189,  183,
+        0,  185,  179,  196,  197,  178,  138,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+       13,  178,  178,  178,  178,  178,  178,  178,  178,  178,
 
-      177,   27,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,   24,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,    0,  186,
-        0,  185,  187,  181,  177,  177,  177,   30,  177,  177,
-       18,  174,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,   16,  140,  177,  177,  177,  177,   21,  177,
-      177,  144,  155,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  152,    4,   35,   36,   37,
+      178,   28,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,   24,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,    0,
+      187,    0,  186,  188,  182,  178,  178,  178,   31,  178,
+      178,   18,  175,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,   16,  141,  178,  178,  178,  178,   21,
+      178,  178,  145,  156,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  153,    4,   36,   37,
 
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  143,   31,  177,  177,   28,  177,
-      177,  177,  177,  177,  177,  177,   47,   48,   49,   29,
-      177,  177,  177,  177,  177,  177,   10,   53,   54,   55,
-      177,  138,  177,  177,    7,  177,  177,  177,  177,  164,
-      165,  166,  177,   32,  177,  156,   26,  167,  168,  169,
-        2,  161,  162,  163,  177,  177,  177,   25,  159,  177,
-      177,  177,   50,   51,   52,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,   99,  177,  177,  177,
+       38,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  144,   32,  178,  178,
+       29,  178,  178,  178,  178,  178,  178,  178,   48,   49,
+       50,   30,  178,  178,  178,  178,  178,  178,   10,   54,
+       55,   56,  178,  139,  178,  178,    7,  178,  178,  178,
+      178,  165,  166,  167,  178,   33,  178,  157,   27,  168,
+      169,  170,    2,  162,  163,  164,  178,  178,  178,   25,
+      160,  178,  178,  178,   51,   52,   53,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  100,  178,
 
-      177,  177,  177,  177,  153,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  139,  177,  177,  176,
-       56,   57,   58,  177,  177,   14,  177,  104,  177,  177,
-      177,  177,  102,  177,  177,  177,  154,  149,  105,  177,
-      177,  177,  177,  177,  177,  145,  177,  177,  177,   78,
-       38,   41,   43,   42,   39,   45,   44,   46,   40,  177,
-      177,  177,  177,  160,  136,  177,  177,  147,  177,  177,
-      177,   34,  100,  173,   22,  148,   77,  177,  158,   17,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,   19,   33,  177,  177,  177,  177,
+      178,  178,  178,  178,  178,  178,  178,  154,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  140,
+      178,  178,  177,   57,   58,   59,  178,  178,   14,  178,
+      105,  178,  178,  178,  178,  103,  178,  178,  178,  155,
+      150,  106,  178,  178,  178,  178,  178,  178,  146,  178,
+      178,  178,   79,   39,   42,   44,   43,   40,   46,   45,
+       47,   41,  178,  178,  178,  178,  161,  137,  178,  178,
+      148,  178,  178,  178,   35,  101,   26,  174,   22,  149,
+       78,  178,  159,   17,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,   19,   34,
 
-      177,  177,  106,   79,   85,  177,  177,  177,  177,  177,
-        3,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  141,  177,  177,  177,  177,  177,    8,  177,
-      177,    9,  177,  177,  177,  177,   20,   93,   11,  150,
-      107,   80,   87,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  146,  177,  177,  177,   91,
-       96,   94,  177,  177,  177,  177,  177,  177,  177,  142,
-      108,   81,   86,  177,  177,  157,  177,   95,  177,  177,
-        6,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-       90,  151,    1,  177,  177,  177,  177,  177,  175,  177,
+      178,  178,  178,  178,  178,  178,  107,   80,   86,  178,
+      178,  178,  178,  178,    3,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  142,  178,  178,  178,
+      178,  178,    8,  178,  178,    9,  178,  178,  178,  178,
+       20,   94,   11,  151,  108,   81,   88,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  147,
+      178,  178,  178,   92,   97,   95,  178,  178,  178,  178,
+      178,  178,  178,  143,  109,   82,   87,  178,  178,  158,
+      178,   96,  178,  178,    6,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,   91,  152,    1,  178,  178,  178,
 
-      103,    5,  170,   59,   62,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  177,   92,  177,
-      177,  177,  177,   88,  177,  177,  177,  177,  177,  121,
-       66,   67,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  101,  177,  177,  177,   89,
-      123,   70,   71,  177,  177,   97,  177,  177,  177,  177,
-      177,  177,  177,  116,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  130,  177,  177,  177,  177,   60,
-      177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  117,  109,  177,   82,  177,  177,  177,  131,
+      178,  178,  176,  178,  104,    5,  171,   60,   63,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,   93,  178,  178,  178,  178,   89,  178,  178,
+      178,  178,  178,  122,   67,   68,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  102,
+      178,  178,  178,   90,  124,   71,   72,  178,  178,   98,
+      178,  178,  178,  178,  178,  178,  178,  117,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  131,  178,
+      178,  178,  178,   61,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  118,  110,  178,   83,
 
-      177,  177,   68,  177,  177,  177,  177,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  118,  177,  177,  132,
-      177,  177,   72,  110,   83,  177,  112,  177,  113,  177,
-      177,  177,  177,  177,   98,  177,  177,  177,  177,   64,
-      177,   63,  127,  177,  177,  111,   84,  177,  177,  177,
-      177,  177,  177,  177,  177,  177,  177,  125,  128,  119,
-      177,   65,  177,  177,  177,  177,  177,  177,  177,  177,
-      126,  129,  177,  177,  122,   69,  177,  177,  171,  177,
-      177,  177,   74,  177,  177,  124,   73,  177,  177,  177,
-      177,  177,  177,  133,  177,  177,  177,  177,  177,  177,
+      178,  178,  178,  132,  178,  178,   69,  178,  178,  178,
+      178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      119,  178,  178,  133,  178,  178,   73,  111,   84,  178,
+      113,  178,  114,  178,  178,  178,  178,  178,   99,  178,
+      178,  178,  178,   65,  178,   64,  128,  178,  178,  112,
+       85,  178,  178,  178,  178,  178,  178,  178,  178,  178,
+      178,  126,  129,  120,  178,   66,  178,  178,  178,  178,
+      178,  178,  178,  178,  127,  130,  178,  178,  123,   70,
+      178,  178,  172,  178,  178,  178,   75,  178,  178,  125,
+       74,  178,  178,  178,  178,  178,  178,  134,  178,  178,
 
-      134,  177,  177,  177,   75,  177,  135,  114,  115,  177,
-      177,  177,   61,  177,  177,  172,  120,   76,    0
+      178,  178,  178,  178,  135,  178,  178,  178,   76,  178,
+      136,  115,  116,  178,  178,  178,   62,  178,  178,  173,
+      121,   77,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -548,197 +549,197 @@
         1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[825] =
+static yyconst flex_int16_t yy_base[829] =
     {   0,
-        0,    0,   72,    0, 1016, 1017, 1017, 1017,  990,  120,
-      141, 1017, 1017,  989,  138, 1017,  137,  135,  988,  154,
-      208,  986, 1017,  154,  986,  132, 1017,    0, 1017, 1017,
-      139,  130,  123,  140,  147,  133,  177,  952,  186,  151,
-      139,  116,  161,  946,  173,  959,  193,  199,  208,  215,
-      108, 1017,  184, 1017, 1017, 1017, 1017, 1017,    0, 1017,
-     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,  230,
-     1017,  235,  235,    0,  271, 1017,    0, 1017, 1017, 1017,
-      982, 1017, 1017, 1017,  981,    0, 1017, 1017,  943,  948,
-      152,  945,  953,  952,  939,  942,  953,  243,  947,  935,
+        0,    0,   72,    0, 1020, 1021, 1021, 1021,  994,  120,
+      141, 1021, 1021,  993,  138, 1021,  137,  135,  992,  154,
+      208,  990, 1021,  154,  990,  132, 1021,    0, 1021, 1021,
+      139,  130,  123,  140,  147,  133,  177,  956,  186,  151,
+      139,  116,  161,  950,  173,  963,  193,  199,  208,  215,
+      108, 1021,  184, 1021, 1021, 1021, 1021, 1021,    0, 1021,
+     1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021,  230,
+     1021,  235,  235,    0,  271, 1021,    0, 1021, 1021, 1021,
+      986, 1021, 1021, 1021,  985,    0, 1021, 1021,  947,  952,
+      152,  949,  957,  956,  943,  946,  957,  243,  951,  939,
 
-      932,  945,  932,  929,  929,  935,  147,  248,  929,  939,
-      925,  931,  934,  935,    0,  927,  937,  249,  936,  931,
-      912,  177,  916,  929,  920,  184,  913,  250,  925,  927,
-      257,  916,  913,  902,  911,  249,  257,  915,  911,  913,
-      902,  905,  196,  217,  269,  914,  902,  914,  262,  907,
-      906, 1017, 1017,    0,  311, 1017,  292,  328, 1017, 1017,
-      335,  342,  257, 1017, 1017,  905,    0,  901,  896,  900,
-      909,  906,  315,  890,  890,  901,  893,  215,  903,  900,
-      900,  898,  895,  887,  893,  880,  878,  890,  876,  892,
-        0,  889,  877,  884,  881,  885,  886,  879,  876,  865,
+      936,  949,  936,  933,  933,  939,  147,  248,  933,  943,
+      929,  935,  938,  939,    0,  931,  941,  249,  940,  935,
+      916,  177,  920,  933,  924,  184,  917,  250,  929,  931,
+      257,  920,  251,  907,  916,  260,  257,  920,  916,  918,
+      907,  910,  196,  217,  269,  919,  907,  919,  262,  912,
+      911, 1021, 1021,    0,  311, 1021,  292,  328, 1021, 1021,
+      335,  342,  325, 1021, 1021,  910,    0,  906,  901,  905,
+      914,  911,  316,  895,  895,  906,  898,  215,  908,  905,
+      905,  903,  900,  892,  898,  885,  883,  895,  881,  897,
+        0,  894,  882,  889,  886,  890,  891,  884,  881,  870,
 
-      864,  877,  880,  868,  876,  864,  870,  861,  316,  866,
-      869,  860,  867,  856,  860,  851,  865,  864,  855,  861,
-      307,  845,  848,  846,  856,  846,  841,  839,  841,  851,
-      837,  839,  836,  847,  846,  849,  831,  316,  839,  835,
-      833,  842,  821,  353,  839,  841,  830,  822,  363,  370,
-      378,  389, 1017, 1017,  819,  829,  828,    0,  826,  383,
-        0,    0,  819,  817,  817,  818,  813,  821,  810,  827,
-      816,  394,    0,    0,  810,  820,  819,  819,    0,  804,
-      397,    0,    0,  806,  400,  813,  814,  805,  799,  798,
-      799,  798,  798,  406,  793,    0,    0,  789,  788,  787,
+      869,  882,  885,  873,  881,  869,  875,  866,  316,  871,
+      874,  865,  872,  861,  865,  856,  870,  869,  860,  866,
+      308,  850,  853,  851,  850,  860,  850,  845,  843,  845,
+      855,  841,  843,  840,  851,  850,  853,  835,  318,  843,
+      839,  837,  846,  825,  354,  843,  845,  834,  826,  364,
+      378,  385,  397, 1021, 1021,  823,  833,  832,    0,  830,
+      372,    0,    0,  823,  821,  821,  822,  817,  825,  814,
+      831,  820,  390,    0,    0,  814,  824,  823,  823,    0,
+      808,  402,    0,    0,  810,  405,  817,  818,  809,  803,
+      802,  803,  802,  802,  408,  797,    0,    0,  793,  792,
 
-      789,  790,  795,  789,  785,  798,  793,  793,  791,  790,
-      784,  778,  780,  779,  783,  775,  778,  773,  781,  786,
-      774,  771,  783,  774,    0,    0,  780,  776,    0,  768,
-      768,  773,  764,  771,  409,  768,    0,    0,    0,    0,
-      758,  770,  769,  768,  769,  769,    0,    0,    0,    0,
-      756,    0,  764,  755,    0,  754,  755,  749,  759,    0,
-        0,    0,  750,    0,  746,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  756,  413,  755,    0,    0,  753,
-      749,  746,    0,    0,    0,  738,  415,  418,  427,  743,
-      739,  744,  735,  733,  746,  731,    0,  731,  744,  733,
+      791,  793,  794,  799,  793,  789,  802,  797,  797,  795,
+      794,  788,  782,  784,  783,  787,  792,  778,  781,  776,
+      784,  789,  777,  774,  786,  777,    0,    0,  783,  779,
+        0,  771,  771,  776,  767,  774,  414,  771,    0,    0,
+        0,    0,  761,  773,  772,  771,  772,  772,    0,    0,
+        0,    0,  759,    0,  767,  758,    0,  757,  758,  752,
+      762,    0,    0,    0,  753,    0,  749,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  759,  419,  758,    0,
+        0,  756,  752,  749,    0,    0,    0,  741,  421,  424,
+      427,  746,  742,  747,  738,  736,  749,  734,    0,  734,
 
-      729,  735,  730,  737,    0,  735,  732,  736,  720,  718,
-      721,  727,  733,  728,  727,  715,    0,  717,  718,    0,
-        0,    0,    0,  715,  718,    0,  712,    0,  725,  705,
-      714,  709,    0,  702,  702,  715,    0,  717,    0,  431,
-      730,  729,  728,  695,  694,    0,  711,  710,  705,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  694,
-      707,  694,  691,    0,    0,  696,  695,    0,  692,  699,
-      698,    0,  684,    0,    0,    0,    0,  681,    0,    0,
-      680,  691,  434,  684,  690,  689,  686,  681,  678,  671,
-      671,  684,  669,  681,    0,    0,  674,  697,  696,  695,
+      747,  736,  732,  738,  733,  740,  740,    0,  737,  734,
+      738,  722,  720,  723,  729,  735,  730,  729,  717,    0,
+      719,  720,    0,    0,    0,    0,  717,  720,    0,  714,
+        0,  727,  707,  716,  711,    0,  704,  704,  717,    0,
+      719,    0,  434,  732,  731,  730,  697,  696,    0,  713,
+      712,  707,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  696,  709,  696,  693,    0,    0,  698,  697,
+        0,  694,  701,  700,    0,  686,    0,    0,    0,    0,
+        0,  683,    0,    0,  682,  693,  437,  686,  692,  691,
+      688,  683,  680,  673,  673,  686,  671,  683,    0,    0,
 
-      662,  661,  427,  428,    0,  673,  676,  674,  663,  659,
-        0,  671,  668,  667,  657,  656,  646,  663,  649,  441,
-      657,  660,    0,  677,  676,  675,  642,  641,    0,  655,
-      642,    0,  652,  645,  646,  649,    0,    0,    0,    0,
-      669,  668,    0,  645,  648,  633,  640,  631,  638,  639,
-      639,  638,  624,  451,  636,    0,  637,  626,  625,    0,
-        0,    0,  650,  649,  648,  615,  614,  610,  618,    0,
-      646,  645,    0,  622,  625,    0,  458,    0,  603,  612,
-        0,  608,  607,  616,  616,  604,  618,  602,  616,  611,
-        0,    0,    0,  628,  627,  626,  593,  592,    0,  592,
+      676,  699,  698,  697,  664,  663,  339,  430,    0,  675,
+      678,  676,  665,  661,    0,  673,  670,  669,  659,  658,
+      648,  665,  651,  443,  659,  662,    0,  679,  678,  677,
+      644,  643,    0,  657,  644,    0,  654,  647,  648,  651,
+        0,    0,    0,    0,  671,  670,    0,  647,  650,  635,
+      642,  633,  640,  641,  641,  640,  626,  453,  638,    0,
+      639,  628,  627,    0,    0,    0,  652,  651,  650,  617,
+      616,  612,  620,    0,  648,  647,    0,  624,  627,    0,
+      460,    0,  605,  614,    0,  610,  609,  618,  618,  606,
+      620,  604,  618,  613,    0,    0,    0,  630,  629,  628,
 
-        0,    0,  434,  454,  616,  602,  605,  588,  600,  588,
-      587,  596,  596,  613,  612,  611,  578,  577,    0,  577,
-      578,  577,  587,    0,  590,  586,  588,  584,  571,  602,
-      449,    0,  579,  582,  574,  566,  573,  564,  585,  573,
-      569,  571,  569,  569,  568,    0,  556,  555,  565,    0,
-      585,  462,    0,  562,  565,    0,  565,  564,  548,  540,
-      548,  538,  546,    0,  543,  542,  563,  551,  549,  549,
-      533,  536,  550,  534,  565,  545,  546,  543,  540,  550,
-      527,  541,  540,  524,  523,  522,  543,  531,  529,  529,
-      510,  509,    0,  537,  509,  535,  507,  511,  510,  541,
+      595,  594,    0,  594,    0,    0,  446,  457,  618,  604,
+      607,  590,  602,  590,  589,  598,  598,  615,  614,  613,
+      580,  579,    0,  579,  580,  579,  589,    0,  592,  588,
+      590,  586,  573,  604,  451,    0,  581,  584,  576,  568,
+      575,  566,  587,  575,  571,  573,  571,  571,  570,    0,
+      558,  557,  567,    0,  587,  463,    0,  564,  567,    0,
+      567,  566,  550,  542,  550,  540,  548,    0,  545,  544,
+      565,  553,  551,  551,  535,  538,  552,  536,  567,  547,
+      548,  545,  542,  552,  529,  543,  542,  526,  525,  524,
+      545,  533,  531,  531,  512,  511,    0,  539,  511,  537,
 
-      521,  518,    0,  517,  520,  516,  518,  502,  499,  512,
-      497,  498,  505,  499,  488,  487,    0,  493,  492,  523,
-      503,  500,    0,    0,    0,  496,    0,  495,    0,  501,
-      500,  484,  481,  482,    0,  474,  482,  472,  478,  499,
-      478,    0,    0,  490,  489,    0,    0,  488,  487,  471,
-      468,  469,  483,  482,  459,  458,  464,    0,    0,  485,
-      457,  483,  475,  467,  453,  132,  161,  177,  215,  245,
-        0,    0,  288,  289,    0,    0,  294,  315,    0,  316,
-      306,  331,    0,  363,  402,    0,    0,  395,  383,  395,
-      387,  433,  434,    0,  435,  420,  461,  427,  430,  431,
+      509,  513,  512,  543,  523,  520,    0,  519,  522,  518,
+      520,  504,  501,  514,  499,  500,  507,  501,  490,  489,
+        0,  495,  494,  525,  505,  502,    0,    0,    0,  498,
+        0,  497,    0,  503,  502,  486,  483,  484,    0,  476,
+      484,  474,  480,  501,  480,    0,    0,  492,  491,    0,
+        0,  490,  489,  473,  470,  471,  485,  484,  461,  460,
+      466,    0,    0,  487,  459,  485,  477,  128,  151,  196,
+      227,  227,  269,  277,    0,    0,  291,  321,    0,    0,
+      329,  334,    0,  335,  343,  384,    0,  376,  420,    0,
+        0,  412,  404,  407,  413,  436,  442,    0,  445,  431,
 
-        0,  450,  452,  443,    0,  464,    0,    0,    0,  445,
-      446,  440,    0,  441,  442,    0,    0,    0, 1017,  506,
-      509,  512,  513,  514
+      465,  432,  436,  437,    0,  455,  456,  447,    0,  468,
+        0,    0,    0,  449,  450,  444,    0,  445,  446,    0,
+        0,    0, 1021,  510,  513,  516,  517,  518
     } ;
 
-static yyconst flex_int16_t yy_def[825] =
+static yyconst flex_int16_t yy_def[829] =
     {   0,
-      819,    1,  819,    3,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  820,  819,  819,
-      819,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  819,  819,  819,  819,  819,  819,  819,  821,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  822,
-      819,  823,   20,   21,  819,  819,  824,  819,  819,  819,
-      819,  819,  819,  819,  819,  820,  819,  819,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      823,    1,  823,    3,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  824,  823,  823,
+      823,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  823,  823,  823,  823,  823,  823,  823,  825,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  826,
+      823,  827,   20,   21,  823,  823,  828,  823,  823,  823,
+      823,  823,  823,  823,  823,  824,  823,  823,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  819,  819,  821,  819,  819,  823,  819,  819,  819,
-      819,  819,  824,  819,  819,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  823,  823,  825,  823,  823,  827,  823,  823,  823,
+      823,  823,  828,  823,  823,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  819,  819,
-      819,  819,  819,  819,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  823,
+      823,  823,  823,  823,  823,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
 
-      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
-      820,  820,  820,  820,  820,  820,  820,  820,    0,  819,
-      819,  819,  819,  819
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,    0,  823,  823,  823,  823,  823
     } ;
 
-static yyconst flex_int16_t yy_nxt[1090] =
+static yyconst flex_int16_t yy_nxt[1094] =
     {   0,
         6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
        16,   17,   18,   19,   20,   21,   21,   21,   21,   21,
@@ -758,110 +759,112 @@
        56,   56,   56,   56,   61,   62,   63,   66,   68,   70,
        70,   70,   70,   70,   70,   70,   84,   85,   79,  150,
       123,   69,   67,   87,  124,   64,   72,  151,   73,   73,
-       73,   73,   73,   73,   74,   80,   89,   81,   82,  784,
+       73,   73,   73,   73,   74,   80,   89,   81,   82,  786,
        92,   88,   93,  121,   95,   75,   94,  103,   96,  104,
        90,   91,   76,   77,   97,   99,  122,   98,  105,  100,
 
       115,  187,   75,  116,  101,  125,  117,  118,  152,  168,
-      102,  119,  188,  169,  120,  785,   76,  128,  126,   77,
+      102,  119,  188,  169,  120,  787,   76,  128,  126,   77,
        72,  106,   74,   74,   74,   74,   74,   74,   74,  107,
       112,  108,  129,  207,  109,  130,  212,  132,  113,   75,
-      110,  208,  213,  786,  133,  134,   76,  139,  135,  114,
-      140,  236,  237,  153,  136,  137,   75,  138,  141,  147,
-      143,  155,  156,  148,  144,  142,  158,  159,  145,  238,
-       76,  146,  149,  160,  819,  267,  268,  239,  155,  156,
-      161,  787,  161,  158,  159,  162,  162,  162,  162,  162,
-      162,  162,  189,  227,  176,  254,  215,  160,  177,  178,
+      110,  208,  213,  788,  133,  134,   76,  139,  135,  114,
+      140,  237,  238,  153,  136,  137,   75,  138,  141,  147,
+      143,  155,  156,  148,  144,  142,  158,  159,  145,  239,
+       76,  146,  149,  160,  823,  268,  269,  240,  155,  156,
+      161,  789,  161,  158,  159,  162,  162,  162,  162,  162,
+      162,  162,  189,  790,  176,  224,  215,  160,  177,  178,
 
-      819,  220,  229,  199,  788,  190,  200,  201,  228,  216,
-      202,  217,  203,  240,  245,  230,  246,  221,  222,  254,
-      249,  241,  249,  158,  159,  250,  250,  250,  250,  250,
-      250,  250,  298,  299,  300,  789,  790,  251,  791,  251,
-      158,  159,  252,  252,  252,  252,  252,  252,  252,  162,
+      823,  220,  230,  199,  228,  190,  200,  201,  225,  216,
+      202,  217,  203,  241,  246,  231,  247,  221,  222,  229,
+      250,  242,  250,  158,  159,  251,  251,  251,  251,  251,
+      251,  251,  299,  300,  301,  791,  792,  252,  793,  252,
+      158,  159,  253,  253,  253,  253,  253,  253,  253,  162,
       162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
-      162,  162,  162,  261,  312,  330,  792,  793,  313,  337,
-      338,  339,  794,  331,  253,  795,  262,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  253,  252,  252,  252,  252,  252,  252,  252,  348,
+      162,  162,  162,  255,  262,  313,  550,  332,  794,  314,
+      339,  340,  341,  795,  254,  333,  551,  263,  251,  251,
+      251,  251,  251,  251,  251,  796,  797,  255,  350,  351,
+      352,  254,  251,  251,  251,  251,  251,  251,  251,  253,
 
-      349,  350,  156,  252,  252,  252,  252,  252,  252,  252,
-      360,  361,  362,  368,  369,  370,  372,  373,  374,  156,
-      796,  159,  383,  384,  385,  421,  422,  423,  441,  442,
-      443,  451,  452,  453,  454,  455,  456,  797,  159,  798,
-      799,  444,  445,  457,  458,  459,  498,  499,  500,  524,
-      525,  526,  800,  801,  546,  548,  563,  564,  565,  501,
-      502,  636,  527,  528,  547,  549,  594,  595,  596,  566,
-      567,  637,  568,  614,  615,  616,  666,  802,  803,  597,
-      598,  638,  804,  667,  805,  668,  617,  618,  639,  686,
-      640,  641,  806,  807,  808,  809,  687,  810,  688,  811,
+      253,  253,  253,  253,  253,  253,  362,  363,  364,  798,
+      156,  253,  253,  253,  253,  253,  253,  253,  370,  371,
+      372,  374,  375,  376,  385,  386,  387,  156,  799,  159,
+      424,  425,  426,  800,  444,  445,  446,  454,  455,  456,
+      457,  458,  459,  460,  461,  462,  159,  447,  448,  502,
+      503,  504,  528,  529,  530,  801,  802,  552,  567,  568,
+      569,  803,  505,  506,  804,  531,  532,  553,  598,  599,
+      600,  570,  571,  640,  572,  618,  619,  620,  670,  805,
+      806,  601,  602,  641,  642,  671,  807,  672,  621,  622,
+      690,  643,  808,  644,  645,  809,  810,  691,  811,  692,
 
-      812,  813,  814,  815,  816,  817,  818,   86,   86,   86,
-      154,  154,  154,   70,  157,  163,  163,  783,  782,  781,
-      780,  779,  778,  777,  776,  775,  774,  773,  772,  771,
-      770,  769,  768,  767,  766,  765,  764,  763,  762,  761,
-      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
-      750,  749,  748,  747,  746,  745,  744,  743,  742,  741,
-      740,  739,  738,  737,  736,  735,  734,  733,  732,  731,
-      730,  729,  728,  727,  726,  725,  724,  723,  722,  721,
-      720,  719,  718,  717,  716,  715,  714,  713,  712,  711,
-      710,  709,  708,  707,  706,  705,  704,  703,  702,  701,
+      812,  813,  814,  815,  816,  817,  818,  819,  820,  821,
+      822,   86,   86,   86,  154,  154,  154,   70,  157,  163,
+      163,  785,  784,  783,  782,  781,  780,  779,  778,  777,
+      776,  775,  774,  773,  772,  771,  770,  769,  768,  767,
+      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
+      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
+      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
+      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
+      726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
+      716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
 
-      700,  699,  698,  697,  696,  695,  694,  693,  692,  691,
-      690,  689,  685,  684,  683,  682,  681,  680,  679,  678,
-      677,  676,  675,  674,  673,  672,  671,  670,  669,  665,
-      664,  663,  662,  661,  660,  659,  658,  657,  656,  655,
-      654,  653,  652,  651,  650,  649,  648,  647,  646,  645,
-      644,  643,  642,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  602,  601,  600,  599,  593,  592,  591,  590,  589,
-      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
+      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
+      696,  695,  694,  693,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      673,  669,  668,  667,  666,  665,  664,  663,  662,  661,
+      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  648,  647,  646,  639,  638,  637,  636,  635,
+      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
+      624,  623,  617,  616,  615,  614,  613,  612,  611,  610,
+      609,  608,  607,  606,  605,  604,  603,  597,  596,  595,
+      594,  593,  592,  591,  590,  589,  588,  587,  586,  585,
 
-      578,  577,  576,  575,  574,  573,  572,  571,  570,  569,
-      562,  561,  560,  559,  558,  557,  556,  555,  554,  553,
-      552,  551,  550,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
-      523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
-      513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
-      503,  497,  496,  495,  494,  493,  492,  491,  490,  489,
-      488,  487,  486,  485,  484,  483,  482,  481,  480,  479,
-      478,  477,  476,  475,  474,  473,  472,  471,  470,  469,
-      468,  467,  466,  465,  464,  463,  462,  461,  460,  450,
+      584,  583,  582,  581,  580,  579,  578,  577,  576,  575,
+      574,  573,  566,  565,  564,  563,  562,  561,  560,  559,
+      558,  557,  556,  555,  554,  549,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
+      534,  533,  527,  526,  525,  524,  523,  522,  521,  520,
+      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  501,  500,  499,  498,  497,  496,  495,
+      494,  493,  492,  491,  490,  489,  488,  487,  486,  485,
+      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
+      474,  473,  472,  471,  470,  469,  468,  467,  466,  465,
 
-      449,  448,  447,  446,  440,  439,  438,  437,  436,  435,
-      434,  433,  432,  431,  430,  429,  428,  427,  426,  425,
-      424,  420,  419,  418,  417,  416,  415,  414,  413,  412,
-      411,  410,  409,  408,  407,  406,  405,  404,  403,  402,
-      401,  400,  399,  398,  397,  396,  395,  394,  393,  392,
-      391,  390,  389,  388,  387,  386,  382,  381,  380,  379,
-      378,  377,  376,  375,  371,  367,  366,  365,  364,  363,
-      359,  358,  357,  356,  355,  354,  353,  352,  351,  347,
-      346,  345,  344,  343,  342,  341,  340,  336,  335,  334,
-      333,  332,  329,  328,  327,  326,  325,  324,  323,  322,
+      464,  463,  453,  452,  451,  450,  449,  443,  442,  441,
+      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
+      430,  429,  428,  427,  423,  422,  421,  420,  419,  418,
+      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
+      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
+      397,  396,  395,  394,  393,  392,  391,  390,  389,  388,
+      384,  383,  382,  381,  380,  379,  378,  377,  373,  369,
+      368,  367,  366,  365,  361,  360,  359,  358,  357,  356,
+      355,  354,  353,  349,  348,  347,  346,  345,  344,  343,
+      342,  338,  337,  336,  335,  334,  331,  330,  329,  328,
 
-      321,  320,  319,  318,  317,  316,  315,  314,  311,  310,
-      309,  308,  307,  306,  305,  304,  303,  302,  301,  297,
-      296,  295,  294,  293,  292,  291,  290,  289,  288,  287,
-      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
-      276,  275,  274,  273,  272,  271,  270,  269,  266,  265,
-      264,  263,  260,  259,  258,  257,  256,  255,  248,  247,
-      244,  243,  242,  235,  234,  233,  232,  231,  226,  225,
-      224,  223,  219,  218,  214,  211,  210,  209,  206,  205,
-      204,  198,  197,  196,  195,  194,  193,  192,  191,  186,
-      185,  184,  183,  182,  181,  180,  179,  175,  174,  173,
+      327,  326,  325,  324,  323,  322,  321,  320,  319,  318,
+      317,  316,  315,  312,  311,  310,  309,  308,  307,  306,
+      305,  304,  303,  302,  298,  297,  296,  295,  294,  293,
+      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
+      282,  281,  280,  279,  278,  277,  276,  275,  274,  273,
+      272,  271,  270,  267,  266,  265,  264,  261,  260,  259,
+      258,  257,  256,  249,  248,  245,  244,  243,  236,  235,
+      234,  233,  232,  227,  226,  223,  219,  218,  214,  211,
+      210,  209,  206,  205,  204,  198,  197,  196,  195,  194,
+      193,  192,  191,  186,  185,  184,  183,  182,  181,  180,
 
-      172,  171,  170,  167,  166,  165,  164,  131,  127,  111,
-       83,   78,   71,   65,   60,  819,    5,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819
+      179,  175,  174,  173,  172,  171,  170,  167,  166,  165,
+      164,  131,  127,  111,   83,   78,   71,   65,   60,  823,
+        5,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823
+
     } ;
 
-static yyconst flex_int16_t yy_chk[1090] =
+static yyconst flex_int16_t yy_chk[1094] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -881,111 +884,113 @@
         3,    3,    3,    3,   10,   10,   11,   15,   17,   18,
        18,   18,   18,   18,   18,   18,   26,   26,   24,   51,
        42,   17,   15,   31,   42,   11,   20,   51,   20,   20,
-       20,   20,   20,   20,   20,   24,   32,   24,   24,  766,
+       20,   20,   20,   20,   20,   24,   32,   24,   24,  768,
        33,   31,   33,   41,   34,   20,   33,   36,   34,   36,
        32,   32,   20,   20,   34,   35,   41,   34,   36,   35,
 
        40,  107,   20,   40,   35,   43,   40,   40,   53,   91,
-       35,   40,  107,   91,   40,  767,   20,   45,   43,   20,
+       35,   40,  107,   91,   40,  769,   20,   45,   43,   20,
        21,   37,   21,   21,   21,   21,   21,   21,   21,   37,
        39,   37,   45,  122,   37,   45,  126,   47,   39,   21,
-       37,  122,  126,  768,   47,   47,   21,   48,   47,   39,
+       37,  122,  126,  770,   47,   47,   21,   48,   47,   39,
        48,  143,  143,   53,   47,   47,   21,   47,   48,   50,
        49,   70,   70,   50,   49,   48,   72,   72,   49,  144,
        21,   49,   50,   73,   73,  178,  178,  144,   70,   70,
-       75,  769,   75,   72,   72,   75,   75,   75,   75,   75,
-       75,   75,  108,  136,   98,  163,  128,   73,   98,   98,
+       75,  771,   75,   72,   72,   75,   75,   75,   75,   75,
+       75,   75,  108,  772,   98,  133,  128,   73,   98,   98,
 
-       73,  131,  137,  118,  770,  108,  118,  118,  136,  128,
-      118,  128,  118,  145,  149,  137,  149,  131,  131,  163,
+       73,  131,  137,  118,  136,  108,  118,  118,  133,  128,
+      118,  128,  118,  145,  149,  137,  149,  131,  131,  136,
       155,  145,  155,  157,  157,  155,  155,  155,  155,  155,
       155,  155,  209,  209,  209,  773,  774,  158,  777,  158,
       157,  157,  158,  158,  158,  158,  158,  158,  158,  161,
       161,  161,  161,  161,  161,  161,  162,  162,  162,  162,
-      162,  162,  162,  173,  221,  238,  778,  780,  221,  244,
-      244,  244,  781,  238,  162,  782,  173,  249,  249,  249,
-      249,  249,  249,  249,  250,  250,  250,  250,  250,  250,
-      250,  162,  251,  251,  251,  251,  251,  251,  251,  260,
+      162,  162,  162,  163,  173,  221,  507,  239,  778,  221,
+      245,  245,  245,  781,  162,  239,  507,  173,  250,  250,
+      250,  250,  250,  250,  250,  782,  784,  163,  261,  261,
+      261,  162,  251,  251,  251,  251,  251,  251,  251,  252,
 
-      260,  260,  250,  252,  252,  252,  252,  252,  252,  252,
-      272,  272,  272,  281,  281,  281,  285,  285,  285,  250,
-      784,  252,  294,  294,  294,  335,  335,  335,  376,  376,
-      376,  387,  387,  387,  388,  388,  388,  785,  252,  788,
-      789,  376,  376,  389,  389,  389,  440,  440,  440,  483,
-      483,  483,  790,  791,  503,  504,  520,  520,  520,  440,
-      440,  603,  483,  483,  503,  504,  554,  554,  554,  520,
-      520,  603,  520,  577,  577,  577,  631,  792,  793,  554,
-      554,  604,  795,  631,  796,  631,  577,  577,  604,  652,
-      604,  604,  797,  798,  799,  800,  652,  802,  652,  803,
+      252,  252,  252,  252,  252,  252,  273,  273,  273,  785,
+      251,  253,  253,  253,  253,  253,  253,  253,  282,  282,
+      282,  286,  286,  286,  295,  295,  295,  251,  786,  253,
+      337,  337,  337,  788,  378,  378,  378,  389,  389,  389,
+      390,  390,  390,  391,  391,  391,  253,  378,  378,  443,
+      443,  443,  487,  487,  487,  789,  792,  508,  524,  524,
+      524,  793,  443,  443,  794,  487,  487,  508,  558,  558,
+      558,  524,  524,  607,  524,  581,  581,  581,  635,  795,
+      796,  558,  558,  607,  608,  635,  797,  635,  581,  581,
+      656,  608,  799,  608,  608,  800,  801,  656,  802,  656,
 
-      804,  806,  810,  811,  812,  814,  815,  820,  820,  820,
-      821,  821,  821,  822,  823,  824,  824,  765,  764,  763,
-      762,  761,  760,  757,  756,  755,  754,  753,  752,  751,
-      750,  749,  748,  745,  744,  741,  740,  739,  738,  737,
-      736,  734,  733,  732,  731,  730,  728,  726,  722,  721,
-      720,  719,  718,  716,  715,  714,  713,  712,  711,  710,
-      709,  708,  707,  706,  705,  704,  702,  701,  700,  699,
-      698,  697,  696,  695,  694,  692,  691,  690,  689,  688,
-      687,  686,  685,  684,  683,  682,  681,  680,  679,  678,
-      677,  676,  675,  674,  673,  672,  671,  670,  669,  668,
+      803,  804,  806,  807,  808,  810,  814,  815,  816,  818,
+      819,  824,  824,  824,  825,  825,  825,  826,  827,  828,
+      828,  767,  766,  765,  764,  761,  760,  759,  758,  757,
+      756,  755,  754,  753,  752,  749,  748,  745,  744,  743,
+      742,  741,  740,  738,  737,  736,  735,  734,  732,  730,
+      726,  725,  724,  723,  722,  720,  719,  718,  717,  716,
+      715,  714,  713,  712,  711,  710,  709,  708,  706,  705,
+      704,  703,  702,  701,  700,  699,  698,  696,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
 
-      667,  666,  665,  663,  662,  661,  660,  659,  658,  657,
-      655,  654,  651,  649,  648,  647,  645,  644,  643,  642,
-      641,  640,  639,  638,  637,  636,  635,  634,  633,  630,
-      629,  628,  627,  626,  625,  623,  622,  621,  620,  618,
-      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
-      607,  606,  605,  600,  598,  597,  596,  595,  594,  590,
-      589,  588,  587,  586,  585,  584,  583,  582,  580,  579,
-      575,  574,  572,  571,  569,  568,  567,  566,  565,  564,
-      563,  559,  558,  557,  555,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  544,  542,  541,  536,  535,  534,
+      673,  672,  671,  670,  669,  667,  666,  665,  664,  663,
+      662,  661,  659,  658,  655,  653,  652,  651,  649,  648,
+      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
+      637,  634,  633,  632,  631,  630,  629,  627,  626,  625,
+      624,  622,  621,  620,  619,  618,  617,  616,  615,  614,
+      613,  612,  611,  610,  609,  604,  602,  601,  600,  599,
+      598,  594,  593,  592,  591,  590,  589,  588,  587,  586,
+      584,  583,  579,  578,  576,  575,  573,  572,  571,  570,
+      569,  568,  567,  563,  562,  561,  559,  557,  556,  555,
+      554,  553,  552,  551,  550,  549,  548,  546,  545,  540,
 
-      533,  531,  530,  528,  527,  526,  525,  524,  522,  521,
-      519,  518,  517,  516,  515,  514,  513,  512,  510,  509,
-      508,  507,  506,  502,  501,  500,  499,  498,  497,  494,
-      493,  492,  491,  490,  489,  488,  487,  486,  485,  484,
-      482,  481,  478,  473,  471,  470,  469,  467,  466,  463,
-      462,  461,  460,  449,  448,  447,  445,  444,  443,  442,
-      441,  438,  436,  435,  434,  432,  431,  430,  429,  427,
-      425,  424,  419,  418,  416,  415,  414,  413,  412,  411,
-      410,  409,  408,  407,  406,  404,  403,  402,  401,  400,
-      399,  398,  396,  395,  394,  393,  392,  391,  390,  386,
+      539,  538,  537,  535,  534,  532,  531,  530,  529,  528,
+      526,  525,  523,  522,  521,  520,  519,  518,  517,  516,
+      514,  513,  512,  511,  510,  506,  505,  504,  503,  502,
+      501,  498,  497,  496,  495,  494,  493,  492,  491,  490,
+      489,  488,  486,  485,  482,  476,  474,  473,  472,  470,
+      469,  466,  465,  464,  463,  452,  451,  450,  448,  447,
+      446,  445,  444,  441,  439,  438,  437,  435,  434,  433,
+      432,  430,  428,  427,  422,  421,  419,  418,  417,  416,
+      415,  414,  413,  412,  411,  410,  409,  407,  406,  405,
+      404,  403,  402,  401,  400,  398,  397,  396,  395,  394,
 
-      382,  381,  380,  377,  375,  365,  363,  359,  358,  357,
-      356,  354,  353,  351,  346,  345,  344,  343,  342,  341,
-      336,  334,  333,  332,  331,  330,  328,  327,  324,  323,
-      322,  321,  320,  319,  318,  317,  316,  315,  314,  313,
-      312,  311,  310,  309,  308,  307,  306,  305,  304,  303,
-      302,  301,  300,  299,  298,  295,  293,  292,  291,  290,
-      289,  288,  287,  286,  284,  280,  278,  277,  276,  275,
-      271,  270,  269,  268,  267,  266,  265,  264,  263,  259,
-      257,  256,  255,  248,  247,  246,  245,  243,  242,  241,
-      240,  239,  237,  236,  235,  234,  233,  232,  231,  230,
+      393,  392,  388,  384,  383,  382,  379,  377,  367,  365,
+      361,  360,  359,  358,  356,  355,  353,  348,  347,  346,
+      345,  344,  343,  338,  336,  335,  334,  333,  332,  330,
+      329,  326,  325,  324,  323,  322,  321,  320,  319,  318,
+      317,  316,  315,  314,  313,  312,  311,  310,  309,  308,
+      307,  306,  305,  304,  303,  302,  301,  300,  299,  296,
+      294,  293,  292,  291,  290,  289,  288,  287,  285,  281,
+      279,  278,  277,  276,  272,  271,  270,  269,  268,  267,
+      266,  265,  264,  260,  258,  257,  256,  249,  248,  247,
+      246,  244,  243,  242,  241,  240,  238,  237,  236,  235,
 
-      229,  228,  227,  226,  225,  224,  223,  222,  220,  219,
-      218,  217,  216,  215,  214,  213,  212,  211,  210,  208,
-      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
-      197,  196,  195,  194,  193,  192,  190,  189,  188,  187,
-      186,  185,  184,  183,  182,  181,  180,  179,  177,  176,
-      175,  174,  172,  171,  170,  169,  168,  166,  151,  150,
-      148,  147,  146,  142,  141,  140,  139,  138,  135,  134,
-      133,  132,  130,  129,  127,  125,  124,  123,  121,  120,
-      119,  117,  116,  114,  113,  112,  111,  110,  109,  106,
-      105,  104,  103,  102,  101,  100,   99,   97,   96,   95,
+      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
+      224,  223,  222,  220,  219,  218,  217,  216,  215,  214,
+      213,  212,  211,  210,  208,  207,  206,  205,  204,  203,
+      202,  201,  200,  199,  198,  197,  196,  195,  194,  193,
+      192,  190,  189,  188,  187,  186,  185,  184,  183,  182,
+      181,  180,  179,  177,  176,  175,  174,  172,  171,  170,
+      169,  168,  166,  151,  150,  148,  147,  146,  142,  141,
+      140,  139,  138,  135,  134,  132,  130,  129,  127,  125,
+      124,  123,  121,  120,  119,  117,  116,  114,  113,  112,
+      111,  110,  109,  106,  105,  104,  103,  102,  101,  100,
 
-       94,   93,   92,   90,   89,   85,   81,   46,   44,   38,
-       25,   22,   19,   14,    9,    5,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
-      819,  819,  819,  819,  819,  819,  819,  819,  819
+       99,   97,   96,   95,   94,   93,   92,   90,   89,   85,
+       81,   46,   44,   38,   25,   22,   19,   14,    9,    5,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
+      823,  823,  823
+
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[241] =
+static yyconst flex_int32_t yy_rule_can_match_eol[242] =
     {   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, 
@@ -998,8 +1003,8 @@
     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, 0, 0, 1, 0, 
-    0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+    0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1060,6 +1065,7 @@
 static int ES2_ident_ES3_keyword(TParseContext *context, int token);
 static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
 static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
+static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
 static int uint_constant(TParseContext *context);
 static int int_constant(TParseContext *context);
 static int float_constant(yyscan_t yyscanner);
@@ -1356,13 +1362,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 820 )
+				if ( yy_current_state >= 824 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 819 );
+		while ( yy_current_state != 823 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1496,286 +1502,289 @@
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-{ return FLOAT_TYPE; }
+{ return ES2_and_ES3_ident_ES3_1_keyword(context, SHARED); }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-{ return INT_TYPE; }
+{ return FLOAT_TYPE; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, UINT_TYPE); }
+{ return INT_TYPE; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-{ return VOID_TYPE; }
+{ return ES2_ident_ES3_keyword(context, UINT_TYPE); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-{ return BOOL_TYPE; }
+{ return VOID_TYPE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-{ yylval->lex.b = true;  return BOOLCONSTANT; }
+{ return BOOL_TYPE; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-{ yylval->lex.b = false; return BOOLCONSTANT; }
+{ yylval->lex.b = true;  return BOOLCONSTANT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-{ return DISCARD; }
+{ yylval->lex.b = false; return BOOLCONSTANT; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-{ return RETURN; }
+{ return DISCARD; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-{ return MATRIX2; }
+{ return RETURN; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-{ return MATRIX3; }
+{ return MATRIX2; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-{ return MATRIX4; }
+{ return MATRIX3; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX2); }
+{ return MATRIX4; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX3); }
+{ return ES2_ident_ES3_keyword(context, MATRIX2); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX4); }
+{ return ES2_ident_ES3_keyword(context, MATRIX3); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX2x3); }
+{ return ES2_ident_ES3_keyword(context, MATRIX4); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX3x2); }
+{ return ES2_ident_ES3_keyword(context, MATRIX2x3); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX2x4); }
+{ return ES2_ident_ES3_keyword(context, MATRIX3x2); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX4x2); }
+{ return ES2_ident_ES3_keyword(context, MATRIX2x4); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX3x4); }
+{ return ES2_ident_ES3_keyword(context, MATRIX4x2); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, MATRIX4x3); }
+{ return ES2_ident_ES3_keyword(context, MATRIX3x4); }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-{ return VEC2; }
+{ return ES2_ident_ES3_keyword(context, MATRIX4x3); }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-{ return VEC3; }
+{ return VEC2; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-{ return VEC4; }
+{ return VEC3; }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-{ return IVEC2; }
+{ return VEC4; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-{ return IVEC3; }
+{ return IVEC2; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-{ return IVEC4; }
+{ return IVEC3; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-{ return BVEC2; }
+{ return IVEC4; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-{ return BVEC3; }
+{ return BVEC2; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-{ return BVEC4; }
+{ return BVEC3; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, UVEC2); }
+{ return BVEC4; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, UVEC3); }
+{ return ES2_ident_ES3_keyword(context, UVEC2); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, UVEC4); }
+{ return ES2_ident_ES3_keyword(context, UVEC3); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-{ return SAMPLER2D; }
+{ return ES2_ident_ES3_keyword(context, UVEC4); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-{ return SAMPLERCUBE; }
+{ return SAMPLER2D; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-{ return SAMPLER_EXTERNAL_OES; }
+{ return SAMPLERCUBE; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
+{ return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-{ return SAMPLER2DRECT; }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
+{ return SAMPLER2DRECT; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
+{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER2D); }
+{ return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER3D); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER2D); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER3D); }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
+{ return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+{ return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
+{ return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-{ return STRUCT; }
+{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_keyword(context, LAYOUT); }
+{ return STRUCT; }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
+{ return ES2_ident_ES3_keyword(context, LAYOUT); }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
+{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
 { return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
 	YY_BREAK
 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
-case 96:
 case 97:
 case 98:
 case 99:
@@ -1815,6 +1824,7 @@
 case 133:
 case 134:
 case 135:
+case 136:
 YY_RULE_SETUP
 { 
     if (context->getShaderVersion() < 300) {
@@ -1825,7 +1835,7 @@
 }
 	YY_BREAK
 /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
-case 136:
+case 137:
 YY_RULE_SETUP
 {
     if (context->getShaderVersion() >= 300)
@@ -1838,7 +1848,6 @@
 }
 	YY_BREAK
 /* Reserved keywords */
-case 137:
 case 138:
 case 139:
 case 140:
@@ -1878,20 +1887,17 @@
 case 174:
 case 175:
 case 176:
+case 177:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 177:
+case 178:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 178:
-YY_RULE_SETUP
-{ return int_constant(context); }
-	YY_BREAK
 case 179:
 YY_RULE_SETUP
 { return int_constant(context); }
@@ -1902,7 +1908,7 @@
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-{ return uint_constant(context); }
+{ return int_constant(context); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
@@ -1914,7 +1920,7 @@
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{ return float_constant(yyscanner); }
+{ return uint_constant(context); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
@@ -1926,7 +1932,7 @@
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{ return floatsuffix_check(context); }
+{ return float_constant(yyscanner); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
@@ -1938,205 +1944,209 @@
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{ return ADD_ASSIGN; }
+{ return floatsuffix_check(context); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{ return SUB_ASSIGN; }
+{ return ADD_ASSIGN; }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{ return MUL_ASSIGN; }
+{ return SUB_ASSIGN; }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{ return DIV_ASSIGN; }
+{ return MUL_ASSIGN; }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{ return MOD_ASSIGN; }
+{ return DIV_ASSIGN; }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{ return LEFT_ASSIGN; }
+{ return MOD_ASSIGN; }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{ return RIGHT_ASSIGN; }
+{ return LEFT_ASSIGN; }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{ return AND_ASSIGN; }
+{ return RIGHT_ASSIGN; }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{ return XOR_ASSIGN; }
+{ return AND_ASSIGN; }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ return OR_ASSIGN; }
+{ return XOR_ASSIGN; }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ return INC_OP; }
+{ return OR_ASSIGN; }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ return DEC_OP; }
+{ return INC_OP; }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ return AND_OP; }
+{ return DEC_OP; }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ return OR_OP; }
+{ return AND_OP; }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return XOR_OP; }
+{ return OR_OP; }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ return LE_OP; }
+{ return XOR_OP; }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ return GE_OP; }
+{ return LE_OP; }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return EQ_OP; }
+{ return GE_OP; }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return NE_OP; }
+{ return EQ_OP; }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ return LEFT_OP; }
+{ return NE_OP; }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return RIGHT_OP; }
+{ return LEFT_OP; }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return SEMICOLON; }
+{ return RIGHT_OP; }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ return LEFT_BRACE; }
+{ return SEMICOLON; }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return RIGHT_BRACE; }
+{ return LEFT_BRACE; }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return COMMA; }
+{ return RIGHT_BRACE; }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return COLON; }
+{ return COMMA; }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return EQUAL; }
+{ return COLON; }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ return LEFT_PAREN; }
+{ return EQUAL; }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return RIGHT_PAREN; }
+{ return LEFT_PAREN; }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ return LEFT_BRACKET; }
+{ return RIGHT_PAREN; }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
-{ return RIGHT_BRACKET; }
+{ return LEFT_BRACKET; }
 	YY_BREAK
 case 221:
 YY_RULE_SETUP
-{ BEGIN(FIELDS); return DOT; }
+{ return RIGHT_BRACKET; }
 	YY_BREAK
 case 222:
 YY_RULE_SETUP
-{ return BANG; }
+{ BEGIN(FIELDS); return DOT; }
 	YY_BREAK
 case 223:
 YY_RULE_SETUP
-{ return DASH; }
+{ return BANG; }
 	YY_BREAK
 case 224:
 YY_RULE_SETUP
-{ return TILDE; }
+{ return DASH; }
 	YY_BREAK
 case 225:
 YY_RULE_SETUP
-{ return PLUS; }
+{ return TILDE; }
 	YY_BREAK
 case 226:
 YY_RULE_SETUP
-{ return STAR; }
+{ return PLUS; }
 	YY_BREAK
 case 227:
 YY_RULE_SETUP
-{ return SLASH; }
+{ return STAR; }
 	YY_BREAK
 case 228:
 YY_RULE_SETUP
-{ return PERCENT; }
+{ return SLASH; }
 	YY_BREAK
 case 229:
 YY_RULE_SETUP
-{ return LEFT_ANGLE; }
+{ return PERCENT; }
 	YY_BREAK
 case 230:
 YY_RULE_SETUP
-{ return RIGHT_ANGLE; }
+{ return LEFT_ANGLE; }
 	YY_BREAK
 case 231:
 YY_RULE_SETUP
-{ return VERTICAL_BAR; }
+{ return RIGHT_ANGLE; }
 	YY_BREAK
 case 232:
 YY_RULE_SETUP
-{ return CARET; }
+{ return VERTICAL_BAR; }
 	YY_BREAK
 case 233:
 YY_RULE_SETUP
-{ return AMPERSAND; }
+{ return CARET; }
 	YY_BREAK
 case 234:
 YY_RULE_SETUP
-{ return QUESTION; }
+{ return AMPERSAND; }
 	YY_BREAK
 case 235:
 YY_RULE_SETUP
+{ return QUESTION; }
+	YY_BREAK
+case 236:
+YY_RULE_SETUP
 {
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext);
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 236:
+case 237:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 237:
+case 238:
 YY_RULE_SETUP
 {
     yyextra->error(*yylloc, "Illegal character at fieldname start", yytext, "");
     return 0;
 }
 	YY_BREAK
-case 238:
-/* rule 238 can match eol */
+case 239:
+/* rule 239 can match eol */
 YY_RULE_SETUP
 { }
 	YY_BREAK
@@ -2144,11 +2154,11 @@
 case YY_STATE_EOF(FIELDS):
 { yyterminate(); }
 	YY_BREAK
-case 239:
+case 240:
 YY_RULE_SETUP
 { assert(false); return 0; }
 	YY_BREAK
-case 240:
+case 241:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2447,7 +2457,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 820 )
+			if ( yy_current_state >= 824 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2476,11 +2486,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 820 )
+		if ( yy_current_state >= 824 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 819);
+	yy_is_jam = (yy_current_state == 823);
 
 	(void)yyg;
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3405,6 +3415,21 @@
     return token;
 }
 
+int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
+    yyscan_t yyscanner = (yyscan_t) context->getScanner();
+
+    // not a reserved word in GLSL ES 1.00 and GLSL ES 3.00, so could be used as an identifier/type name
+    if (context->getShaderVersion() < 310)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return token;
+}
+
 int uint_constant(TParseContext *context)
 {
     struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
index cd79c43..be7caf7 100644
--- a/src/compiler/translator/glslang_tab.cpp
+++ b/src/compiler/translator/glslang_tab.cpp
@@ -193,92 +193,93 @@
     COHERENT = 311,
     RESTRICT = 312,
     VOLATILE = 313,
-    STRUCT = 314,
-    VOID_TYPE = 315,
-    WHILE = 316,
-    SAMPLER2D = 317,
-    SAMPLERCUBE = 318,
-    SAMPLER_EXTERNAL_OES = 319,
-    SAMPLER2DRECT = 320,
-    SAMPLER2DARRAY = 321,
-    ISAMPLER2D = 322,
-    ISAMPLER3D = 323,
-    ISAMPLERCUBE = 324,
-    ISAMPLER2DARRAY = 325,
-    USAMPLER2D = 326,
-    USAMPLER3D = 327,
-    USAMPLERCUBE = 328,
-    USAMPLER2DARRAY = 329,
-    SAMPLER3D = 330,
-    SAMPLER3DRECT = 331,
-    SAMPLER2DSHADOW = 332,
-    SAMPLERCUBESHADOW = 333,
-    SAMPLER2DARRAYSHADOW = 334,
-    IMAGE2D = 335,
-    IIMAGE2D = 336,
-    UIMAGE2D = 337,
-    IMAGE3D = 338,
-    IIMAGE3D = 339,
-    UIMAGE3D = 340,
-    IMAGE2DARRAY = 341,
-    IIMAGE2DARRAY = 342,
-    UIMAGE2DARRAY = 343,
-    IMAGECUBE = 344,
-    IIMAGECUBE = 345,
-    UIMAGECUBE = 346,
-    LAYOUT = 347,
-    IDENTIFIER = 348,
-    TYPE_NAME = 349,
-    FLOATCONSTANT = 350,
-    INTCONSTANT = 351,
-    UINTCONSTANT = 352,
-    BOOLCONSTANT = 353,
-    FIELD_SELECTION = 354,
-    LEFT_OP = 355,
-    RIGHT_OP = 356,
-    INC_OP = 357,
-    DEC_OP = 358,
-    LE_OP = 359,
-    GE_OP = 360,
-    EQ_OP = 361,
-    NE_OP = 362,
-    AND_OP = 363,
-    OR_OP = 364,
-    XOR_OP = 365,
-    MUL_ASSIGN = 366,
-    DIV_ASSIGN = 367,
-    ADD_ASSIGN = 368,
-    MOD_ASSIGN = 369,
-    LEFT_ASSIGN = 370,
-    RIGHT_ASSIGN = 371,
-    AND_ASSIGN = 372,
-    XOR_ASSIGN = 373,
-    OR_ASSIGN = 374,
-    SUB_ASSIGN = 375,
-    LEFT_PAREN = 376,
-    RIGHT_PAREN = 377,
-    LEFT_BRACKET = 378,
-    RIGHT_BRACKET = 379,
-    LEFT_BRACE = 380,
-    RIGHT_BRACE = 381,
-    DOT = 382,
-    COMMA = 383,
-    COLON = 384,
-    EQUAL = 385,
-    SEMICOLON = 386,
-    BANG = 387,
-    DASH = 388,
-    TILDE = 389,
-    PLUS = 390,
-    STAR = 391,
-    SLASH = 392,
-    PERCENT = 393,
-    LEFT_ANGLE = 394,
-    RIGHT_ANGLE = 395,
-    VERTICAL_BAR = 396,
-    CARET = 397,
-    AMPERSAND = 398,
-    QUESTION = 399
+    SHARED = 314,
+    STRUCT = 315,
+    VOID_TYPE = 316,
+    WHILE = 317,
+    SAMPLER2D = 318,
+    SAMPLERCUBE = 319,
+    SAMPLER_EXTERNAL_OES = 320,
+    SAMPLER2DRECT = 321,
+    SAMPLER2DARRAY = 322,
+    ISAMPLER2D = 323,
+    ISAMPLER3D = 324,
+    ISAMPLERCUBE = 325,
+    ISAMPLER2DARRAY = 326,
+    USAMPLER2D = 327,
+    USAMPLER3D = 328,
+    USAMPLERCUBE = 329,
+    USAMPLER2DARRAY = 330,
+    SAMPLER3D = 331,
+    SAMPLER3DRECT = 332,
+    SAMPLER2DSHADOW = 333,
+    SAMPLERCUBESHADOW = 334,
+    SAMPLER2DARRAYSHADOW = 335,
+    IMAGE2D = 336,
+    IIMAGE2D = 337,
+    UIMAGE2D = 338,
+    IMAGE3D = 339,
+    IIMAGE3D = 340,
+    UIMAGE3D = 341,
+    IMAGE2DARRAY = 342,
+    IIMAGE2DARRAY = 343,
+    UIMAGE2DARRAY = 344,
+    IMAGECUBE = 345,
+    IIMAGECUBE = 346,
+    UIMAGECUBE = 347,
+    LAYOUT = 348,
+    IDENTIFIER = 349,
+    TYPE_NAME = 350,
+    FLOATCONSTANT = 351,
+    INTCONSTANT = 352,
+    UINTCONSTANT = 353,
+    BOOLCONSTANT = 354,
+    FIELD_SELECTION = 355,
+    LEFT_OP = 356,
+    RIGHT_OP = 357,
+    INC_OP = 358,
+    DEC_OP = 359,
+    LE_OP = 360,
+    GE_OP = 361,
+    EQ_OP = 362,
+    NE_OP = 363,
+    AND_OP = 364,
+    OR_OP = 365,
+    XOR_OP = 366,
+    MUL_ASSIGN = 367,
+    DIV_ASSIGN = 368,
+    ADD_ASSIGN = 369,
+    MOD_ASSIGN = 370,
+    LEFT_ASSIGN = 371,
+    RIGHT_ASSIGN = 372,
+    AND_ASSIGN = 373,
+    XOR_ASSIGN = 374,
+    OR_ASSIGN = 375,
+    SUB_ASSIGN = 376,
+    LEFT_PAREN = 377,
+    RIGHT_PAREN = 378,
+    LEFT_BRACKET = 379,
+    RIGHT_BRACKET = 380,
+    LEFT_BRACE = 381,
+    RIGHT_BRACE = 382,
+    DOT = 383,
+    COMMA = 384,
+    COLON = 385,
+    EQUAL = 386,
+    SEMICOLON = 387,
+    BANG = 388,
+    DASH = 389,
+    TILDE = 390,
+    PLUS = 391,
+    STAR = 392,
+    SLASH = 393,
+    PERCENT = 394,
+    LEFT_ANGLE = 395,
+    RIGHT_ANGLE = 396,
+    VERTICAL_BAR = 397,
+    CARET = 398,
+    AMPERSAND = 399,
+    QUESTION = 400
   };
 #endif
 
@@ -660,23 +661,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  126
+#define YYFINAL  127
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2825
+#define YYLAST   2847
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  145
+#define YYNTOKENS  146
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  94
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  286
+#define YYNRULES  288
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  422
+#define YYNSTATES  424
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   399
+#define YYMAXUTOK   400
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -724,7 +725,8 @@
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145
 };
 
 #if YYDEBUG
@@ -745,21 +747,21 @@
      763,   767,   771,   776,   781,   788,   792,   796,   800,   805,
      810,   817,   821,   827,   830,   836,   840,   847,   853,   857,
      861,   864,   867,   876,   882,   890,   893,   913,   932,   939,
-     943,   947,   950,   953,   956,   959,   965,   972,   975,   978,
-     984,   991,   994,  1000,  1003,  1006,  1012,  1015,  1020,  1031,
-    1034,  1037,  1040,  1043,  1046,  1050,  1054,  1058,  1062,  1066,
+     943,   947,   950,   953,   956,   959,   962,   970,   977,   980,
+     983,   989,   996,   999,  1005,  1008,  1011,  1014,  1020,  1023,
+    1028,  1039,  1042,  1045,  1048,  1051,  1054,  1058,  1062,  1066,
     1070,  1074,  1078,  1082,  1086,  1090,  1094,  1098,  1102,  1106,
-    1110,  1114,  1118,  1122,  1126,  1130,  1133,  1136,  1139,  1142,
-    1145,  1148,  1151,  1154,  1157,  1160,  1163,  1166,  1169,  1172,
-    1175,  1182,  1188,  1191,  1194,  1197,  1200,  1203,  1206,  1209,
-    1212,  1215,  1218,  1221,  1224,  1227,  1239,  1239,  1242,  1242,
-    1248,  1251,  1266,  1269,  1276,  1280,  1286,  1292,  1304,  1308,
-    1312,  1313,  1319,  1320,  1321,  1322,  1323,  1324,  1325,  1329,
-    1330,  1330,  1330,  1339,  1340,  1344,  1344,  1345,  1345,  1350,
-    1353,  1362,  1367,  1374,  1375,  1379,  1386,  1390,  1397,  1397,
-    1404,  1407,  1414,  1418,  1431,  1431,  1436,  1436,  1442,  1442,
-    1450,  1453,  1459,  1462,  1468,  1472,  1479,  1482,  1485,  1488,
-    1491,  1500,  1506,  1512,  1515,  1521,  1521
+    1110,  1114,  1118,  1122,  1126,  1130,  1134,  1138,  1141,  1144,
+    1147,  1150,  1153,  1156,  1159,  1162,  1165,  1168,  1171,  1174,
+    1177,  1180,  1183,  1190,  1196,  1199,  1202,  1205,  1208,  1211,
+    1214,  1217,  1220,  1223,  1226,  1229,  1232,  1235,  1247,  1247,
+    1250,  1250,  1256,  1259,  1274,  1277,  1284,  1288,  1294,  1300,
+    1312,  1316,  1320,  1321,  1327,  1328,  1329,  1330,  1331,  1332,
+    1333,  1337,  1338,  1338,  1338,  1347,  1348,  1352,  1352,  1353,
+    1353,  1358,  1361,  1370,  1375,  1382,  1383,  1387,  1394,  1398,
+    1405,  1405,  1412,  1415,  1422,  1426,  1439,  1439,  1444,  1444,
+    1450,  1450,  1458,  1461,  1467,  1470,  1476,  1480,  1487,  1490,
+    1493,  1496,  1499,  1508,  1514,  1520,  1523,  1529,  1529
 };
 #endif
 
@@ -777,8 +779,8 @@
   "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
   "VARYING", "MATRIX2x3", "MATRIX3x2", "MATRIX2x4", "MATRIX4x2",
   "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "READONLY",
-  "WRITEONLY", "COHERENT", "RESTRICT", "VOLATILE", "STRUCT", "VOID_TYPE",
-  "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
+  "WRITEONLY", "COHERENT", "RESTRICT", "VOLATILE", "SHARED", "STRUCT",
+  "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
   "SAMPLER2DRECT", "SAMPLER2DARRAY", "ISAMPLER2D", "ISAMPLER3D",
   "ISAMPLERCUBE", "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D",
   "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER3D", "SAMPLER3DRECT",
@@ -850,16 +852,16 @@
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399
+     395,   396,   397,   398,   399,   400
 };
 # endif
 
-#define YYPACT_NINF -363
+#define YYPACT_NINF -359
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-363)))
+  (!!((Yystate) == (-359)))
 
-#define YYTABLE_NINF -246
+#define YYTABLE_NINF -248
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -868,49 +870,49 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2469,  -363,  -363,  -363,  -363,   101,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,   -68,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  -363,   -88,  -363,  -363,
-     -77,   -35,   -13,  2561,   -51,  -363,    27,  -363,  1301,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,    12,  -363,  2377,  -363,
-    -363,  2731,  -363,  -363,  -363,    15,    49,  -363,    22,  -363,
-    2561,  -363,  -363,  -363,  2561,    51,    51,  -363,    16,  -103,
-     -87,  -363,  2561,  -363,  -363,  1388,  -363,  -363,    20,  2561,
-    -363,    19,   -82,  -363,   408,  -363,  -363,  -363,  -363,    39,
-     -91,  -363,  1503,  1845,  -363,  -363,  2561,    51,  2071,  -363,
-      47,  -363,  -363,  -363,  -363,  -363,  1845,  1845,  1845,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,   -41,  -363,  -363,  -363,
-      55,   -55,  1957,    59,  -363,  1845,    -5,   -90,    64,   -81,
-     -42,    33,    45,    48,    78,    80,   -93,  -363,    71,  -363,
-    -363,  2173,  2561,    70,  -363,    49,    57,    63,  -363,    79,
-      81,    68,  1618,    83,  1845,    72,    84,    82,  -363,  -363,
-      41,  -363,  -363,   -36,  -363,   -77,    85,  -363,  -363,  -363,
-    -363,   541,  -363,  -363,  -363,  -363,  -363,  -363,  1845,  1730,
-    1845,    77,    88,  -363,  -363,    51,    86,   -34,  -363,   -78,
-    -363,  -363,  -363,   -50,  -363,  -363,  1845,  2646,  -363,  -363,
-    1845,    92,  -363,  -363,  -363,  1845,  1845,  1845,  1845,  1845,
-    1845,  1845,  1845,  1845,  1845,  1845,  1845,  1845,  1845,  1845,
-    1845,  1845,  1845,  1845,  1845,  -363,  -363,  2275,  -363,  -363,
-    -363,  -363,  -363,    90,  -363,  1845,  -363,  -363,   -29,  1845,
-      87,  -363,  -363,  -363,   674,  -363,  -363,  -363,  -363,  -363,
-    -363,  -363,  -363,  -363,  -363,  -363,  1845,  1845,  -363,  -363,
-    -363,    93,    89,    94,  -363,  1845,    95,    -1,  1845,    51,
-    -363,   -94,  -363,  -363,    96,    98,  -363,   102,  -363,  -363,
-    -363,  -363,  -363,    -5,    -5,   -90,   -90,    64,    64,    64,
-      64,   -81,   -81,   -42,    33,    45,    48,    78,    80,    44,
-    -363,   161,    22,   940,  1073,   -47,  -363,   -37,  -363,  1187,
-     674,  -363,  -363,  -363,  1845,   103,  -363,  1845,  -363,   100,
-    -363,  1845,  -363,  -363,  1845,   107,  -363,  -363,  -363,  -363,
-    1187,    90,  -363,    98,    51,  2561,   109,   106,  -363,  1845,
-    -363,  -363,   111,  -363,  1845,  -363,   105,   116,   222,  -363,
-     115,   112,   807,  -363,  -363,   110,   -32,  1845,   807,    90,
-    -363,  1845,  -363,  -363,  -363,  -363,   113,    98,  -363,  -363,
-    -363,  -363
+    2487,  -359,  -359,  -359,  -359,   148,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,   -74,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,   -78,  -359,
+    -359,  -101,   -37,   -38,  2580,  -100,  -359,    30,  -359,  1308,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,   -31,  -359,  2394,
+    -359,  -359,  2752,  -359,  -359,  -359,   -19,   -43,  -359,     5,
+    -359,  2580,  -359,  -359,  -359,  2580,    44,    44,  -359,   -27,
+     -98,   -66,  -359,  2580,  -359,  -359,  1396,  -359,  -359,    13,
+    2580,  -359,  -359,    16,   -42,  -359,   408,  -359,  -359,  -359,
+    -359,    10,   -84,  -359,  1512,  1857,  -359,  -359,  2580,    44,
+    2085,  -359,     7,  -359,  -359,  -359,  -359,  -359,  1857,  1857,
+    1857,  -359,  -359,  -359,  -359,  -359,  -359,  -359,   -45,  -359,
+    -359,  -359,    26,   -41,  1970,    47,  -359,  1857,    18,   -56,
+      41,   -68,    51,    28,    32,    34,    71,    70,   -88,  -359,
+      58,  -359,  -359,  2188,  2580,    65,  -359,   -43,    52,    53,
+    -359,    64,    67,    55,  1628,    69,  1857,    62,    73,    74,
+    -359,  -359,    98,  -359,  -359,   -86,  -359,  -101,    75,  -359,
+    -359,  -359,  -359,   542,  -359,  -359,  -359,  -359,  -359,  -359,
+    1857,  1741,  1857,    72,    77,  -359,  -359,    44,    76,   -26,
+    -359,   -76,  -359,  -359,  -359,   -33,  -359,  -359,  1857,  2666,
+    -359,  -359,  1857,    82,  -359,  -359,  -359,  1857,  1857,  1857,
+    1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,  1857,
+    1857,  1857,  1857,  1857,  1857,  1857,  1857,  -359,  -359,  2291,
+    -359,  -359,  -359,  -359,  -359,    80,  -359,  1857,  -359,  -359,
+     -24,  1857,    66,  -359,  -359,  -359,   676,  -359,  -359,  -359,
+    -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  1857,  1857,
+    -359,  -359,  -359,    84,    89,    96,  -359,  1857,    91,     3,
+    1857,    44,  -359,   -97,  -359,  -359,    99,    97,  -359,   103,
+    -359,  -359,  -359,  -359,  -359,    18,    18,   -56,   -56,    41,
+      41,    41,    41,   -68,   -68,    51,    28,    32,    34,    71,
+      70,    35,  -359,   165,     5,   944,  1078,   -25,  -359,    -3,
+    -359,  1193,   676,  -359,  -359,  -359,  1857,   104,  -359,  1857,
+    -359,   105,  -359,  1857,  -359,  -359,  1857,   114,  -359,  -359,
+    -359,  -359,  1193,    80,  -359,    97,    44,  2580,   115,   110,
+    -359,  1857,  -359,  -359,   119,  -359,  1857,  -359,   107,   117,
+     228,  -359,   120,   116,   810,  -359,  -359,   118,    -2,  1857,
+     810,    80,  -359,  1857,  -359,  -359,  -359,  -359,   121,    97,
+    -359,  -359,  -359,  -359
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -918,79 +920,79 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   127,   147,   148,   149,     0,   133,   135,   163,   160,
-     161,   162,   167,   168,   169,   170,   171,   172,   164,   165,
-     166,   173,   174,   175,   176,   177,   178,   136,   137,   138,
-     140,   134,   179,   180,   181,   182,   183,   184,   139,   124,
-     123,   141,   142,   143,   144,   145,     0,   159,   185,   187,
-     200,   201,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   186,   197,   198,   199,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,     0,   215,   284,
-     285,     0,    98,    97,     0,   109,   115,   131,     0,   132,
-     125,   128,   121,   130,   129,   146,   156,   202,     0,   281,
-     283,     0,     2,     3,   218,     0,     0,    88,     0,    96,
-       0,   105,    99,   107,     0,   108,     0,    89,     2,   116,
-       0,    94,     0,   126,   122,     0,     1,   282,     0,     0,
-     216,   153,     0,   151,     0,   286,   100,   104,   106,   102,
-     110,   101,     0,     0,    87,    95,     0,     0,     0,   220,
-       4,     8,     6,     7,     9,    30,     0,     0,     0,   157,
-      37,    36,    38,    35,     5,    11,    31,    13,    18,    19,
-       0,     0,    24,     0,    39,     0,    43,    46,    49,    54,
-      57,    59,    61,    63,    65,    67,    69,    86,     0,    28,
-      90,     0,     0,     0,   150,     0,     0,     0,   266,     0,
-       0,     0,     0,     0,     0,     0,     0,   240,   249,   253,
-      39,    71,    84,     0,   229,     0,   146,   232,   251,   231,
-     230,     0,   233,   234,   235,   236,   237,   238,     0,     0,
-       0,     0,     0,   228,   120,     0,   226,     0,   224,     0,
-     221,    32,    33,     0,    15,    16,     0,     0,    22,    21,
-       0,   159,    25,    27,    34,     0,     0,     0,     0,     0,
+       0,   127,   148,   149,   150,     0,   133,   135,   165,   162,
+     163,   164,   169,   170,   171,   172,   173,   174,   166,   167,
+     168,   175,   176,   177,   178,   179,   180,   136,   137,   138,
+     140,   134,   181,   182,   183,   184,   185,   186,   139,   124,
+     123,   141,   142,   143,   144,   145,   146,     0,   161,   187,
+     189,   202,   203,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   188,   199,   200,   201,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,     0,   217,
+     286,   287,     0,    98,    97,     0,   109,   115,   131,     0,
+     132,   125,   128,   121,   130,   129,   147,   158,   204,     0,
+     283,   285,     0,     2,     3,   220,     0,     0,    88,     0,
+      96,     0,   105,    99,   107,     0,   108,     0,    89,     2,
+     116,     0,    94,     0,   126,   122,     0,     1,   284,     0,
+       0,   218,   157,   154,     0,   152,     0,   288,   100,   104,
+     106,   102,   110,   101,     0,     0,    87,    95,     0,     0,
+       0,   222,     4,     8,     6,     7,     9,    30,     0,     0,
+       0,   159,    37,    36,    38,    35,     5,    11,    31,    13,
+      18,    19,     0,     0,    24,     0,    39,     0,    43,    46,
+      49,    54,    57,    59,    61,    63,    65,    67,    69,    86,
+       0,    28,    90,     0,     0,     0,   151,     0,     0,     0,
+     268,     0,     0,     0,     0,     0,     0,     0,     0,   242,
+     251,   255,    39,    71,    84,     0,   231,     0,   147,   234,
+     253,   233,   232,     0,   235,   236,   237,   238,   239,   240,
+       0,     0,     0,     0,     0,   230,   120,     0,   228,     0,
+     226,     0,   223,    32,    33,     0,    15,    16,     0,     0,
+      22,    21,     0,   161,    25,    27,    34,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   158,   219,     0,   154,   155,
-     152,   277,   276,   247,   268,     0,   280,   278,     0,     0,
-       0,   261,   264,   239,     0,    74,    75,    77,    76,    79,
-      80,    81,    82,    83,    78,    73,     0,     0,   254,   250,
-     252,     0,     0,     0,   114,     0,   117,     0,     0,     0,
-     222,     0,    91,    10,     0,    17,    29,    14,    20,    26,
-      40,    41,    42,    45,    44,    47,    48,    52,    53,    50,
-      51,    55,    56,    58,    60,    62,    64,    66,    68,     0,
-     217,     0,     0,     0,     0,     0,   279,     0,   260,     0,
-     241,    72,    85,   103,     0,   111,   118,     0,   223,     0,
-     225,     0,    92,    12,     0,     0,   246,   248,   271,   270,
-     273,   247,   258,   262,     0,     0,     0,     0,   112,     0,
-     119,   227,     0,    70,     0,   272,     0,     0,   257,   255,
-       0,     0,     0,   242,   113,     0,     0,   274,     0,   247,
-     259,     0,   244,   265,   243,    93,     0,   275,   269,   256,
-     263,   267
+       0,     0,     0,     0,     0,     0,     0,   160,   221,     0,
+     155,   156,   153,   279,   278,   249,   270,     0,   282,   280,
+       0,     0,     0,   263,   266,   241,     0,    74,    75,    77,
+      76,    79,    80,    81,    82,    83,    78,    73,     0,     0,
+     256,   252,   254,     0,     0,     0,   114,     0,   117,     0,
+       0,     0,   224,     0,    91,    10,     0,    17,    29,    14,
+      20,    26,    40,    41,    42,    45,    44,    47,    48,    52,
+      53,    50,    51,    55,    56,    58,    60,    62,    64,    66,
+      68,     0,   219,     0,     0,     0,     0,     0,   281,     0,
+     262,     0,   243,    72,    85,   103,     0,   111,   118,     0,
+     225,     0,   227,     0,    92,    12,     0,     0,   248,   250,
+     273,   272,   275,   249,   260,   264,     0,     0,     0,     0,
+     112,     0,   119,   229,     0,    70,     0,   274,     0,     0,
+     259,   257,     0,     0,     0,   244,   113,     0,     0,   276,
+       0,   249,   261,     0,   246,   267,   245,    93,     0,   277,
+     271,   258,   265,   269
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -363,   -45,  -363,  -363,  -363,  -363,  -363,  -363,    -4,  -363,
-    -363,  -363,  -363,    54,  -363,   -84,   -79,  -139,   -83,   -23,
-     -22,   -21,   -18,   -17,   -16,  -363,  -120,  -137,  -363,  -146,
-    -125,  -363,    18,    21,  -363,  -363,  -363,   136,   146,   145,
-    -363,  -363,  -328,  -363,   -74,  -363,   -86,  -363,   -80,   255,
-    -363,  -363,    67,     0,  -363,  -363,  -363,  -363,  -116,  -141,
-      28,   -54,  -226,   -85,  -210,  -339,  -136,  -363,  -363,  -142,
-    -362,  -363,  -363,   -98,   -27,   -76,  -363,  -363,  -363,  -363,
-    -363,  -112,  -363,  -363,  -363,  -363,  -363,  -363,  -363,  -363,
-    -363,   172,  -363,  -363
+    -359,   -46,  -359,  -359,  -359,  -359,  -359,  -359,    -1,  -359,
+    -359,  -359,  -359,     2,  -359,   -93,   -92,  -202,   -91,   -16,
+     -20,   -15,     8,     6,   -17,  -359,  -121,  -135,  -359,  -154,
+    -130,  -359,    15,    17,  -359,  -359,  -359,   167,   172,   169,
+    -359,  -359,  -337,  -359,   -75,  -359,   -87,  -359,   -81,   280,
+    -359,  -359,    90,     0,  -359,  -359,  -359,  -359,  -117,  -139,
+      54,   -32,  -225,   -64,  -211,  -336,  -114,  -359,  -359,  -120,
+    -358,  -359,  -359,  -105,     1,   -63,  -359,  -359,  -359,  -359,
+    -359,   -83,  -359,  -359,  -359,  -359,  -359,  -359,  -359,  -359,
+    -359,   195,  -359,  -359
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   236,   164,   165,   166,   324,   167,   168,   169,   170,
-     171,   172,   173,   210,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   211,   212,   306,   213,
-     188,   122,   214,   215,    81,    82,    83,   111,   112,   113,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,   132,   133,   189,    96,    97,   192,   129,   148,   149,
-     237,   238,   234,   217,   218,   219,   220,   294,   387,   413,
-     351,   352,   353,   414,   221,   222,   223,   399,   224,   400,
-     225,   386,   226,   359,   283,   354,   380,   396,   397,   227,
-      98,    99,   100,   108
+      -1,   238,   166,   167,   168,   326,   169,   170,   171,   172,
+     173,   174,   175,   212,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   213,   214,   308,   215,
+     190,   123,   216,   217,    82,    83,    84,   112,   113,   114,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,   134,   135,   191,    97,    98,   194,   130,   150,   151,
+     239,   240,   236,   219,   220,   221,   222,   296,   389,   415,
+     353,   354,   355,   416,   223,   224,   225,   401,   226,   402,
+     227,   388,   228,   361,   285,   356,   382,   398,   399,   229,
+      99,   100,   101,   109
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -998,361 +1000,390 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      95,   105,   123,   115,   314,   187,   233,   240,   124,   114,
-     135,   310,   243,   191,   377,   321,   273,   232,    79,   398,
-     142,    80,   187,   262,   263,   102,   103,   143,   123,   371,
-     115,   384,   229,   106,   115,   252,   114,   372,   144,   230,
-     194,   119,   147,   258,   145,   259,   195,   419,   146,   147,
-     240,   274,   384,   322,   107,   146,   288,   104,   264,   265,
-     123,   244,   245,   412,   266,   267,   235,   249,   147,   412,
-     139,   140,   323,   250,   146,   381,   277,   116,   307,   290,
-     117,   307,   246,    95,   187,   382,   247,   109,    95,   366,
-     416,   307,   307,   233,   319,   308,   307,   320,    95,   307,
-     325,   128,   356,   311,   313,     2,     3,     4,   187,   187,
-      95,   147,   147,   329,    95,   110,    79,   146,   146,    80,
-     118,   103,    95,   337,   338,   339,   340,   319,   349,    95,
-     368,   255,   256,   257,   216,   125,   240,   141,   388,   355,
-     130,   390,   131,   357,   102,   103,    95,   134,    95,   193,
-     310,   190,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   228,   404,   260,   261,   278,   279,   -29,   361,
-     362,   305,   307,   374,   333,   334,   268,   248,   233,   174,
-     253,   335,   336,   341,   342,   420,   271,   269,   281,   270,
-     272,    95,    95,   369,   282,   275,   174,   147,   187,   286,
-     284,   291,   285,   146,   289,   292,   -28,   315,   293,   318,
-     241,   242,   316,   383,   -23,  -245,   358,   363,   365,   364,
-     373,   216,   375,   -30,   391,   367,   307,   233,   394,   254,
-     233,   402,   403,   389,   383,   405,   407,   393,   408,   409,
-     207,   415,   411,   328,   421,   343,   392,   344,   406,   345,
-     137,   187,   233,   346,   376,   347,   136,   348,   174,   138,
-     101,   417,   280,   317,   410,   370,   418,   360,   395,   378,
-     127,     0,     0,     0,   233,     0,     0,    95,   379,     0,
-       0,     0,   174,   174,     0,   385,     0,     0,     0,     0,
-       0,     0,     0,     0,   216,     0,     0,     0,     0,   123,
-       0,     0,     0,     0,     0,   124,   385,     0,     0,   330,
-     331,   332,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   401,
+      96,   106,   124,   116,   137,   189,   245,   316,   125,   115,
+     235,   242,   312,   193,   234,    80,   132,    81,   323,   379,
+     103,   104,   275,   189,   386,   400,   144,   373,   124,   117,
+     116,   108,   118,   145,   116,   374,   115,   264,   265,   254,
+     231,   120,   149,   309,   107,   386,   310,   232,   148,   149,
+     290,   133,   105,   421,   242,   148,   324,   276,   246,   247,
+     146,   124,   339,   340,   341,   342,   147,   237,   414,   149,
+     141,   142,   266,   267,   414,   148,   292,   279,   260,   248,
+     261,   196,   251,   249,    96,   189,   110,   197,   252,    96,
+     325,   111,   368,   126,   327,   143,   309,   235,   383,    96,
+     313,   315,   129,   321,   309,   309,   322,   131,   358,   189,
+     189,    96,   149,   149,    80,    96,    81,   331,   148,   148,
+     384,   418,   351,    96,   119,   104,   309,   309,   176,   -29,
+      96,   136,   321,   357,   230,   370,   218,   359,   103,   104,
+     242,   390,   262,   263,   392,   192,   176,   195,    96,   250,
+      96,   312,     2,     3,     4,   257,   258,   259,   268,   269,
+     243,   244,   280,   281,   309,   376,   406,   335,   336,   255,
+     337,   338,   270,   363,   364,   271,   272,   343,   344,   256,
+     273,   274,   235,   277,   283,   284,   286,   288,   422,   287,
+     371,   291,   293,    96,    96,   294,   360,   -28,   149,   189,
+     320,   295,   318,   317,   148,   -23,  -247,   385,   176,   365,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     366,   367,   369,   218,   375,   -30,   309,   377,   385,   307,
+     393,   235,   176,   176,   235,   391,   396,   405,   404,   409,
+     410,   395,   408,   394,   407,   411,   209,   413,   330,   378,
+     417,   346,   189,   423,   345,   419,   235,   347,   350,   332,
+     333,   334,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   235,    96,
+     349,   348,   139,   138,   140,   102,   387,   282,   412,   372,
+     420,   319,   380,   381,   128,     0,   218,   362,     0,   397,
+     124,     0,     0,     0,     0,     0,   125,   387,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   216,   216,     0,     0,     0,     0,   216,
-     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   174,     0,     0,     0,     0,     0,     0,     0,
-     216,     0,     0,     0,     0,    95,     0,     0,     0,     0,
+       0,     0,   176,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   216,     0,     0,     0,     0,     0,   216,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   196,   197,   198,   174,   199,   200,   201,   202,
-     203,   204,   205,    12,    13,    14,    15,    16,    17,    18,
+     403,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   218,   218,     0,     0,     0,
+       0,   218,   218,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   176,     0,     0,     0,     0,
+       0,     0,   218,     0,     0,     0,     0,    96,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   218,     0,     0,     0,     0,     0,
+     218,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   198,   199,   200,     0,   201,   202,   203,   204,
+     205,   206,   207,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,   206,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,     0,    62,    63,    64,    65,    66,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+     208,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,   150,    78,   151,   152,   153,   154,   155,     0,     0,
-     156,   157,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   158,
-       0,     0,     0,   207,   208,     0,     0,     0,     0,   209,
-     160,   161,   162,   163,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   196,   197,   198,     0,   199,
-     200,   201,   202,   203,   204,   205,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,   206,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,     0,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,   150,    78,   151,   152,   153,   154,
-     155,     0,     0,   156,   157,     0,     0,     0,     0,     0,
+      77,    78,   152,    79,   153,   154,   155,   156,   157,     0,
+       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   158,     0,     0,     0,   207,   309,     0,     0,
-       0,     0,   209,   160,   161,   162,   163,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   196,   197,
-     198,     0,   199,   200,   201,   202,   203,   204,   205,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,   206,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-       0,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,   150,    78,   151,
-     152,   153,   154,   155,     0,     0,   156,   157,     0,     0,
+     160,     0,     0,     0,   209,   210,     0,     0,     0,     0,
+     211,   162,   163,   164,   165,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   198,   199,   200,     0,
+     201,   202,   203,   204,   205,   206,   207,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,   208,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,   152,    79,   153,   154,
+     155,   156,   157,     0,     0,   158,   159,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   158,     0,     0,     0,   207,
-       0,     0,     0,     0,     0,   209,   160,   161,   162,   163,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   196,   197,   198,     0,   199,   200,   201,   202,   203,
-     204,   205,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,   206,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,     0,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-     150,    78,   151,   152,   153,   154,   155,     0,     0,   156,
-     157,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   158,     0,
-       0,     0,   134,     0,     0,     0,     0,     0,   209,   160,
-     161,   162,   163,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   196,   197,   198,     0,   199,   200,
-     201,   202,   203,   204,   205,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,   160,     0,     0,     0,   209,   311,
+       0,     0,     0,     0,   211,   162,   163,   164,   165,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     198,   199,   200,     0,   201,   202,   203,   204,   205,   206,
+     207,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,   208,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+     152,    79,   153,   154,   155,   156,   157,     0,     0,   158,
+     159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   160,     0,
+       0,     0,   209,     0,     0,     0,     0,     0,   211,   162,
+     163,   164,   165,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   198,   199,   200,     0,   201,   202,
+     203,   204,   205,   206,   207,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,   206,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,     0,    62,    63,    64,
+      47,    48,   208,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,   150,    78,   151,   152,   153,   154,   155,
-       0,     0,   156,   157,     0,     0,     0,     0,     0,     0,
+      75,    76,    77,    78,   152,    79,   153,   154,   155,   156,
+     157,     0,     0,   158,   159,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   158,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   209,   160,   161,   162,   163,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+       0,     0,   160,     0,     0,     0,   136,     0,     0,     0,
+       0,     0,   211,   162,   163,   164,   165,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   198,   199,
+     200,     0,   201,   202,   203,   204,   205,   206,   207,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,   208,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,     0,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,   152,    79,
+     153,   154,   155,   156,   157,     0,     0,   158,   159,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   160,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   211,   162,   163,   164,
+     165,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,   152,    79,   153,   154,   155,   156,   157,     0,
+       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     1,     2,     3,     4,
+     160,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+     211,   162,   163,   164,   165,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,     0,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,     0,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,   150,    78,   151,   152,
-     153,   154,   155,     0,     0,   156,   157,     0,     0,     0,
+      44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+       0,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,   152,    79,   153,
+     154,   155,   156,   157,     0,     0,   158,   159,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       1,     2,     3,     4,   158,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,   209,   160,   161,   162,   163,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,     0,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,     0,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-     150,    78,   151,   152,   153,   154,   155,     0,     0,   156,
-     157,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,     2,     3,     4,   158,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,   160,
-     161,   162,   163,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,     0,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,     0,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,   120,    78,     0,     0,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,     2,     3,     4,   160,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,   162,   163,   164,   165,
        0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,   121,    32,    33,    34,    35,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,     0,    46,    47,     0,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,     0,    62,    63,    64,    65,    66,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-       0,   150,    78,   151,   152,   153,   154,   155,     0,     0,
-     156,   157,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   158,
-       0,     0,   159,     8,     9,    10,    11,     0,     0,     0,
-     160,   161,   162,   163,     0,     0,     0,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,     0,     0,     0,     0,     0,    32,    33,
-      34,    35,    36,    37,     0,     0,     0,     0,     0,     0,
-       0,     0,    46,    47,     0,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,     0,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,     0,   150,    78,   151,   152,
-     153,   154,   155,     0,     0,   156,   157,     0,     0,     0,
+      77,    78,   121,    79,     0,     0,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   158,     0,     0,   231,     8,     9,
-      10,    11,     0,     0,     0,   160,   161,   162,   163,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+     122,    32,    33,    34,    35,    36,    37,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
+     152,    79,   153,   154,   155,   156,   157,     0,     0,   158,
+     159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   160,     0,
+       0,   161,     8,     9,    10,    11,     0,     0,     0,   162,
+     163,   164,   165,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,     0,   152,    79,   153,   154,
+     155,   156,   157,     0,     0,   158,   159,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   160,     0,     0,   233,     8,     9,
+      10,    11,     0,     0,     0,   162,   163,   164,   165,     0,
        0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
        0,     0,     0,    32,    33,    34,    35,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,     0,    46,    47,     0,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,     0,    62,    63,    64,    65,    66,
+       0,     0,     0,     0,     0,     0,     0,     0,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-       0,   150,    78,   151,   152,   153,   154,   155,     0,     0,
-     156,   157,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   158,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,   287,
-     160,   161,   162,   163,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,     0,     0,    46,
-      47,     0,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,     0,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,     0,   150,    78,   151,   152,   153,   154,   155,
-       0,     0,   156,   157,     0,     0,     0,     0,     0,     0,
+      77,     0,   152,    79,   153,   154,   155,   156,   157,     0,
+       0,   158,   159,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   158,     0,     0,   312,     8,     9,    10,    11,     0,
-       0,     0,   160,   161,   162,   163,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,    37,     0,     0,     0,     0,
-       0,     0,     0,     0,    46,    47,     0,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,     0,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,     0,   150,    78,
-     151,   152,   153,   154,   155,     0,     0,   156,   157,     0,
+     160,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+     289,   162,   163,   164,   165,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    32,    33,    34,    35,
+      36,    37,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    47,    48,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,     0,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,     0,   152,    79,   153,   154,   155,
+     156,   157,     0,     0,   158,   159,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   158,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,   160,   161,   162,
-     163,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,   160,     0,     0,   314,     8,     9,    10,
+      11,     0,     0,     0,   162,   163,   164,   165,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
        0,     0,    32,    33,    34,    35,    36,    37,     0,     0,
-       0,     0,     0,     0,     0,     0,    46,   251,     0,    48,
+       0,     0,     0,     0,     0,     0,     0,    47,    48,     0,
       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,     0,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,     0,
-     150,    78,   151,   152,   153,   154,   155,     0,     0,   156,
-     157,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,     2,     3,     4,   158,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,   160,
-     161,   162,   163,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,     0,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,     0,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,     0,    78,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     1,     2,     3,     4,
-       0,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   239,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,     0,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,     0,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,     0,    78,     0,     0,
+      59,    60,    61,    62,     0,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+       0,   152,    79,   153,   154,   155,   156,   157,     0,     0,
+     158,   159,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   160,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+     162,   163,   164,   165,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      47,   253,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,     0,   152,    79,   153,   154,   155,   156,
+     157,     0,     0,   158,   159,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   276,
+       3,     4,   160,     6,     7,     8,     9,    10,    11,     0,
+       0,     0,     0,   162,   163,   164,   165,     0,     0,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,     0,    48,    49,    50,
+      42,    43,    44,    45,    46,    47,    48,     0,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,     0,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,     0,    78,
-       0,     0,     0,     0,     0,     0,     0,   126,     0,     0,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   350,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,     0,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,     0,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-       0,    78,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-       0,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,     0,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,     0,    78,     1,     2,     3,     4,     0,     6,
+      61,    62,     0,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,     0,
+      79,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,     2,     3,     4,     0,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   241,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       0,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,     0,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,     0,    79,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     1,     2,     3,     4,     0,     6,
        7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
+       0,     0,     0,     0,     0,   278,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,     0,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,     0,    62,    63,
+      46,    47,    48,     0,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,     0,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,     0,    78,     8,     9,    10,    11,
+      74,    75,    76,    77,    78,     0,    79,     0,     0,     0,
+       0,     0,     0,     0,   127,     0,     0,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   352,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,     0,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,     0,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,     0,    79,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,     0,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,     0,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,     0,    79,     1,     2,     3,     4,     0,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,     0,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,     0,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,     0,    79,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
        0,    32,    33,    34,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,     0,    46,    47,     0,    48,    49,
+       0,     0,     0,     0,     0,     0,    47,    48,     0,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,     0,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,     0,   326,
-      78,     8,     9,    10,    11,   327,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,    37,     0,     0,     0,     0,     0,     0,     0,     0,
-      46,    47,     0,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,     0,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,     0,     0,    78
+      60,    61,    62,     0,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,     0,
+     328,    79,     8,     9,    10,    11,   329,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    47,    48,     0,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,     0,     0,    79
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    46,    88,    83,   230,   125,   143,   148,    88,    83,
-     108,   221,   158,   129,   353,    93,   109,   142,     0,   381,
-     123,     0,   142,   104,   105,    93,    94,   130,   114,   123,
-     110,   359,   123,   121,   114,   172,   110,   131,   125,   130,
-     122,    86,   122,   133,   131,   135,   128,   409,   122,   129,
-     191,   144,   380,   131,   131,   129,   202,   125,   139,   140,
-     146,   102,   103,   402,   106,   107,   146,   122,   148,   408,
-     115,   116,   122,   128,   148,   122,   192,   128,   128,   204,
-     131,   128,   123,    83,   204,   122,   127,   122,    88,   315,
-     122,   128,   128,   230,   128,   131,   128,   131,    98,   128,
-     246,   101,   131,   228,   229,     4,     5,     6,   228,   229,
-     110,   191,   192,   250,   114,   128,    98,   191,   192,    98,
-      93,    94,   122,   262,   263,   264,   265,   128,   274,   129,
-     131,   136,   137,   138,   134,   123,   277,   121,   364,   285,
-     125,   367,    93,   289,    93,    94,   146,   125,   148,   130,
-     360,   131,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   123,   389,   100,   101,    96,    97,   121,   306,
-     307,   130,   128,   129,   258,   259,   143,   122,   315,   125,
-     121,   260,   261,   266,   267,   411,   108,   142,   131,   141,
-     110,   191,   192,   318,   131,   124,   142,   277,   318,   131,
-     121,   129,   121,   277,   121,   121,   121,   130,   126,   123,
-     156,   157,   124,   359,   122,   125,   129,   124,   124,   130,
-     124,   221,    61,   121,   124,   130,   128,   364,   121,   175,
-     367,   122,   126,   130,   380,   124,   131,   374,   122,    17,
-     125,   131,   130,   247,   131,   268,   371,   269,   394,   270,
-     114,   371,   389,   271,   352,   272,   110,   273,   204,   114,
-       5,   407,   195,   235,   400,   319,   408,   294,   380,   354,
-      98,    -1,    -1,    -1,   411,    -1,    -1,   277,   354,    -1,
-      -1,    -1,   228,   229,    -1,   359,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   294,    -1,    -1,    -1,    -1,   385,
-      -1,    -1,    -1,    -1,    -1,   385,   380,    -1,    -1,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   384,
+       0,    47,    89,    84,   109,   126,   160,   232,    89,    84,
+     145,   150,   223,   130,   144,     0,    59,     0,    94,   355,
+      94,    95,   110,   144,   361,   383,   124,   124,   115,   129,
+     111,   132,   132,   131,   115,   132,   111,   105,   106,   174,
+     124,    87,   123,   129,   122,   382,   132,   131,   123,   130,
+     204,    94,   126,   411,   193,   130,   132,   145,   103,   104,
+     126,   148,   264,   265,   266,   267,   132,   148,   404,   150,
+     116,   117,   140,   141,   410,   150,   206,   194,   134,   124,
+     136,   123,   123,   128,    84,   206,   123,   129,   129,    89,
+     123,   129,   317,   124,   248,   122,   129,   232,   123,    99,
+     230,   231,   102,   129,   129,   129,   132,   126,   132,   230,
+     231,   111,   193,   194,    99,   115,    99,   252,   193,   194,
+     123,   123,   276,   123,    94,    95,   129,   129,   126,   122,
+     130,   126,   129,   287,   124,   132,   136,   291,    94,    95,
+     279,   366,   101,   102,   369,   132,   144,   131,   148,   123,
+     150,   362,     4,     5,     6,   137,   138,   139,   107,   108,
+     158,   159,    97,    98,   129,   130,   391,   260,   261,   122,
+     262,   263,   144,   308,   309,   143,   142,   268,   269,   177,
+     109,   111,   317,   125,   132,   132,   122,   132,   413,   122,
+     320,   122,   130,   193,   194,   122,   130,   122,   279,   320,
+     124,   127,   125,   131,   279,   123,   126,   361,   206,   125,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     131,   125,   131,   223,   125,   122,   129,    62,   382,   131,
+     125,   366,   230,   231,   369,   131,   122,   127,   123,   132,
+     123,   376,   396,   373,   125,    17,   126,   131,   249,   354,
+     132,   271,   373,   132,   270,   409,   391,   272,   275,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   413,   279,
+     274,   273,   115,   111,   115,     5,   361,   197,   402,   321,
+     410,   237,   356,   356,    99,    -1,   296,   296,    -1,   382,
+     387,    -1,    -1,    -1,    -1,    -1,   387,   382,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   353,   354,    -1,    -1,    -1,    -1,   359,
-     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   318,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     380,    -1,    -1,    -1,    -1,   385,    -1,    -1,    -1,    -1,
+      -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,   408,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,   371,    18,    19,    20,    21,
+     386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   355,   356,    -1,    -1,    -1,
+      -1,   361,   362,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,    -1,    -1,    -1,    -1,
+      -1,    -1,   382,    -1,    -1,    -1,    -1,   387,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   404,    -1,    -1,    -1,    -1,    -1,
+     410,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    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,
-      72,    73,    74,    75,    -1,    77,    78,    79,    80,    81,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,    -1,    -1,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,
-      -1,    -1,    -1,   125,   126,    -1,    -1,    -1,    -1,   131,
-     132,   133,   134,   135,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    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,    72,    73,    74,    75,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,    -1,    -1,   102,   103,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,    -1,
+      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   121,    -1,    -1,    -1,   125,   126,    -1,    -1,
-      -1,    -1,   131,   132,   133,   134,   135,     3,     4,     5,
+     122,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,
+     132,   133,   134,   135,   136,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    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,    72,    73,    74,    75,    76,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   122,    -1,    -1,    -1,   126,   127,
+      -1,    -1,    -1,    -1,   132,   133,   134,   135,   136,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    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,    72,    73,
+      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,    -1,    -1,   103,
+     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,
+      -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
+     134,   135,   136,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    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,    72,    73,    74,    75,    76,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   122,    -1,    -1,    -1,   126,    -1,    -1,    -1,
+      -1,    -1,   132,   133,   134,   135,   136,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
@@ -1360,214 +1391,189 @@
       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,
-      -1,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
+      96,    97,    98,    99,   100,    -1,    -1,   103,   104,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,   125,
-      -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,   135,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      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,    72,
-      73,    74,    75,    -1,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,    -1,    -1,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,    -1,
-      -1,    -1,   125,    -1,    -1,    -1,    -1,    -1,   131,   132,
-     133,   134,   135,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    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,    72,    73,    74,    75,    -1,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-      -1,    -1,   102,   103,    -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,   131,   132,   133,   134,   135,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
+     136,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    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,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,    -1,
+      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     122,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+     132,   133,   134,   135,   136,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    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,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      57,    58,    59,    60,    61,    -1,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      -1,    78,    79,    80,    81,    82,    83,    84,    85,    86,
       87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,    -1,    -1,   102,   103,    -1,    -1,    -1,
+      97,    98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,   121,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,   131,   132,   133,   134,   135,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      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,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    -1,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,    -1,    -1,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,   121,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,   132,
-     133,   134,   135,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    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,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    -1,    -1,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,   122,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,   133,   134,   135,   136,
       -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,   131,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    -1,    77,    78,    79,    80,    81,
+      32,    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,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      -1,    93,    94,    95,    96,    97,    98,    99,    -1,    -1,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,
-      -1,    -1,   124,    10,    11,    12,    13,    -1,    -1,    -1,
-     132,   133,   134,   135,    -1,    -1,    -1,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    59,    60,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    -1,    93,    94,    95,    96,
-      97,    98,    99,    -1,    -1,   102,   103,    -1,    -1,    -1,
+      92,    93,    94,    95,    -1,    -1,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,    -1,   124,    10,    11,
-      12,    13,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+     132,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    -1,
+      94,    95,    96,    97,    98,    99,   100,    -1,    -1,   103,
+     104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,    -1,
+      -1,   125,    10,    11,    12,    13,    -1,    -1,    -1,   133,
+     134,   135,   136,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    -1,    94,    95,    96,    97,
+      98,    99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   122,    -1,    -1,   125,    10,    11,
+      12,    13,    -1,    -1,    -1,   133,   134,   135,   136,    -1,
       -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    -1,    77,    78,    79,    80,    81,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      -1,    93,    94,    95,    96,    97,    98,    99,    -1,    -1,
-     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,   131,
-     132,   133,   134,   135,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,
-      60,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    -1,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    -1,    93,    94,    95,    96,    97,    98,    99,
-      -1,    -1,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    -1,    94,    95,    96,    97,    98,    99,   100,    -1,
+      -1,   103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   121,    -1,    -1,   124,    10,    11,    12,    13,    -1,
-      -1,    -1,   132,   133,   134,   135,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    -1,    93,    94,
-      95,    96,    97,    98,    99,    -1,    -1,   102,   103,    -1,
+     122,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+     132,   133,   134,   135,   136,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    -1,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    -1,    94,    95,    96,    97,    98,
+      99,   100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   121,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
-     135,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      -1,    -1,    -1,   122,    -1,    -1,   125,    10,    11,    12,
+      13,    -1,    -1,    -1,   133,   134,   135,   136,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
       -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    -1,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    -1,
-      93,    94,    95,    96,    97,    98,    99,    -1,    -1,   102,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,   121,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,   132,
-     133,   134,   135,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    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,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    -1,    94,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-      -1,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,    25,    26,
-      27,    28,    29,    30,    31,    32,    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,    -1,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    -1,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    -1,    94,    -1,    -1,
+      73,    74,    75,    76,    -1,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      -1,    94,    95,    96,    97,    98,    99,   100,    -1,    -1,
+     103,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+     133,   134,   135,   136,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      60,    61,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    -1,    94,    95,    96,    97,    98,    99,
+     100,    -1,    -1,   103,   104,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,
+       5,     6,   122,     8,     9,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,   133,   134,   135,   136,    -1,    -1,    -1,
       25,    26,    27,    28,    29,    30,    31,    32,    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,    -1,    62,    63,    64,
+      55,    56,    57,    58,    59,    60,    61,    -1,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    -1,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   126,    25,    26,    27,    28,    29,    30,    31,    32,
-      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,    -1,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    -1,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      -1,    94,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    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,
-      -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    -1,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    -1,    94,     3,     4,     5,     6,    -1,     8,
+      75,    76,    -1,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    -1,
+      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   127,    25,    26,    27,    28,    29,    30,    31,
+      32,    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,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,
        9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
+      -1,    -1,    -1,    -1,    -1,   127,    25,    26,    27,    28,
       29,    30,    31,    32,    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,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    -1,    77,    78,
+      59,    60,    61,    -1,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    -1,    78,
       79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    -1,    94,    10,    11,    12,    13,
+      89,    90,    91,    92,    93,    -1,    95,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,    25,
+      26,    27,    28,    29,    30,    31,    32,    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,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    -1,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    -1,    95,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      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,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    -1,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    -1,    95,     3,     4,     5,     6,    -1,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    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,    -1,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    -1,    95,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
       -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    -1,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    -1,    93,
-      94,    10,    11,    12,    13,    99,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    60,    -1,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    -1,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    -1,    -1,    94
+      74,    75,    76,    -1,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    -1,
+      94,    95,    10,    11,    12,    13,   100,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    60,    61,    -1,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    -1,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    -1,    -1,    95
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1578,79 +1584,79 @@
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
       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,    62,    63,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    94,   177,
-     178,   179,   180,   181,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   198,   199,   200,   235,   236,
-     237,   194,    93,    94,   125,   146,   121,   131,   238,   122,
-     128,   182,   183,   184,   189,   193,   128,   131,    93,   146,
-      93,   131,   176,   191,   193,   123,     0,   236,   198,   202,
-     125,    93,   196,   197,   125,   218,   183,   182,   184,   146,
-     146,   121,   123,   130,   125,   131,   189,   193,   203,   204,
-      93,    95,    96,    97,    98,    99,   102,   103,   121,   124,
-     132,   133,   134,   135,   147,   148,   149,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   175,   198,
-     131,   203,   201,   130,   122,   128,    14,    15,    16,    18,
-      19,    20,    21,    22,    23,    24,    61,   125,   126,   131,
-     158,   171,   172,   174,   177,   178,   198,   208,   209,   210,
-     211,   219,   220,   221,   223,   225,   227,   234,   123,   123,
-     130,   124,   175,   172,   207,   193,   146,   205,   206,   126,
-     204,   158,   158,   174,   102,   103,   123,   127,   122,   122,
-     128,    60,   172,   121,   158,   136,   137,   138,   133,   135,
-     100,   101,   104,   105,   139,   140,   106,   107,   143,   142,
-     141,   108,   110,   109,   144,   124,   126,   203,    96,    97,
-     197,   131,   131,   229,   121,   121,   131,   131,   174,   121,
-     175,   129,   121,   126,   212,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   130,   173,   128,   131,   126,
-     209,   175,   124,   175,   207,   130,   124,   205,   123,   128,
-     131,    93,   131,   122,   150,   174,    93,    99,   153,   172,
-     158,   158,   158,   160,   160,   161,   161,   162,   162,   162,
-     162,   163,   163,   164,   165,   166,   167,   168,   169,   174,
-     126,   215,   216,   217,   230,   174,   131,   174,   129,   228,
-     219,   172,   172,   124,   130,   124,   207,   130,   131,   175,
-     206,   123,   131,   124,   129,    61,   218,   210,   208,   220,
-     231,   122,   122,   174,   187,   189,   226,   213,   207,   130,
-     207,   124,   175,   172,   121,   226,   232,   233,   215,   222,
-     224,   146,   122,   126,   207,   124,   174,   131,   122,    17,
-     211,   130,   210,   214,   218,   131,   122,   174,   214,   215,
-     207,   131
+      74,    75,    76,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    95,
+     178,   179,   180,   181,   182,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   199,   200,   201,   236,
+     237,   238,   195,    94,    95,   126,   147,   122,   132,   239,
+     123,   129,   183,   184,   185,   190,   194,   129,   132,    94,
+     147,    94,   132,   177,   192,   194,   124,     0,   237,   199,
+     203,   126,    59,    94,   197,   198,   126,   219,   184,   183,
+     185,   147,   147,   122,   124,   131,   126,   132,   190,   194,
+     204,   205,    94,    96,    97,    98,    99,   100,   103,   104,
+     122,   125,   133,   134,   135,   136,   148,   149,   150,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     176,   199,   132,   204,   202,   131,   123,   129,    14,    15,
+      16,    18,    19,    20,    21,    22,    23,    24,    62,   126,
+     127,   132,   159,   172,   173,   175,   178,   179,   199,   209,
+     210,   211,   212,   220,   221,   222,   224,   226,   228,   235,
+     124,   124,   131,   125,   176,   173,   208,   194,   147,   206,
+     207,   127,   205,   159,   159,   175,   103,   104,   124,   128,
+     123,   123,   129,    61,   173,   122,   159,   137,   138,   139,
+     134,   136,   101,   102,   105,   106,   140,   141,   107,   108,
+     144,   143,   142,   109,   111,   110,   145,   125,   127,   204,
+      97,    98,   198,   132,   132,   230,   122,   122,   132,   132,
+     175,   122,   176,   130,   122,   127,   213,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   131,   174,   129,
+     132,   127,   210,   176,   125,   176,   208,   131,   125,   206,
+     124,   129,   132,    94,   132,   123,   151,   175,    94,   100,
+     154,   173,   159,   159,   159,   161,   161,   162,   162,   163,
+     163,   163,   163,   164,   164,   165,   166,   167,   168,   169,
+     170,   175,   127,   216,   217,   218,   231,   175,   132,   175,
+     130,   229,   220,   173,   173,   125,   131,   125,   208,   131,
+     132,   176,   207,   124,   132,   125,   130,    62,   219,   211,
+     209,   221,   232,   123,   123,   175,   188,   190,   227,   214,
+     208,   131,   208,   125,   176,   173,   122,   227,   233,   234,
+     216,   223,   225,   147,   123,   127,   208,   125,   175,   132,
+     123,    17,   212,   131,   211,   215,   219,   132,   123,   175,
+     215,   216,   208,   132
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   145,   146,   146,   147,   148,   148,   148,   148,   148,
-     148,   149,   149,   149,   149,   149,   149,   150,   151,   152,
-     152,   153,   153,   154,   154,   155,   155,   156,   157,   157,
-     157,   158,   158,   158,   158,   159,   159,   159,   159,   160,
-     160,   160,   160,   161,   161,   161,   162,   162,   162,   163,
-     163,   163,   163,   163,   164,   164,   164,   165,   165,   166,
-     166,   167,   167,   168,   168,   169,   169,   170,   170,   171,
-     171,   172,   172,   173,   173,   173,   173,   173,   173,   173,
-     173,   173,   173,   173,   174,   174,   175,   176,   177,   177,
-     177,   177,   177,   177,   177,   177,   178,   179,   179,   180,
-     180,   181,   182,   182,   183,   183,   183,   183,   184,   185,
-     185,   185,   185,   185,   185,   186,   186,   186,   186,   186,
-     186,   187,   187,   188,   188,   189,   189,   190,   191,   191,
-     191,   191,   191,   192,   192,   192,   192,   192,   192,   192,
-     192,   192,   192,   192,   192,   192,   193,   194,   194,   194,
-     195,   196,   196,   197,   197,   197,   198,   198,   198,   199,
-     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   199,   199,   199,   199,   201,   200,   202,   200,
-     203,   203,   204,   204,   205,   205,   206,   206,   207,   208,
-     209,   209,   210,   210,   210,   210,   210,   210,   210,   211,
-     212,   213,   211,   214,   214,   216,   215,   217,   215,   218,
-     218,   219,   219,   220,   220,   221,   222,   222,   224,   223,
-     225,   225,   226,   226,   228,   227,   229,   227,   230,   227,
-     231,   231,   232,   232,   233,   233,   234,   234,   234,   234,
-     234,   235,   235,   236,   236,   238,   237
+       0,   146,   147,   147,   148,   149,   149,   149,   149,   149,
+     149,   150,   150,   150,   150,   150,   150,   151,   152,   153,
+     153,   154,   154,   155,   155,   156,   156,   157,   158,   158,
+     158,   159,   159,   159,   159,   160,   160,   160,   160,   161,
+     161,   161,   161,   162,   162,   162,   163,   163,   163,   164,
+     164,   164,   164,   164,   165,   165,   165,   166,   166,   167,
+     167,   168,   168,   169,   169,   170,   170,   171,   171,   172,
+     172,   173,   173,   174,   174,   174,   174,   174,   174,   174,
+     174,   174,   174,   174,   175,   175,   176,   177,   178,   178,
+     178,   178,   178,   178,   178,   178,   179,   180,   180,   181,
+     181,   182,   183,   183,   184,   184,   184,   184,   185,   186,
+     186,   186,   186,   186,   186,   187,   187,   187,   187,   187,
+     187,   188,   188,   189,   189,   190,   190,   191,   192,   192,
+     192,   192,   192,   193,   193,   193,   193,   193,   193,   193,
+     193,   193,   193,   193,   193,   193,   193,   194,   195,   195,
+     195,   196,   197,   197,   198,   198,   198,   198,   199,   199,
+     199,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   202,   201,
+     203,   201,   204,   204,   205,   205,   206,   206,   207,   207,
+     208,   209,   210,   210,   211,   211,   211,   211,   211,   211,
+     211,   212,   213,   214,   212,   215,   215,   217,   216,   218,
+     216,   219,   219,   220,   220,   221,   221,   222,   223,   223,
+     225,   224,   226,   226,   227,   227,   229,   228,   230,   228,
+     231,   228,   232,   232,   233,   233,   234,   234,   235,   235,
+     235,   235,   235,   236,   236,   237,   237,   239,   238
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1671,20 +1677,20 @@
        4,     1,     2,     1,     1,     1,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     3,     1,     3,     3,     1,     3,     4,     1,
+       1,     4,     1,     3,     1,     3,     3,     1,     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,     1,     0,     6,
+       0,     5,     1,     2,     3,     4,     1,     3,     1,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     6,     0,     5,
-       1,     2,     3,     4,     1,     3,     1,     4,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-       0,     0,     5,     1,     1,     0,     2,     0,     2,     2,
-       3,     1,     2,     1,     2,     5,     3,     1,     0,     6,
-       3,     2,     1,     4,     0,     6,     0,     8,     0,     7,
-       1,     1,     1,     0,     2,     3,     2,     2,     2,     3,
-       2,     1,     2,     1,     1,     0,     3
+       1,     2,     0,     0,     5,     1,     1,     0,     2,     0,
+       2,     2,     3,     1,     2,     1,     2,     5,     3,     1,
+       0,     6,     3,     2,     1,     4,     0,     6,     0,     8,
+       0,     7,     1,     1,     1,     0,     2,     3,     2,     2,
+       2,     3,     2,     1,     2,     1,     1,     0,     3
 };
 
 
@@ -3739,8 +3745,9 @@
   case 146:
 
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-        (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
+        context->checkIsAtGlobalLevel((yylsp[0]), "shared");
+        COMPUTE_ONLY("shared", (yylsp[0]));
+        (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqShared, (yylsp[0]));
     }
 
     break;
@@ -3748,7 +3755,8 @@
   case 147:
 
     {
-        (yyval.interm.precision) = EbpHigh;
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
     }
 
     break;
@@ -3756,7 +3764,7 @@
   case 148:
 
     {
-        (yyval.interm.precision) = EbpMedium;
+        (yyval.interm.precision) = EbpHigh;
     }
 
     break;
@@ -3764,7 +3772,7 @@
   case 149:
 
     {
-        (yyval.interm.precision) = EbpLow;
+        (yyval.interm.precision) = EbpMedium;
     }
 
     break;
@@ -3772,13 +3780,21 @@
   case 150:
 
     {
+        (yyval.interm.precision) = EbpLow;
+    }
+
+    break;
+
+  case 151:
+
+    {
         ES3_OR_NEWER("layout", (yylsp[-3]), "qualifier");
         (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
     }
 
     break;
 
-  case 151:
+  case 152:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
@@ -3786,7 +3802,7 @@
 
     break;
 
-  case 152:
+  case 153:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
@@ -3794,18 +3810,10 @@
 
     break;
 
-  case 153:
-
-    {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
-    }
-
-    break;
-
   case 154:
 
     {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
     }
 
     break;
@@ -3821,7 +3829,7 @@
   case 156:
 
     {
-        (yyval.interm.type).initialize((yyvsp[0].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
     }
 
     break;
@@ -3829,6 +3837,22 @@
   case 157:
 
     {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier("shared", (yylsp[0]));
+    }
+
+    break;
+
+  case 158:
+
+    {
+        (yyval.interm.type).initialize((yyvsp[0].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
+    }
+
+    break;
+
+  case 159:
+
+    {
         ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
         (yyval.interm.type).initialize((yyvsp[-2].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
         (yyval.interm.type).setArraySize(0);
@@ -3836,7 +3860,7 @@
 
     break;
 
-  case 158:
+  case 160:
 
     {
         (yyval.interm.type).initialize((yyvsp[-3].interm.typeSpecifierNonArray), (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
@@ -3849,7 +3873,7 @@
 
     break;
 
-  case 159:
+  case 161:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
@@ -3857,26 +3881,10 @@
 
     break;
 
-  case 160:
-
-    {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-    }
-
-    break;
-
-  case 161:
-
-    {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-    }
-
-    break;
-
   case 162:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
     }
 
     break;
@@ -3884,7 +3892,7 @@
   case 163:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
     }
 
     break;
@@ -3892,8 +3900,7 @@
   case 164:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
     }
 
     break;
@@ -3901,8 +3908,7 @@
   case 165:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
     }
 
     break;
@@ -3911,7 +3917,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -3919,8 +3925,8 @@
   case 167:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -3928,8 +3934,8 @@
   case 168:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -3938,7 +3944,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -3946,8 +3952,8 @@
   case 170:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -3955,8 +3961,8 @@
   case 171:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -3965,7 +3971,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -3973,8 +3979,8 @@
   case 173:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -3982,8 +3988,8 @@
   case 174:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -3992,7 +3998,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
+        (yyval.interm.typeSpecifierNonArray).setAggregate(2);
     }
 
     break;
@@ -4000,8 +4006,8 @@
   case 176:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(3);
     }
 
     break;
@@ -4009,8 +4015,8 @@
   case 177:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setAggregate(4);
     }
 
     break;
@@ -4019,7 +4025,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
     }
 
     break;
@@ -4028,7 +4034,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
     }
 
     break;
@@ -4037,7 +4043,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
     }
 
     break;
@@ -4046,7 +4052,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
     }
 
     break;
@@ -4055,7 +4061,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
     }
 
     break;
@@ -4064,7 +4070,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
     }
 
     break;
@@ -4073,7 +4079,7 @@
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
-        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
     }
 
     break;
@@ -4081,7 +4087,8 @@
   case 185:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
     }
 
     break;
@@ -4089,7 +4096,8 @@
   case 186:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
     }
 
     break;
@@ -4097,7 +4105,7 @@
   case 187:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
     }
 
     break;
@@ -4105,7 +4113,7 @@
   case 188:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
     }
 
     break;
@@ -4113,7 +4121,7 @@
   case 189:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4121,7 +4129,7 @@
   case 190:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4129,7 +4137,7 @@
   case 191:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
     }
 
     break;
@@ -4137,7 +4145,7 @@
   case 192:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
     }
 
     break;
@@ -4145,7 +4153,7 @@
   case 193:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4153,7 +4161,7 @@
   case 194:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4161,7 +4169,7 @@
   case 195:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
     }
 
     break;
@@ -4169,7 +4177,7 @@
   case 196:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
     }
 
     break;
@@ -4177,7 +4185,7 @@
   case 197:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
     }
 
     break;
@@ -4185,7 +4193,7 @@
   case 198:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
     }
 
     break;
@@ -4193,7 +4201,7 @@
   case 199:
 
     {
-        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
     }
 
     break;
@@ -4201,6 +4209,22 @@
   case 200:
 
     {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 201:
+
+    {
+        (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
+    }
+
+    break;
+
+  case 202:
+
+    {
         if (!context->supportsExtension("GL_OES_EGL_image_external") &&
             !context->supportsExtension("GL_NV_EGL_stream_consumer_external")) {
             context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
@@ -4210,7 +4234,7 @@
 
     break;
 
-  case 201:
+  case 203:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4221,7 +4245,7 @@
 
     break;
 
-  case 202:
+  case 204:
 
     {
         (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
@@ -4229,7 +4253,7 @@
 
     break;
 
-  case 203:
+  case 205:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
@@ -4237,7 +4261,7 @@
 
     break;
 
-  case 204:
+  case 206:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
@@ -4245,7 +4269,7 @@
 
     break;
 
-  case 205:
+  case 207:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
@@ -4253,7 +4277,7 @@
 
     break;
 
-  case 206:
+  case 208:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
@@ -4261,7 +4285,7 @@
 
     break;
 
-  case 207:
+  case 209:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
@@ -4269,7 +4293,7 @@
 
     break;
 
-  case 208:
+  case 210:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
@@ -4277,7 +4301,7 @@
 
     break;
 
-  case 209:
+  case 211:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
@@ -4285,7 +4309,7 @@
 
     break;
 
-  case 210:
+  case 212:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
@@ -4293,7 +4317,7 @@
 
     break;
 
-  case 211:
+  case 213:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
@@ -4301,7 +4325,7 @@
 
     break;
 
-  case 212:
+  case 214:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
@@ -4309,7 +4333,7 @@
 
     break;
 
-  case 213:
+  case 215:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
@@ -4317,7 +4341,7 @@
 
     break;
 
-  case 214:
+  case 216:
 
     {
         (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
@@ -4325,7 +4349,7 @@
 
     break;
 
-  case 215:
+  case 217:
 
     {
         //
@@ -4339,13 +4363,13 @@
 
     break;
 
-  case 216:
+  case 218:
 
     { context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string); }
 
     break;
 
-  case 217:
+  case 219:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
@@ -4353,13 +4377,13 @@
 
     break;
 
-  case 218:
+  case 220:
 
     { context->enterStructDeclaration((yylsp[0]), *(yyvsp[0].lex).string); }
 
     break;
 
-  case 219:
+  case 221:
 
     {
         (yyval.interm.typeSpecifierNonArray) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
@@ -4367,7 +4391,7 @@
 
     break;
 
-  case 220:
+  case 222:
 
     {
         (yyval.interm.fieldList) = (yyvsp[0].interm.fieldList);
@@ -4375,7 +4399,7 @@
 
     break;
 
-  case 221:
+  case 223:
 
     {
         (yyval.interm.fieldList) = (yyvsp[-1].interm.fieldList);
@@ -4392,7 +4416,7 @@
 
     break;
 
-  case 222:
+  case 224:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
@@ -4400,7 +4424,7 @@
 
     break;
 
-  case 223:
+  case 225:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4409,7 +4433,7 @@
 
     break;
 
-  case 224:
+  case 226:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4418,7 +4442,7 @@
 
     break;
 
-  case 225:
+  case 227:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[0].interm.field));
@@ -4426,7 +4450,7 @@
 
     break;
 
-  case 226:
+  case 228:
 
     {
         context->checkIsNotReserved((yylsp[0]), *(yyvsp[0].lex).string);
@@ -4437,7 +4461,7 @@
 
     break;
 
-  case 227:
+  case 229:
 
     {
         context->checkIsNotReserved((yylsp[-3]), *(yyvsp[-3].lex).string);
@@ -4451,21 +4475,9 @@
 
     break;
 
-  case 228:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-
-    break;
-
-  case 229:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
   case 230:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
@@ -4477,7 +4489,7 @@
 
   case 232:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
@@ -4495,48 +4507,60 @@
 
   case 235:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 236:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 237:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
 
     break;
 
   case 238:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
 
     break;
 
   case 239:
 
-    { (yyval.interm.intermBlock) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 240:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 241:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermBlock) = 0; }
 
     break;
 
   case 242:
 
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 243:
+
+    { context->symbolTable.pop(); }
+
+    break;
+
+  case 244:
+
     {
         if ((yyvsp[-2].interm.intermBlock) != 0) {
             (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
@@ -4546,27 +4570,15 @@
 
     break;
 
-  case 243:
+  case 245:
 
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
-  case 244:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
-  case 245:
-
-    { context->symbolTable.push(); }
-
-    break;
-
   case 246:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
@@ -4578,19 +4590,31 @@
 
   case 248:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock); }
 
     break;
 
   case 249:
 
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 250:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+
+    break;
+
+  case 251:
+
     {
         (yyval.interm.intermBlock) = 0;
     }
 
     break;
 
-  case 250:
+  case 252:
 
     {
         if ((yyvsp[-1].interm.intermBlock)) {
@@ -4601,7 +4625,7 @@
 
     break;
 
-  case 251:
+  case 253:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4611,7 +4635,7 @@
 
     break;
 
-  case 252:
+  case 254:
 
     {
         (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
@@ -4620,19 +4644,19 @@
 
     break;
 
-  case 253:
+  case 255:
 
     { (yyval.interm.intermNode) = 0; }
 
     break;
 
-  case 254:
+  case 256:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
 
     break;
 
-  case 255:
+  case 257:
 
     {
         context->checkIsScalarBool((yylsp[-4]), (yyvsp[-2].interm.intermTypedNode));
@@ -4641,7 +4665,7 @@
 
     break;
 
-  case 256:
+  case 258:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
@@ -4650,7 +4674,7 @@
 
     break;
 
-  case 257:
+  case 259:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
@@ -4659,13 +4683,13 @@
 
     break;
 
-  case 258:
+  case 260:
 
     { context->incrSwitchNestingLevel(); }
 
     break;
 
-  case 259:
+  case 261:
 
     {
         (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
@@ -4674,7 +4698,7 @@
 
     break;
 
-  case 260:
+  case 262:
 
     {
         (yyval.interm.intermCase) = context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4682,7 +4706,7 @@
 
     break;
 
-  case 261:
+  case 263:
 
     {
         (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
@@ -4690,7 +4714,7 @@
 
     break;
 
-  case 262:
+  case 264:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4699,7 +4723,7 @@
 
     break;
 
-  case 263:
+  case 265:
 
     {
         TIntermBinary *initNode = nullptr;
@@ -4714,13 +4738,13 @@
 
     break;
 
-  case 264:
+  case 266:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 265:
+  case 267:
 
     {
         context->symbolTable.pop();
@@ -4730,13 +4754,13 @@
 
     break;
 
-  case 266:
+  case 268:
 
     { context->incrLoopNestingLevel(); }
 
     break;
 
-  case 267:
+  case 269:
 
     {
         context->checkIsScalarBool((yylsp[0]), (yyvsp[-2].interm.intermTypedNode));
@@ -4747,13 +4771,13 @@
 
     break;
 
-  case 268:
+  case 270:
 
     { context->symbolTable.push(); context->incrLoopNestingLevel(); }
 
     break;
 
-  case 269:
+  case 271:
 
     {
         context->symbolTable.pop();
@@ -4763,26 +4787,10 @@
 
     break;
 
-  case 270:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
-  case 271:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
   case 272:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
 
     break;
@@ -4790,7 +4798,7 @@
   case 273:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
 
     break;
@@ -4798,13 +4806,29 @@
   case 274:
 
     {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+
+    break;
+
+  case 275:
+
+    {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+
+    break;
+
+  case 276:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
 
     break;
 
-  case 275:
+  case 277:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
@@ -4813,7 +4837,7 @@
 
     break;
 
-  case 276:
+  case 278:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
@@ -4821,7 +4845,7 @@
 
     break;
 
-  case 277:
+  case 279:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
@@ -4829,7 +4853,7 @@
 
     break;
 
-  case 278:
+  case 280:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
@@ -4837,7 +4861,7 @@
 
     break;
 
-  case 279:
+  case 281:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4845,7 +4869,7 @@
 
     break;
 
-  case 280:
+  case 282:
 
     {
         FRAG_ONLY("discard", (yylsp[-1]));
@@ -4854,7 +4878,7 @@
 
     break;
 
-  case 281:
+  case 283:
 
     {
         (yyval.interm.intermBlock) = new TIntermBlock();
@@ -4865,7 +4889,7 @@
 
     break;
 
-  case 282:
+  case 284:
 
     {
         (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
@@ -4873,31 +4897,31 @@
 
     break;
 
-  case 283:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
-  case 284:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
   case 285:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+
+    break;
+
+  case 286:
+
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+
+    break;
+
+  case 287:
+
+    {
         context->parseFunctionDefinitionHeader((yylsp[0]), &((yyvsp[0].interm).function), &(yyvsp[0].interm).intermAggregate);
     }
 
     break;
 
-  case 286:
+  case 288:
 
     {
         (yyval.interm.intermNode) = context->addFunctionDefinition(*((yyvsp[-2].interm).function), (yyvsp[-2].interm).intermAggregate, (yyvsp[0].interm.intermBlock), (yylsp[-2]));
diff --git a/src/compiler/translator/glslang_tab.h b/src/compiler/translator/glslang_tab.h
index d11ea2d..9d14a5b 100644
--- a/src/compiler/translator/glslang_tab.h
+++ b/src/compiler/translator/glslang_tab.h
@@ -105,92 +105,93 @@
     COHERENT             = 311,
     RESTRICT             = 312,
     VOLATILE             = 313,
-    STRUCT               = 314,
-    VOID_TYPE            = 315,
-    WHILE                = 316,
-    SAMPLER2D            = 317,
-    SAMPLERCUBE          = 318,
-    SAMPLER_EXTERNAL_OES = 319,
-    SAMPLER2DRECT        = 320,
-    SAMPLER2DARRAY       = 321,
-    ISAMPLER2D           = 322,
-    ISAMPLER3D           = 323,
-    ISAMPLERCUBE         = 324,
-    ISAMPLER2DARRAY      = 325,
-    USAMPLER2D           = 326,
-    USAMPLER3D           = 327,
-    USAMPLERCUBE         = 328,
-    USAMPLER2DARRAY      = 329,
-    SAMPLER3D            = 330,
-    SAMPLER3DRECT        = 331,
-    SAMPLER2DSHADOW      = 332,
-    SAMPLERCUBESHADOW    = 333,
-    SAMPLER2DARRAYSHADOW = 334,
-    IMAGE2D              = 335,
-    IIMAGE2D             = 336,
-    UIMAGE2D             = 337,
-    IMAGE3D              = 338,
-    IIMAGE3D             = 339,
-    UIMAGE3D             = 340,
-    IMAGE2DARRAY         = 341,
-    IIMAGE2DARRAY        = 342,
-    UIMAGE2DARRAY        = 343,
-    IMAGECUBE            = 344,
-    IIMAGECUBE           = 345,
-    UIMAGECUBE           = 346,
-    LAYOUT               = 347,
-    IDENTIFIER           = 348,
-    TYPE_NAME            = 349,
-    FLOATCONSTANT        = 350,
-    INTCONSTANT          = 351,
-    UINTCONSTANT         = 352,
-    BOOLCONSTANT         = 353,
-    FIELD_SELECTION      = 354,
-    LEFT_OP              = 355,
-    RIGHT_OP             = 356,
-    INC_OP               = 357,
-    DEC_OP               = 358,
-    LE_OP                = 359,
-    GE_OP                = 360,
-    EQ_OP                = 361,
-    NE_OP                = 362,
-    AND_OP               = 363,
-    OR_OP                = 364,
-    XOR_OP               = 365,
-    MUL_ASSIGN           = 366,
-    DIV_ASSIGN           = 367,
-    ADD_ASSIGN           = 368,
-    MOD_ASSIGN           = 369,
-    LEFT_ASSIGN          = 370,
-    RIGHT_ASSIGN         = 371,
-    AND_ASSIGN           = 372,
-    XOR_ASSIGN           = 373,
-    OR_ASSIGN            = 374,
-    SUB_ASSIGN           = 375,
-    LEFT_PAREN           = 376,
-    RIGHT_PAREN          = 377,
-    LEFT_BRACKET         = 378,
-    RIGHT_BRACKET        = 379,
-    LEFT_BRACE           = 380,
-    RIGHT_BRACE          = 381,
-    DOT                  = 382,
-    COMMA                = 383,
-    COLON                = 384,
-    EQUAL                = 385,
-    SEMICOLON            = 386,
-    BANG                 = 387,
-    DASH                 = 388,
-    TILDE                = 389,
-    PLUS                 = 390,
-    STAR                 = 391,
-    SLASH                = 392,
-    PERCENT              = 393,
-    LEFT_ANGLE           = 394,
-    RIGHT_ANGLE          = 395,
-    VERTICAL_BAR         = 396,
-    CARET                = 397,
-    AMPERSAND            = 398,
-    QUESTION             = 399
+    SHARED               = 314,
+    STRUCT               = 315,
+    VOID_TYPE            = 316,
+    WHILE                = 317,
+    SAMPLER2D            = 318,
+    SAMPLERCUBE          = 319,
+    SAMPLER_EXTERNAL_OES = 320,
+    SAMPLER2DRECT        = 321,
+    SAMPLER2DARRAY       = 322,
+    ISAMPLER2D           = 323,
+    ISAMPLER3D           = 324,
+    ISAMPLERCUBE         = 325,
+    ISAMPLER2DARRAY      = 326,
+    USAMPLER2D           = 327,
+    USAMPLER3D           = 328,
+    USAMPLERCUBE         = 329,
+    USAMPLER2DARRAY      = 330,
+    SAMPLER3D            = 331,
+    SAMPLER3DRECT        = 332,
+    SAMPLER2DSHADOW      = 333,
+    SAMPLERCUBESHADOW    = 334,
+    SAMPLER2DARRAYSHADOW = 335,
+    IMAGE2D              = 336,
+    IIMAGE2D             = 337,
+    UIMAGE2D             = 338,
+    IMAGE3D              = 339,
+    IIMAGE3D             = 340,
+    UIMAGE3D             = 341,
+    IMAGE2DARRAY         = 342,
+    IIMAGE2DARRAY        = 343,
+    UIMAGE2DARRAY        = 344,
+    IMAGECUBE            = 345,
+    IIMAGECUBE           = 346,
+    UIMAGECUBE           = 347,
+    LAYOUT               = 348,
+    IDENTIFIER           = 349,
+    TYPE_NAME            = 350,
+    FLOATCONSTANT        = 351,
+    INTCONSTANT          = 352,
+    UINTCONSTANT         = 353,
+    BOOLCONSTANT         = 354,
+    FIELD_SELECTION      = 355,
+    LEFT_OP              = 356,
+    RIGHT_OP             = 357,
+    INC_OP               = 358,
+    DEC_OP               = 359,
+    LE_OP                = 360,
+    GE_OP                = 361,
+    EQ_OP                = 362,
+    NE_OP                = 363,
+    AND_OP               = 364,
+    OR_OP                = 365,
+    XOR_OP               = 366,
+    MUL_ASSIGN           = 367,
+    DIV_ASSIGN           = 368,
+    ADD_ASSIGN           = 369,
+    MOD_ASSIGN           = 370,
+    LEFT_ASSIGN          = 371,
+    RIGHT_ASSIGN         = 372,
+    AND_ASSIGN           = 373,
+    XOR_ASSIGN           = 374,
+    OR_ASSIGN            = 375,
+    SUB_ASSIGN           = 376,
+    LEFT_PAREN           = 377,
+    RIGHT_PAREN          = 378,
+    LEFT_BRACKET         = 379,
+    RIGHT_BRACKET        = 380,
+    LEFT_BRACE           = 381,
+    RIGHT_BRACE          = 382,
+    DOT                  = 383,
+    COMMA                = 384,
+    COLON                = 385,
+    EQUAL                = 386,
+    SEMICOLON            = 387,
+    BANG                 = 388,
+    DASH                 = 389,
+    TILDE                = 390,
+    PLUS                 = 391,
+    STAR                 = 392,
+    SLASH                = 393,
+    PERCENT              = 394,
+    LEFT_ANGLE           = 395,
+    RIGHT_ANGLE          = 396,
+    VERTICAL_BAR         = 397,
+    CARET                = 398,
+    AMPERSAND            = 399,
+    QUESTION             = 400
 };
 #endif