Add support for new ESSL 3.00 keywords.

TRAC #22715
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2122 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/Compiler.cpp b/src/compiler/Compiler.cpp
index a602c38..71f3397 100644
--- a/src/compiler/Compiler.cpp
+++ b/src/compiler/Compiler.cpp
@@ -179,7 +179,7 @@
         (PaParseStrings(numStrings - firstSource, &shaderStrings[firstSource], NULL, &parseContext) == 0) &&
         (parseContext.treeRoot != NULL);
 
-    shaderVersion = parseContext.shaderVersion();
+    shaderVersion = parseContext.getShaderVersion();
 
     if (success) {
         TIntermNode* root = parseContext.treeRoot;
diff --git a/src/compiler/Diagnostics.cpp b/src/compiler/Diagnostics.cpp
index 41fe811..4632ad0 100644
--- a/src/compiler/Diagnostics.cpp
+++ b/src/compiler/Diagnostics.cpp
@@ -11,7 +11,6 @@
 #include "compiler/preprocessor/SourceLocation.h"
 
 TDiagnostics::TDiagnostics(TInfoSink& infoSink) :
-    mShaderVersion(100),
     mInfoSink(infoSink),
     mNumErrors(0),
     mNumWarnings(0)
@@ -22,11 +21,6 @@
 {
 }
 
-void TDiagnostics::setShaderVersion(int version)
-{
-    mShaderVersion = version;
-}
-
 void TDiagnostics::writeInfo(Severity severity,
                              const pp::SourceLocation& loc,
                              const std::string& reason,
diff --git a/src/compiler/Diagnostics.h b/src/compiler/Diagnostics.h
index b4409e7..e5c2bb3 100644
--- a/src/compiler/Diagnostics.h
+++ b/src/compiler/Diagnostics.h
@@ -17,7 +17,6 @@
     TDiagnostics(TInfoSink& infoSink);
     virtual ~TDiagnostics();
 
-    int shaderVersion() const { return mShaderVersion; }
     TInfoSink& infoSink() { return mInfoSink; }
 
     int numErrors() const { return mNumErrors; }
@@ -39,8 +38,6 @@
                        const std::string& text);
 
   private:
-    int mShaderVersion;
-
     TInfoSink& mInfoSink;
     int mNumErrors;
     int mNumWarnings;
diff --git a/src/compiler/DirectiveHandler.cpp b/src/compiler/DirectiveHandler.cpp
index 85eac8c..64749f3 100644
--- a/src/compiler/DirectiveHandler.cpp
+++ b/src/compiler/DirectiveHandler.cpp
@@ -26,9 +26,11 @@
 }
 
 TDirectiveHandler::TDirectiveHandler(TExtensionBehavior& extBehavior,
-                                     TDiagnostics& diagnostics)
+                                     TDiagnostics& diagnostics,
+                                     int& shaderVersion)
     : mExtensionBehavior(extBehavior),
-      mDiagnostics(diagnostics)
+      mDiagnostics(diagnostics),
+      mShaderVersion(shaderVersion)
 {
 }
 
@@ -151,7 +153,7 @@
     if (version == 100 ||
         version == 300)
     {
-        mDiagnostics.setShaderVersion(version);
+        mShaderVersion = version;
     }
     else
     {
diff --git a/src/compiler/DirectiveHandler.h b/src/compiler/DirectiveHandler.h
index 95ca59d..76efbfa 100644
--- a/src/compiler/DirectiveHandler.h
+++ b/src/compiler/DirectiveHandler.h
@@ -17,7 +17,8 @@
 {
   public:
     TDirectiveHandler(TExtensionBehavior& extBehavior,
-                      TDiagnostics& diagnostics);
+                      TDiagnostics& diagnostics,
+                      int& shaderVersion);
     virtual ~TDirectiveHandler();
 
     const TPragma& pragma() const { return mPragma; }
@@ -41,6 +42,7 @@
     TPragma mPragma;
     TExtensionBehavior& mExtensionBehavior;
     TDiagnostics& mDiagnostics;
+    int& mShaderVersion;
 };
 
 #endif  // COMPILER_DIRECTIVE_HANDLER_H_
diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h
index 1a52ab4..ba88336 100644
--- a/src/compiler/ParseHelper.h
+++ b/src/compiler/ParseHelper.h
@@ -41,13 +41,15 @@
             functionReturnsValue(false),
             checksPrecisionErrors(checksPrecErrors),
             diagnostics(is),
-            directiveHandler(ext, diagnostics),
+            shaderVersion(100),
+            directiveHandler(ext, diagnostics, shaderVersion),
             preprocessor(&diagnostics, &directiveHandler),
             scanner(NULL) {  }
     TIntermediate& intermediate; // to hold and build a parse tree
     TSymbolTable& symbolTable;   // symbol table that goes with the language currently being parsed
     ShShaderType shaderType;              // vertex or fragment language (future: pack or unpack)
     ShShaderSpec shaderSpec;              // The language specification compiler conforms to - GLES2 or WebGL.
+    int shaderVersion;
     int compileOptions;
     const char* sourcePath;      // Path of source file or NULL.
     TIntermNode* treeRoot;       // root of parse tree being created
@@ -66,7 +68,7 @@
     pp::Preprocessor preprocessor;
     void* scanner;
 
-    int shaderVersion() const { return diagnostics.shaderVersion(); }
+    int getShaderVersion() const { return shaderVersion; }
     int numErrors() const { return diagnostics.numErrors(); }
     TInfoSink& infoSink() { return diagnostics.infoSink(); }
     void error(TSourceLoc loc, const char *reason, const char* token,
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index 140a9ae..30b2130 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -1,6 +1,6 @@
 /*
 //
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -15,7 +15,7 @@
 
 %top{
 //
-// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -89,10 +89,10 @@
 "lowp"         { return(LOW_PRECISION); }
 "precision"    { return(PRECISION); }
 
-"attribute"    { return(ATTRIBUTE); }
+"attribute"    { if (context->shaderVersion < 300) return(ATTRIBUTE); return reserved_word(yyscanner); }
 "const"        { return(CONST_QUAL); }
 "uniform"      { return(UNIFORM); }
-"varying"      { return(VARYING); }
+"varying"      { if (context->shaderVersion < 300) return(VARYING); return reserved_word(yyscanner); }
 
 "break"        { return(BREAK); }
 "continue"     { return(CONTINUE); }
@@ -102,6 +102,13 @@
 
 "if"           { return(IF); }
 "else"         { return(ELSE); }
+"switch"       { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SWITCH); }
+"case"         { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CASE); }
+"default"      { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(DEFAULT); }
+
+"centroid"     { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CENTROID); }
+"flat"         { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(FLAT); }
+"smooth"       { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SMOOTH); }
 
 "in"           { return(IN_QUAL); }
 "out"          { return(OUT_QUAL); }
@@ -131,71 +138,133 @@
 "bvec3"        { context->lexAfterType = true; return (BVEC3); }
 "bvec4"        { context->lexAfterType = true; return (BVEC4); }
 
-"sampler2D"       { context->lexAfterType = true; return SAMPLER2D; }
-"samplerCube"     { context->lexAfterType = true; return SAMPLERCUBE; }
+"sampler2D"          { context->lexAfterType = true; return SAMPLER2D; }
+"samplerCube"        { context->lexAfterType = true; return SAMPLERCUBE; }
 "samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
-"sampler2DRect" { context->lexAfterType = true; return SAMPLER2DRECT; }
+"sampler3D"          { if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER3D; }
+"sampler3DRect"      { if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER3DRECT; }
+"sampler2DShadow"    { if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER2DSHADOW; }
+"sampler2DRect"      { context->lexAfterType = true; return SAMPLER2DRECT; }
 
 "struct"       { context->lexAfterType = true; return(STRUCT); }
 
-"asm"          { return reserved_word(yyscanner); }
+    /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
+"coherent"          |
+"restrict"          |
+"readonly"          |
+"writeonly"         |
+"resource"          |
+"atomic_uint"       |
+"noperspective"     |
+"patch"             |
+"sample"            |
+"subroutine"        |
+"common"            |
+"partition"         |
+"active"            |
 
-"class"        { return reserved_word(yyscanner); }
-"union"        { return reserved_word(yyscanner); }
-"enum"         { return reserved_word(yyscanner); }
-"typedef"      { return reserved_word(yyscanner); }
-"template"     { return reserved_word(yyscanner); }
-"this"         { return reserved_word(yyscanner); }
-"packed"       { return reserved_word(yyscanner); }
+"filter"            |
+"image1D"           |
+"image2D"           |
+"image3D"           |
+"imageCube"	        |
+"iimage1D"          |
+"iimage2D"          |
+"iimage3D"          |
+"iimageCube"        |
+"uimage1D"          |
+"uimage2D"          |
+"uimage3D"          |
+"uimageCube"        |
+"image1DArray"      |
+"image2DArray"      |
+"iimage1DArray"     |
+"iimage2DArray"     |
+"uimage1DArray"     |
+"uimage2DArray"     |
+"image1DShadow"     |
+"image2DShadow"     |
+"image1DArrayShadow" |
+"image2DArrayShadow" |
+"imageBuffer"       |
+"iimageBuffer"      |
+"uimageBuffer"      |
 
-"goto"         { return reserved_word(yyscanner); }
-"switch"       { return reserved_word(yyscanner); }
-"default"      { return reserved_word(yyscanner); }
+"sampler1DArray"    |
+"sampler1DArrayShadow" |
+"isampler1D"        |
+"isampler1DArray"   |
+"usampler1D"        |
+"usampler1DArray"   |
+"isampler2DRect"    |
+"usampler2DRect"    |
+"samplerBuffer"     |
+"isamplerBuffer"    |
+"usamplerBuffer"    |
+"sampler2DMS"       |
+"isampler2DMS"      |
+"usampler2DMS"      |
+"sampler2DMSArray"  |
+"isampler2DMSArray" |
+"usampler2DMSArray" { 
+    if (context->shaderVersion < 300) {
+		yylval->lex.string = NewPoolTString(yytext); 
+	    return check_type(yyscanner); 
+	}
+	return reserved_word(yyscanner);
+}
 
-"inline"       { return reserved_word(yyscanner); }
-"noinline"     { return reserved_word(yyscanner); }
-"volatile"     { return reserved_word(yyscanner); }
-"public"       { return reserved_word(yyscanner); }
-"static"       { return reserved_word(yyscanner); }
-"extern"       { return reserved_word(yyscanner); }
-"external"     { return reserved_word(yyscanner); }
-"interface"    { return reserved_word(yyscanner); }
-"flat"         { return reserved_word(yyscanner); }
+    /* Reserved keywords */
+"asm"          |
 
-"long"         { return reserved_word(yyscanner); }
-"short"        { return reserved_word(yyscanner); }
-"double"       { return reserved_word(yyscanner); }
-"half"         { return reserved_word(yyscanner); }
-"fixed"        { return reserved_word(yyscanner); }
-"unsigned"     { return reserved_word(yyscanner); }
-"superp"       { return reserved_word(yyscanner); }
+"class"        |
+"union"        |
+"enum"         |
+"typedef"      |
+"template"     |
+"this"         |
+"packed"       |
 
-"input"        { return reserved_word(yyscanner); }
-"output"       { return reserved_word(yyscanner); }
+"goto"         |
 
-"hvec2"        { return reserved_word(yyscanner); }
-"hvec3"        { return reserved_word(yyscanner); }
-"hvec4"        { return reserved_word(yyscanner); }
-"dvec2"        { return reserved_word(yyscanner); }
-"dvec3"        { return reserved_word(yyscanner); }
-"dvec4"        { return reserved_word(yyscanner); }
-"fvec2"        { return reserved_word(yyscanner); }
-"fvec3"        { return reserved_word(yyscanner); }
-"fvec4"        { return reserved_word(yyscanner); }
+"inline"       |
+"noinline"     |
+"volatile"     |
+"public"       |
+"static"       |
+"extern"       |
+"external"     |
+"interface"    |
 
-"sampler1D"    { return reserved_word(yyscanner); }
-"sampler3D"    { return reserved_word(yyscanner); }
+"long"         |
+"short"        |
+"double"       |
+"half"         |
+"fixed"        |
+"unsigned"     |
+"superp"       |
 
-"sampler1DShadow" { return reserved_word(yyscanner); }
-"sampler2DShadow" { return reserved_word(yyscanner); }
+"input"        |
+"output"       |
 
-"sampler3DRect" { return reserved_word(yyscanner); }
-"sampler2DRectShadow" { return reserved_word(yyscanner); }
+"hvec2"        |
+"hvec3"        |
+"hvec4"        |
+"dvec2"        |
+"dvec3"        |
+"dvec4"        |
+"fvec2"        |
+"fvec3"        |
+"fvec4"        |
 
-"sizeof"       { return reserved_word(yyscanner); }
-"cast"         { return reserved_word(yyscanner); }
+"sampler1D"    |
+"sampler1DShadow" |
+"sampler2DRectShadow" |
 
-"namespace"    { return reserved_word(yyscanner); }
+"sizeof"       |
+"cast"         |
+
+"namespace"    |
 "using"        { return reserved_word(yyscanner); }
 
 {L}({L}|{D})*       {
@@ -237,27 +306,27 @@
 ";"             { context->lexAfterType = false; return(SEMICOLON); }
 ("{"|"<%")      { context->lexAfterType = false; return(LEFT_BRACE); }
 ("}"|"%>")      { return(RIGHT_BRACE); }
-","         { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
-":"         { return(COLON); }
-"="         { context->lexAfterType = false; return(EQUAL); }
-"("         { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
-")"         { context->inTypeParen = false; return(RIGHT_PAREN); }
+","             { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+":"             { return(COLON); }
+"="             { context->lexAfterType = false; return(EQUAL); }
+"("             { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+")"             { context->inTypeParen = false; return(RIGHT_PAREN); }
 ("["|"<:")      { return(LEFT_BRACKET); }
 ("]"|":>")      { return(RIGHT_BRACKET); }
-"."         { BEGIN(FIELDS);  return(DOT); }
-"!"         { return(BANG); }
-"-"         { return(DASH); }
-"~"         { return(TILDE); }
-"+"         { return(PLUS); }
-"*"         { return(STAR); }
-"/"         { return(SLASH); }
-"%"         { return(PERCENT); }
-"<"         { return(LEFT_ANGLE); }
-">"         { return(RIGHT_ANGLE); }
-"|"         { return(VERTICAL_BAR); }
-"^"         { return(CARET); }
-"&"         { return(AMPERSAND); }
-"?"         { return(QUESTION); }
+"."             { BEGIN(FIELDS);  return(DOT); }
+"!"             { return(BANG); }
+"-"             { return(DASH); }
+"~"             { return(TILDE); }
+"+"             { return(PLUS); }
+"*"             { return(STAR); }
+"/"             { return(SLASH); }
+"%"             { return(PERCENT); }
+"<"             { return(LEFT_ANGLE); }
+">"             { return(RIGHT_ANGLE); }
+"|"             { return(VERTICAL_BAR); }
+"^"             { return(CARET); }
+"&"             { return(AMPERSAND); }
+"?"             { return(QUESTION); }
 
 <FIELDS>{L}({L}|{D})* { 
     BEGIN(INITIAL);
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index 8dbcee3..60bbe8f 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -15,7 +15,7 @@
 
 %{
 //
-// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -105,15 +105,31 @@
         context->recover();  \
     }  \
 }
+
+#define ES2_ONLY(S, L) {  \
+    if (context->shaderVersion != 100) {  \
+        context->error(L, " supported in GLSL ES 1.00 only ", S);  \
+        context->recover();  \
+    }  \
+}
+
+#define ES3_ONLY(S, L) {  \
+    if (context->shaderVersion != 300) {  \
+        context->error(L, " supported in GLSL ES 3.00 only ", S);  \
+        context->recover();  \
+    }  \
+}
 %}
 
 %token <lex> INVARIANT HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
 %token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE
-%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN
+%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4
 %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
+%token <lex> CENTROID FLAT SMOOTH
 %token <lex> STRUCT VOID_TYPE WHILE
 %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
+%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW
 
 %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT
 %token <lex> FIELD_SELECTION
@@ -1492,11 +1508,13 @@
     }
     | ATTRIBUTE {
         VERTEX_ONLY("attribute", $1.line);
+		ES2_ONLY("attribute", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "attribute"))
             context->recover();
         $$.setBasic(EbtVoid, EvqAttribute, $1.line);
     }
     | VARYING {
+	    ES2_ONLY("varying", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -1505,6 +1523,7 @@
             $$.setBasic(EbtVoid, EvqVaryingIn, $1.line);
     }
     | INVARIANT VARYING {
+	    ES2_ONLY("varying", $1.line);
         if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index a60dad5..28e1922 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -1,6 +1,6 @@
 #line 17 "./glslang.l"
 //
-// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -68,7 +68,6 @@
 typedef uint16_t flex_uint16_t;
 typedef int32_t flex_int32_t;
 typedef uint32_t flex_uint32_t;
-typedef uint64_t flex_uint64_t;
 #else
 typedef signed char flex_int8_t;
 typedef short int flex_int16_t;
@@ -192,11 +191,6 @@
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #endif
 
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
@@ -210,7 +204,7 @@
      */
     #define  YY_LESS_LINENO(n) \
             do { \
-                yy_size_t yyl;\
+                int yyl;\
                 for ( yyl = n; yyl < yyleng; ++yyl )\
                     if ( yytext[yyl] == '\n' )\
                         --yylineno;\
@@ -232,6 +226,11 @@
 
 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
 
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
 #ifndef YY_STRUCT_YY_BUFFER_STATE
 #define YY_STRUCT_YY_BUFFER_STATE
 struct yy_buffer_state
@@ -249,7 +248,7 @@
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -328,7 +327,7 @@
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
 
 void *yyalloc (yy_size_t ,yyscan_t yyscanner );
 void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
@@ -379,13 +378,13 @@
  */
 #define YY_DO_BEFORE_ACTION \
 	yyg->yytext_ptr = yy_bp; \
-	yyleng = (yy_size_t) (yy_cp - yy_bp); \
+	yyleng = (size_t) (yy_cp - yy_bp); \
 	yyg->yy_hold_char = *yy_cp; \
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 155
-#define YY_END_OF_BUFFER 156
+#define YY_NUM_RULES 214
+#define YY_END_OF_BUFFER 215
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -393,58 +392,91 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[459] =
+static yyconst flex_int16_t yy_accept[759] =
     {   0,
-        0,    0,    0,    0,    0,    0,  156,  154,  153,  153,
-      138,  144,  149,  133,  134,  142,  141,  130,  139,  137,
-      143,  102,  102,  131,  127,  145,  132,  146,  150,   98,
-      135,  136,  148,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,  128,  147,  129,  140,    3,    4,    3,
-      152,  155,  151,  124,  110,  129,  118,  113,  108,  116,
-      106,  117,  107,  105,    2,    1,  109,  104,  100,  101,
-        0,    0,  102,  136,  128,  135,  125,  121,  123,  122,
-      126,   98,  114,  120,   98,   98,   98,   98,   98,   98,
+        0,    0,    0,    0,    0,    0,  215,  213,  212,  212,
+      197,  203,  208,  192,  193,  201,  200,  189,  198,  196,
+      202,  161,  161,  190,  186,  204,  191,  205,  209,  157,
+      194,  195,  207,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  187,  206,  188,  199,    3,    4,    3,
+      211,  214,  210,  183,  169,  188,  177,  172,  167,  175,
+      165,  176,  166,  164,    2,    1,  168,  163,  159,  160,
+        0,    0,  161,  195,  187,  194,  184,  180,  182,  181,
+      185,  157,  173,  179,  157,  157,  157,  157,  157,  157,
 
-       98,   98,   98,   98,   17,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   20,   22,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,  115,  119,    5,
-      151,    0,    1,  104,    0,    0,  103,   99,  111,  112,
-       50,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   18,
-       98,   98,   98,   98,   98,   98,   98,   98,   26,   98,
-       98,   98,   98,   98,   98,   98,   98,   23,   98,   98,
+      157,  157,  157,  157,  157,  157,   17,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+       20,  157,  157,   28,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  174,  178,    5,  210,    0,
+        1,  163,    0,    0,  162,  158,  170,  171,  157,  115,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,   18,  157,  157,  157,  157,  157,  157,
 
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,    0,  105,    0,  104,   98,   28,   98,   98,   95,
-       98,   98,   98,   98,   98,   98,   98,   21,   53,   98,
-       98,   98,   69,   98,   98,   58,   73,   98,   98,   98,
-       98,   98,   98,   98,   98,   70,    9,   33,   34,   35,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   98,   98,   98,   98,   56,   29,   98,   98,
-       98,   98,   98,   98,   36,   37,   38,   27,   98,   98,
-       98,   15,   42,   43,   44,   51,   12,   98,   98,   98,
+      157,  157,  157,  157,   32,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,   29,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,    0,  164,
+        0,  163,  157,  157,  157,   34,  157,  157,   23,  154,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+       21,  118,  157,  157,  157,  157,   26,  157,  157,  123,
+      135,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  132,    9,   39,   40,   41,  157,  157,  157,
 
-       98,   82,   83,   84,   98,   30,   74,   25,   85,   86,
-       87,    7,   79,   80,   81,   98,   24,   77,   98,   98,
-       39,   40,   41,   98,   98,   98,   98,   98,   98,   98,
-       98,   98,   71,   98,   98,   98,   98,   98,   98,   98,
-       98,   52,   98,   97,   98,   98,   19,   98,   98,   98,
-       98,   72,   66,   61,   98,   98,   98,   98,   98,   78,
-       57,   98,   64,   32,   98,   94,   65,   49,   76,   59,
-       98,   98,   98,   98,   98,   98,   98,   98,   60,   31,
-       98,   98,   98,    8,   98,   98,   98,   98,   98,   54,
-       13,   98,   14,   98,   98,   16,   67,   98,   98,   98,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  121,   35,  157,  157,  157,  157,  157,  157,  157,
+      157,   42,   43,   44,   33,  157,  157,  157,  157,  157,
+      157,   15,   48,   49,   50,  157,  116,  157,  157,   12,
+      157,  157,  157,  157,  144,  145,  146,  157,   36,  157,
+      136,   31,  147,  148,  149,    7,  141,  142,  143,  157,
+      157,  157,   30,  139,  157,  157,  157,   45,   46,   47,
+      157,  157,  157,  157,  157,  157,  157,   66,  157,  157,
+      157,  157,  157,  157,  157,  133,  157,  157,  157,  157,
 
-       62,   98,   98,   98,   98,   98,   98,   55,   75,   63,
-       11,   68,    6,   96,   10,   88,   45,   89,   98,   98,
-       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
-       46,   98,   98,   98,   98,   98,   98,   98,   48,   98,
-       92,   98,   98,   98,   98,   98,   90,   98,   91,   98,
-       98,   98,   98,   98,   98,   47,   93,    0
+      157,  157,  157,  157,  157,  157,  157,  117,  157,  157,
+      156,  157,  157,   19,  157,   71,  157,  157,  157,  157,
+       69,  157,  157,  157,  134,  129,   72,  157,  157,  157,
+      157,  157,  157,  124,  157,  157,  157,  157,  157,  157,
+      157,  140,  122,  157,  157,  127,  157,  157,  157,   38,
+       67,  153,   27,  128,   58,  157,  138,   22,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,   24,   37,  157,  157,  157,  157,  157,  157,
+       73,   74,   75,  157,  157,  157,  157,  157,    8,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+
+      119,  157,  157,  157,  157,  157,   13,  157,  157,   14,
+      157,  157,  157,  157,   25,   59,   16,  130,   77,   78,
+       79,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  125,  157,  157,  157,   61,   63,   60,
+      157,  157,  157,  157,  157,  157,  157,  120,   81,   82,
+       83,  157,  157,  137,  157,  126,  157,  157,   11,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,   76,  131,
+        6,  157,  157,  157,  155,  157,   70,   10,  150,   51,
+       54,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,   62,  157,  157,  157,  157,   80,  157,  157,
+
+      157,  157,  157,  100,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,   68,  157,  157,  157,
+       84,  102,  157,  157,   64,  157,  157,  157,  157,  157,
+      157,  157,   95,  157,  157,  157,  157,  157,  157,  157,
+      109,  157,  157,  157,  157,   52,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,   96,   85,  157,   86,
+      157,  157,  110,  157,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,   97,  157,  111,  157,
+      157,   87,   88,  157,   91,  157,   92,  157,  157,  157,
+      157,   65,  157,  157,  157,   57,  157,   55,  106,  157,
+
+       89,   90,  157,  157,  157,  157,  157,  157,  157,  157,
+      104,  107,   98,  157,  157,  157,  157,  157,  157,  157,
+      105,  108,  157,  157,  101,  157,  157,  151,  157,  157,
+       56,  157,  103,  157,  157,  157,  157,  157,  112,  157,
+      157,  157,  157,  157,  113,  157,  157,  157,  114,   93,
+       94,  157,  157,   53,  157,  152,   99,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -455,14 +487,14 @@
         1,    2,    4,    1,    1,    1,    5,    6,    1,    7,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   20,   20,   21,   21,   22,   23,   24,
-       25,   26,   27,    1,   28,   28,   29,   30,   31,   28,
-       32,   32,   32,   32,   32,   32,   32,   32,   33,   32,
-       32,   34,   35,   32,   32,   32,   32,   36,   32,   32,
-       37,    1,   38,   39,   32,    1,   40,   41,   42,   43,
+       25,   26,   27,    1,   28,   29,   30,   31,   32,   33,
+       34,   34,   34,   34,   34,   34,   35,   34,   36,   34,
+       34,   37,   38,   34,   34,   34,   34,   39,   34,   34,
+       40,    1,   41,   42,   43,    1,   44,   45,   46,   47,
 
-       44,   45,   46,   47,   48,   32,   49,   50,   51,   52,
-       53,   54,   32,   55,   56,   57,   58,   59,   60,   61,
-       62,   63,   64,   65,   66,   67,    1,    1,    1,    1,
+       48,   49,   50,   51,   52,   34,   53,   54,   55,   56,
+       57,   58,   34,   59,   60,   61,   62,   63,   64,   65,
+       66,   67,   68,   69,   70,   71,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -479,214 +511,315 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[68] =
+static yyconst flex_int32_t yy_meta[72] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    3,    3,    3,    3,    3,    3,
         3,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-        3,    4,    4,    4,    4,    4,    1,    1,    1,    3,
-        3,    3,    3,    3,    3,    4,    4,    4,    4,    4,
+        3,    3,    3,    4,    4,    4,    4,    4,    4,    1,
+        1,    1,    4,    3,    3,    3,    3,    3,    3,    4,
         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-        4,    4,    4,    1,    1,    1,    1
+        4,    4,    4,    4,    4,    4,    4,    1,    1,    1,
+        1
     } ;
 
-static yyconst flex_int16_t yy_base[464] =
+static yyconst flex_int16_t yy_base[764] =
     {   0,
-        0,    0,   65,   66,   75,    0,  680,  681,  681,  681,
-      654,   45,  137,  681,  681,  653,  134,  681,  133,  131,
-      146,  159,  168,  651,  681,  186,  651,   47,  681,    0,
-      681,  681,  128,  100,  110,  152,  156,  146,  166,  622,
-      173,  109,  621,  126,  177,  615,  178,  628,  187,  184,
-      141,  197,  624,  681,  157,  681,  681,  681,  681,  656,
-      681,  681,    0,  681,  681,  681,  681,  681,  681,  681,
-      681,  681,  681,  236,  681,    0,  681,  243,  273,  282,
-      304,    0,  314,  681,  681,  681,  644,  681,  681,  681,
-      643,    0,  681,  681,  616,  609,  612,  620,  619,  606,
+        0,    0,   69,   70,   79,    0,  988,  989,  989,  989,
+      962,   49,  145,  989,  989,  961,  142,  989,  141,  139,
+      154,  167,  176,  959,  989,  176,  959,   51,  989,    0,
+      989,  989,  136,  116,  112,  159,  157,  156,  173,  926,
+      174,  179,  925,  175,  189,  919,  185,  932,  197,  203,
+      204,  209,  113,  989,  186,  989,  989,  989,  989,  965,
+      989,  989,    0,  989,  989,  989,  989,  989,  989,  989,
+      989,  989,  989,  255,  989,    0,  989,  262,  280,  298,
+      317,    0,  332,  989,  989,  989,  953,  989,  989,  989,
+      952,    0,  989,  989,  915,  920,  206,  917,  925,  924,
 
-      621,  608,  614,  602,  599,  612,  599,  596,  596,  602,
-      590,  189,  595,  605,  591,  597,  600,  601,    0,  216,
-      600,  188,  586,  599,  590,  592,  582,  596,  593,  595,
-      578,  583,  580,  569,  183,  577,  582,  578,  580,  569,
-      572,  220,  577,  569,  581,  176,  574,  681,  681,  681,
-        0,  331,    0,  344,  361,  290,  374,    0,  681,  681,
-        0,  566,  570,  579,  576,  560,  560,  215,  575,  572,
-      572,  570,  567,  559,  565,  552,  563,  549,  565,    0,
-      562,  550,  557,  554,  558,  551,  540,  539,  552,  555,
-      552,  547,  538,  260,  543,  546,  537,  534,  538,  544,
+      911,  914,  925,  233,  919,  907,  904,  917,  904,  901,
+      901,  907,  237,  248,  901,  911,  897,  903,  906,  907,
+        0,  899,  909,  300,  908,  903,  109,  889,  902,  893,
+      268,  886,  262,  898,  900,  246,  889,  886,  875,  884,
+      206,  264,  888,  884,  886,  875,  878,  880,  279,  315,
+      875,  887,  150,  880,  879,  989,  989,  989,    0,  356,
+        0,  366,  384,  391,  400,    0,  989,  989,  878,    0,
+      874,  869,  873,  882,  879,  294,  863,  863,  874,  866,
+      225,  876,  873,  873,  871,  868,  860,  866,  853,  851,
+      863,  849,  865,    0,  862,  850,  857,  854,  858,  859,
 
-      535,  526,  529,  527,  537,  523,  521,  534,  520,  522,
-      519,  530,  529,  283,  524,  519,  508,  264,  526,  528,
-      517,  381,  388,  395,  402,  518,    0,  516,  320,    0,
-      508,  506,  514,  503,  520,  509,  336,    0,    0,  503,
-      513,  513,    0,  498,  349,    0,    0,  500,  366,  501,
-      495,  494,  495,  494,  407,    0,    0,    0,    0,    0,
-      490,  491,  496,  487,  500,  495,  494,  486,  490,  482,
-      485,  489,  494,  480,  492,  483,    0,    0,  489,  478,
-      478,  483,  482,  479,    0,    0,    0,    0,  469,  481,
-      483,    0,    0,    0,    0,    0,    0,  471,  472,  466,
+      852,  849,  838,  837,  850,  853,  841,  849,  844,  835,
+      371,  840,  843,  834,  841,  830,  834,  825,  839,  838,
+      829,  835,  283,  819,  822,  820,  830,  820,  815,  813,
+      815,  825,  811,  813,  810,  821,  820,  823,  313,  814,
+      810,  808,  797,  374,  815,  817,  806,  798,  407,  414,
+      421,  428,  795,  805,  804,    0,  802,  433,    0,    0,
+      795,  793,  793,  794,  789,  797,  786,  803,  792,  436,
+        0,    0,  786,  796,  795,  795,    0,  780,  439,    0,
+        0,  782,  442,  789,  790,  781,  775,  774,  775,  774,
+      774,  445,    0,    0,    0,    0,    0,  769,  770,  775,
 
-      476,    0,    0,    0,  467,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  474,    0,    0,  472,  468,
-        0,    0,    0,  464,  460,  465,  455,  468,  454,  467,
-      456,  463,    0,  461,  463,  447,  449,  455,  461,  456,
-      444,    0,  446,    0,  445,  448,    0,  437,  436,  436,
-      449,    0,  451,    0,  450,  449,  434,  447,  434,    0,
-        0,  437,    0,    0,  429,    0,    0,    0,    0,    0,
-      426,  437,  430,  436,  433,  428,  420,  432,    0,    0,
-      425,  432,  421,    0,  430,  427,  417,  411,  425,    0,
-        0,  425,    0,  423,  422,    0,    0,  421,  407,  419,
+      769,  765,  778,  773,  773,  771,  770,  764,  758,  760,
+      759,  763,  755,  758,  753,  761,  766,  754,  751,  763,
+      754,    0,    0,  760,  756,  748,  748,  753,  744,  751,
+      748,    0,    0,    0,    0,  738,  750,  749,  748,  749,
+      749,    0,    0,    0,    0,  736,    0,  744,  735,    0,
+      734,  735,  729,  739,    0,    0,    0,  730,    0,  726,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  736,
+      449,  735,    0,    0,  733,  729,  726,    0,    0,    0,
+      724,  720,  725,  716,  714,  727,  712,    0,  712,  725,
+      714,  710,  716,  711,  718,    0,  716,  713,  717,  701,
 
-        0,  410,  431,  430,  429,  400,  396,    0,    0,    0,
-        0,    0,    0,    0,    0,  421,  250,  421,  411,  384,
-      392,  394,  390,  392,  391,  390,  393,  390,  391,  388,
-        0,  332,  343,  317,  329,  313,  317,  304,  321,  291,
-        0,  302,  280,  271,  255,  262,    0,  256,    0,  232,
-      206,  212,  148,  159,  113,    0,    0,  681,  442,  444,
-      446,  450,  161
+      699,  702,  708,  714,  709,  708,  696,    0,  698,  699,
+        0,  696,  699,    0,  693,    0,  706,  686,  695,  690,
+        0,  683,  683,  696,    0,  698,    0,  452,  710,  709,
+      708,  676,  675,    0,  692,  691,  686,  675,  688,  675,
+      672,    0,    0,  677,  676,    0,  673,  680,  679,    0,
+      665,    0,    0,    0,    0,  662,    0,    0,  661,  672,
+      455,  665,  671,  670,  667,  662,  659,  652,  652,  665,
+      650,  662,    0,    0,  655,  677,  676,  675,  643,  642,
+      341,  448,    0,  654,  657,  655,  644,  640,    0,  652,
+      649,  648,  638,  637,  627,  644,  630,  471,  638,  641,
+
+        0,  657,  656,  655,  623,  622,    0,  636,  623,    0,
+      633,  626,  627,  630,    0,    0,    0,    0,  649,  648,
+        0,  626,  629,  614,  621,  612,  619,  620,  620,  619,
+      605,  475,  617,    0,  618,  607,  606,    0,    0,    0,
+      630,  629,  628,  596,  595,  591,  599,    0,  626,  625,
+        0,  603,  606,    0,  477,    0,  584,  593,    0,  589,
+      588,  597,  597,  585,  599,  583,  597,  592,    0,    0,
+        0,  608,  607,  575,    0,  575,    0,    0,  452,  460,
+      598,  585,  588,  571,  583,  571,  570,  579,  579,  595,
+      594,  562,    0,  562,  563,  562,  572,    0,  575,  571,
+
+      573,  569,  556,  586,  203,  564,  560,  552,  559,  571,
+      560,  556,  558,  556,  556,  555,    0,  543,  542,  552,
+        0,  571,  208,  549,    0,  553,  552,  536,  528,  536,
+      526,  534,    0,  531,  551,  540,  538,  523,  526,  540,
+      555,  536,  537,  534,  531,    0,  519,  533,  532,  516,
+      515,  535,  524,  522,  504,  503,    0,  530,  503,  528,
+      501,  505,  535,  516,  513,  512,  515,  511,  498,  495,
+      508,  493,  494,  496,  485,  484,    0,  490,  520,  501,
+      498,    0,    0,  494,    0,  493,    0,  499,  483,  480,
+      481,    0,  473,  481,  478,  498,  478,    0,    0,  490,
+
+        0,    0,  489,  473,  470,  471,  485,  484,  461,  467,
+        0,    0,  487,  460,  479,  471,  457,  466,  453,  457,
+        0,    0,  458,  455,    0,  455,  445,    0,  417,  433,
+        0,  439,    0,  430,  356,  340,  329,  334,    0,  318,
+      328,  290,  279,  277,    0,  278,  267,  266,    0,    0,
+        0,  211,  158,    0,  126,    0,    0,  989,  506,  508,
+      510,  514,  171
     } ;
 
-static yyconst flex_int16_t yy_def[464] =
+static yyconst flex_int16_t yy_def[764] =
     {   0,
-      458,    1,  459,  459,  458,    5,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  460,
-      458,  458,  458,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  461,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  462,  458,  458,  458,  458,
-      458,  463,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  460,  458,  458,  460,  460,  460,  460,  460,  460,
+      758,    1,  759,  759,  758,    5,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  760,
+      758,  758,  758,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  761,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  762,  758,  758,  758,  758,
+      758,  763,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  760,  758,  758,  760,  760,  760,  760,  760,  760,
 
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  458,  458,  458,
-      461,  458,  462,  458,  458,  458,  458,  463,  458,  458,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  758,  758,  758,  761,  758,
+      762,  758,  758,  758,  758,  763,  758,  758,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
 
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  458,  458,  458,  458,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  758,  758,
+      758,  758,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
 
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
 
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
-      460,  460,  460,  460,  460,  460,  460,    0,  458,  458,
-      458,  458,  458
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,    0,  758,  758,
+      758,  758,  758
     } ;
 
-static yyconst flex_int16_t yy_nxt[749] =
+static yyconst flex_int16_t yy_nxt[1061] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
        23,   24,   25,   26,   27,   28,   29,   30,   30,   30,
-       30,   30,   30,   30,   30,   30,   31,   32,   33,   34,
-       35,   36,   37,   38,   39,   40,   41,   42,   30,   43,
-       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
-       30,   30,   30,   54,   55,   56,   57,   59,   59,   65,
-       66,   90,   91,   60,   60,    8,   61,   62,    8,    8,
-        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+       30,   30,   30,   30,   30,   30,   30,   30,   30,   31,
+       32,   33,   30,   34,   35,   36,   37,   38,   39,   40,
+       41,   42,   30,   43,   44,   45,   46,   47,   48,   49,
+       50,   51,   52,   53,   30,   30,   30,   54,   55,   56,
+       57,   59,   59,   65,   66,   90,   91,   60,   60,    8,
+       61,   62,    8,    8,    8,    8,    8,    8,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
 
-        8,    8,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,    8,    8,    8,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+        8,    8,    8,    8,    8,    8,   63,   63,   63,   63,
        63,   63,   63,   63,   63,   63,   63,   63,    8,    8,
-        8,    8,   67,   70,   72,   74,   74,   74,   74,   74,
-       74,   74,   93,  119,   75,   95,   96,   73,   71,   76,
-      120,   68,   97,  158,   98,  123,   94,  121,   99,  124,
-       77,   78,  457,   79,   79,   79,   79,   79,   79,   80,
-       78,  148,   83,   83,   83,   83,   83,   83,   83,   81,
-       85,  100,  142,  456,   82,  107,  143,  108,   81,  103,
+        8,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   63,   63,   63,    8,    8,    8,    8,
+       67,   70,   72,   74,   74,   74,   74,   74,   74,   74,
+       93,   95,   75,  154,  209,   73,   71,   76,   98,   68,
+       99,  155,  210,  166,  100,   96,   97,   94,   77,   78,
+       85,   79,   79,   79,   79,   79,   79,   80,   78,  757,
+       83,   83,   83,   83,   83,   83,   83,   86,   81,   87,
 
-      455,  101,   81,  104,  102,  110,  109,   86,  105,   87,
-       88,   81,  116,  111,  106,  112,  125,  128,  113,   82,
-      117,  149,  206,  219,  114,  220,  132,  138,  178,  126,
-      139,  118,  129,  133,  134,  130,  144,  207,  140,  192,
-      145,  179,  454,  135,  136,  141,  137,  193,  453,  146,
-       74,   74,   74,   74,   74,   74,   74,  154,  154,  154,
-      154,  154,  154,  154,  452,  186,  152,  214,  187,  188,
-      232,  233,  189,  155,  190,  215,  258,  259,  260,  152,
-      285,  286,  287,  422,  423,   78,  155,   79,   79,   79,
-       79,   79,   79,   80,   78,  451,   80,   80,   80,   80,
+       88,  245,  101,  246,  105,   82,  102,   81,  106,  109,
+      156,  110,  103,  107,   81,  104,  112,  118,  128,  108,
+      111,  756,  129,   81,  113,  119,  114,  121,  133,  115,
+      122,   82,  130,  123,  124,  116,  120,  635,  125,  636,
+      137,  126,  652,  134,  653,  131,  135,  138,  139,  229,
+      144,  140,  151,  145,  157,  148,  152,  141,  142,  149,
+      143,  146,  171,  150,  230,  153,  172,  755,  147,   74,
+       74,   74,   74,   74,   74,   74,  162,  162,  162,  162,
+      162,  162,  162,  179,  265,  266,  160,  180,  181,  222,
+      190,  192,   78,  163,   79,   79,   79,   79,   79,   79,
 
-       80,   80,   80,   81,  157,  157,  157,  157,  157,  157,
-      157,  450,   81,  156,  449,  156,   81,  448,  157,  157,
-      157,  157,  157,  157,  157,   81,   78,  280,   83,   83,
-       83,   83,   83,   83,   83,  281,  293,  294,  295,  447,
-      222,  446,  222,  445,   81,  223,  223,  223,  223,  223,
-      223,  223,  302,  303,  304,  444,  443,   81,  154,  154,
-      154,  154,  154,  154,  154,  309,  310,  311,  442,  441,
-      224,  440,  224,  439,  155,  225,  225,  225,  225,  225,
-      225,  225,  313,  314,  315,  438,  437,  155,  157,  157,
-      157,  157,  157,  157,  157,  223,  223,  223,  223,  223,
+       80,  191,  160,  754,  193,  223,  224,  217,  231,  163,
+       78,   81,   80,   80,   80,   80,   80,   80,   80,  214,
+      218,  232,  219,  753,  752,  215,  164,   81,  164,   81,
+      239,  165,  165,  165,  165,  165,  165,  165,  240,  309,
+      751,  259,  750,  310,   78,   81,   83,   83,   83,   83,
+       83,   83,   83,  202,  260,  749,  203,  204,  241,  748,
+      205,  326,  206,   81,  747,  249,  242,  249,  524,  327,
+      250,  250,  250,  250,  250,  250,  250,  746,  525,   81,
+      162,  162,  162,  162,  162,  162,  162,  295,  296,  297,
+      332,  333,  334,  251,  745,  251,  744,  163,  252,  252,
 
-      223,  223,  223,  223,  223,  223,  223,  223,  223,  225,
-      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
-      225,  225,  225,  321,  322,  323,  403,  404,  405,  436,
-      435,  434,  433,  432,  431,  430,  429,  428,  427,  406,
-      426,  407,   58,   58,   58,   58,   92,   92,  151,  151,
-      153,  425,  153,  153,  424,  421,  420,  419,  418,  417,
-      416,  415,  414,  413,  412,  411,  410,  409,  408,  402,
+      252,  252,  252,  252,  252,  165,  165,  165,  165,  165,
+      165,  165,  743,  163,  165,  165,  165,  165,  165,  165,
+      165,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  252,  252,  252,  252,  252,
+      252,  252,  252,  252,  252,  252,  252,  252,  252,  343,
+      344,  345,  355,  356,  357,  363,  364,  365,  367,  368,
+      369,  378,  379,  380,  429,  430,  431,  476,  477,  478,
+      502,  503,  504,  742,  741,  526,  740,  432,  433,  608,
+      479,  480,  739,  505,  506,  527,  541,  542,  543,  609,
+      572,  573,  590,  591,  610,  738,  611,  612,  737,  544,
+
+      545,  736,  546,  574,  735,  592,   58,   58,   58,   58,
+       92,   92,  159,  159,  161,  734,  161,  161,  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,  700,  699,  698,  697,  696,  695,  694,  693,  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,  667,  666,  665,  664,  663,  662,
+      661,  660,  659,  658,  657,  656,  655,  654,  651,  650,
+
+      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  634,  633,  632,  631,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  607,  606,  605,  604,  603,
+      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
+      589,  588,  587,  586,  585,  584,  583,  582,  581,  580,
+      579,  578,  577,  576,  575,  571,  570,  569,  568,  567,
+      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
+      556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
+      540,  539,  538,  537,  536,  535,  534,  533,  532,  531,
+
+      530,  529,  528,  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,  475,  474,  473,  472,  471,  470,  469,  468,  467,
+      466,  465,  464,  463,  462,  461,  460,  459,  458,  457,
+      456,  455,  454,  453,  452,  451,  450,  449,  448,  447,
+      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
+      436,  435,  434,  428,  427,  426,  425,  424,  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,  387,  386,  385,  384,  383,  382,
-      381,  380,  379,  378,  377,  376,  375,  374,  373,  372,
+      381,  377,  376,  375,  374,  373,  372,  371,  370,  366,
+      362,  361,  360,  359,  358,  354,  353,  352,  351,  350,
+      349,  348,  347,  346,  342,  341,  340,  339,  338,  337,
+      336,  335,  331,  330,  329,  328,  325,  324,  323,  322,
+      321,  320,  319,  318,  317,  316,  315,  314,  313,  312,
+      311,  308,  307,  306,  305,  304,  303,  302,  301,  300,
+      299,  298,  294,  293,  292,  291,  290,  289,  288,  287,
 
-      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
-      361,  360,  359,  358,  357,  356,  355,  354,  353,  352,
-      351,  350,  349,  348,  347,  346,  345,  344,  343,  342,
-      341,  340,  339,  338,  337,  336,  335,  334,  333,  332,
-      331,  330,  329,  328,  327,  326,  325,  324,  320,  319,
-      318,  317,  316,  312,  308,  307,  306,  305,  301,  300,
-      299,  298,  297,  296,  292,  291,  290,  289,  288,  284,
-      283,  282,  279,  278,  277,  276,  275,  274,  273,  272,
-      271,  270,  269,  268,  267,  266,  265,  264,  263,  262,
-      261,  257,  256,  255,  254,  253,  252,  251,  250,  249,
+      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
+      276,  275,  274,  273,  272,  271,  270,  269,  268,  267,
+      264,  263,  262,  261,  258,  257,  256,  255,  254,  253,
+      248,  247,  244,  243,  238,  237,  236,  235,  234,  233,
+      228,  227,  226,  225,  221,  220,  216,  213,  212,  211,
+      208,  207,  201,  200,  199,  198,  197,  196,  195,  194,
+      189,  188,  187,  186,  185,  184,  183,  182,  178,  177,
+      176,  175,  174,  173,  170,  169,  168,  167,  158,  136,
+      132,  127,  117,   89,   84,   69,   64,  758,    7,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
 
-      248,  247,  246,  245,  244,  243,  242,  241,  240,  239,
-      238,  237,  236,  235,  234,  231,  230,  229,  228,  227,
-      226,  221,  218,  217,  216,  213,  212,  211,  210,  209,
-      208,  205,  204,  203,  202,  201,  200,  199,  198,  197,
-      196,  195,  194,  191,  185,  184,  183,  182,  181,  180,
-      177,  176,  175,  174,  173,  172,  171,  170,  169,  168,
-      167,  166,  165,  164,  163,  162,  161,  160,  159,  150,
-      147,  131,  127,  122,  115,   89,   84,   69,   64,  458,
-        7,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758
     } ;
 
-static yyconst flex_int16_t yy_chk[749] =
+static yyconst flex_int16_t yy_chk[1061] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -694,8 +827,8 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    3,    4,   12,
-       12,   28,   28,    3,    4,    5,    5,    5,    5,    5,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    3,    4,   12,   12,   28,   28,    3,    4,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
 
@@ -703,77 +836,111 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,   13,   17,   19,   20,   20,   20,   20,   20,
-       20,   20,   33,   42,   21,   34,   34,   19,   17,   21,
-       42,   13,   35,  463,   35,   44,   33,   42,   35,   44,
-       21,   22,  455,   22,   22,   22,   22,   22,   22,   22,
-       23,   55,   23,   23,   23,   23,   23,   23,   23,   22,
-       26,   36,   51,  454,   22,   38,   51,   38,   23,   37,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+       13,   17,   19,   20,   20,   20,   20,   20,   20,   20,
+       33,   34,   21,   53,  127,   19,   17,   21,   35,   13,
+       35,   53,  127,  763,   35,   34,   34,   33,   21,   22,
+       26,   22,   22,   22,   22,   22,   22,   22,   23,  755,
+       23,   23,   23,   23,   23,   23,   23,   26,   22,   26,
 
-      453,   36,   22,   37,   36,   39,   38,   26,   37,   26,
-       26,   23,   41,   39,   37,   39,   45,   47,   39,   22,
-       41,   55,  135,  146,   39,  146,   49,   50,  112,   45,
-       50,   41,   47,   49,   49,   47,   52,  135,   50,  122,
-       52,  112,  452,   49,   49,   50,   49,  122,  451,   52,
-       74,   74,   74,   74,   74,   74,   74,   78,   78,   78,
-       78,   78,   78,   78,  450,  120,   74,  142,  120,  120,
-      168,  168,  120,   78,  120,  142,  194,  194,  194,   74,
-      218,  218,  218,  417,  417,   79,   78,   79,   79,   79,
-       79,   79,   79,   79,   80,  448,   80,   80,   80,   80,
+       26,  153,   36,  153,   37,   22,   36,   23,   37,   38,
+       55,   38,   36,   37,   22,   36,   39,   41,   44,   37,
+       38,  753,   44,   23,   39,   41,   39,   42,   47,   39,
+       42,   22,   45,   42,   42,   39,   41,  605,   42,  605,
+       49,   42,  623,   47,  623,   45,   47,   49,   49,  141,
+       50,   49,   52,   50,   55,   51,   52,   49,   49,   51,
+       49,   50,   97,   51,  141,   52,   97,  752,   50,   74,
+       74,   74,   74,   74,   74,   74,   78,   78,   78,   78,
+       78,   78,   78,  104,  181,  181,   74,  104,  104,  136,
+      113,  114,   79,   78,   79,   79,   79,   79,   79,   79,
 
-       80,   80,   80,   79,  156,  156,  156,  156,  156,  156,
-      156,  446,   80,   81,  445,   81,   79,  444,   81,   81,
-       81,   81,   81,   81,   81,   80,   83,  214,   83,   83,
-       83,   83,   83,   83,   83,  214,  229,  229,  229,  443,
-      152,  442,  152,  440,   83,  152,  152,  152,  152,  152,
-      152,  152,  237,  237,  237,  439,  438,   83,  154,  154,
-      154,  154,  154,  154,  154,  245,  245,  245,  437,  436,
-      155,  435,  155,  434,  154,  155,  155,  155,  155,  155,
-      155,  155,  249,  249,  249,  433,  432,  154,  157,  157,
-      157,  157,  157,  157,  157,  222,  222,  222,  222,  222,
+       79,  113,   74,  748,  114,  136,  136,  133,  142,   78,
+       80,   79,   80,   80,   80,   80,   80,   80,   80,  131,
+      133,  142,  133,  747,  746,  131,   81,   79,   81,   80,
+      149,   81,   81,   81,   81,   81,   81,   81,  149,  223,
+      744,  176,  743,  223,   83,   80,   83,   83,   83,   83,
+       83,   83,   83,  124,  176,  742,  124,  124,  150,  741,
+      124,  239,  124,   83,  740,  160,  150,  160,  481,  239,
+      160,  160,  160,  160,  160,  160,  160,  738,  481,   83,
+      162,  162,  162,  162,  162,  162,  162,  211,  211,  211,
+      244,  244,  244,  163,  737,  163,  736,  162,  163,  163,
 
-      222,  222,  223,  223,  223,  223,  223,  223,  223,  224,
-      224,  224,  224,  224,  224,  224,  225,  225,  225,  225,
-      225,  225,  225,  255,  255,  255,  388,  388,  388,  430,
-      429,  428,  427,  426,  425,  424,  423,  422,  421,  388,
-      420,  388,  459,  459,  459,  459,  460,  460,  461,  461,
-      462,  419,  462,  462,  418,  416,  407,  406,  405,  404,
-      403,  402,  400,  399,  398,  395,  394,  392,  389,  387,
-      386,  385,  383,  382,  381,  378,  377,  376,  375,  374,
-      373,  372,  371,  365,  362,  359,  358,  357,  356,  355,
-      353,  351,  350,  349,  348,  346,  345,  343,  341,  340,
+      163,  163,  163,  163,  163,  164,  164,  164,  164,  164,
+      164,  164,  735,  162,  165,  165,  165,  165,  165,  165,
+      165,  249,  249,  249,  249,  249,  249,  249,  250,  250,
+      250,  250,  250,  250,  250,  251,  251,  251,  251,  251,
+      251,  251,  252,  252,  252,  252,  252,  252,  252,  258,
+      258,  258,  270,  270,  270,  279,  279,  279,  283,  283,
+      283,  292,  292,  292,  371,  371,  371,  428,  428,  428,
+      461,  461,  461,  734,  732,  482,  730,  371,  371,  579,
+      428,  428,  729,  461,  461,  482,  498,  498,  498,  579,
+      532,  532,  555,  555,  580,  727,  580,  580,  726,  498,
 
-      339,  338,  337,  336,  335,  334,  332,  331,  330,  329,
-      328,  327,  326,  325,  324,  320,  319,  316,  305,  301,
-      300,  299,  298,  291,  290,  289,  284,  283,  282,  281,
-      280,  279,  276,  275,  274,  273,  272,  271,  270,  269,
-      268,  267,  266,  265,  264,  263,  262,  261,  254,  253,
-      252,  251,  250,  248,  244,  242,  241,  240,  236,  235,
-      234,  233,  232,  231,  228,  226,  221,  220,  219,  217,
-      216,  215,  213,  212,  211,  210,  209,  208,  207,  206,
-      205,  204,  203,  202,  201,  200,  199,  198,  197,  196,
-      195,  193,  192,  191,  190,  189,  188,  187,  186,  185,
+      498,  724,  498,  532,  723,  555,  759,  759,  759,  759,
+      760,  760,  761,  761,  762,  720,  762,  762,  719,  718,
+      717,  716,  715,  714,  713,  710,  709,  708,  707,  706,
+      705,  704,  703,  700,  697,  696,  695,  694,  693,  691,
+      690,  689,  688,  686,  684,  681,  680,  679,  678,  676,
+      675,  674,  673,  672,  671,  670,  669,  668,  667,  666,
+      665,  664,  663,  662,  661,  660,  659,  658,  656,  655,
+      654,  653,  652,  651,  650,  649,  648,  647,  645,  644,
+      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
+      632,  631,  630,  629,  628,  627,  626,  624,  622,  620,
 
-      184,  183,  182,  181,  179,  178,  177,  176,  175,  174,
-      173,  172,  171,  170,  169,  167,  166,  165,  164,  163,
-      162,  147,  145,  144,  143,  141,  140,  139,  138,  137,
-      136,  134,  133,  132,  131,  130,  129,  128,  127,  126,
-      125,  124,  123,  121,  118,  117,  116,  115,  114,  113,
-      111,  110,  109,  108,  107,  106,  105,  104,  103,  102,
-      101,  100,   99,   98,   97,   96,   95,   91,   87,   60,
-       53,   48,   46,   43,   40,   27,   24,   16,   11,    7,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
+      619,  618,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  604,  603,  602,  601,  600,  599,  597,
+      596,  595,  594,  592,  591,  590,  589,  588,  587,  586,
+      585,  584,  583,  582,  581,  576,  574,  573,  572,  568,
+      567,  566,  565,  564,  563,  562,  561,  560,  558,  557,
+      553,  552,  550,  549,  547,  546,  545,  544,  543,  542,
+      541,  537,  536,  535,  533,  531,  530,  529,  528,  527,
+      526,  525,  524,  523,  522,  520,  519,  514,  513,  512,
+      511,  509,  508,  506,  505,  504,  503,  502,  500,  499,
+      497,  496,  495,  494,  493,  492,  491,  490,  488,  487,
 
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-      458,  458,  458,  458,  458,  458,  458,  458
+      486,  485,  484,  480,  479,  478,  477,  476,  475,  472,
+      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
+      460,  459,  456,  451,  449,  448,  447,  445,  444,  441,
+      440,  439,  438,  437,  436,  435,  433,  432,  431,  430,
+      429,  426,  424,  423,  422,  420,  419,  418,  417,  415,
+      413,  412,  410,  409,  407,  406,  405,  404,  403,  402,
+      401,  400,  399,  398,  397,  395,  394,  393,  392,  391,
+      390,  389,  387,  386,  385,  384,  383,  382,  381,  377,
+      376,  375,  372,  370,  360,  358,  354,  353,  352,  351,
+      349,  348,  346,  341,  340,  339,  338,  337,  336,  331,
+
+      330,  329,  328,  327,  326,  325,  324,  321,  320,  319,
+      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
+      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
+      298,  291,  290,  289,  288,  287,  286,  285,  284,  282,
+      278,  276,  275,  274,  273,  269,  268,  267,  266,  265,
+      264,  263,  262,  261,  257,  255,  254,  253,  248,  247,
+      246,  245,  243,  242,  241,  240,  238,  237,  236,  235,
+      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
+      224,  222,  221,  220,  219,  218,  217,  216,  215,  214,
+      213,  212,  210,  209,  208,  207,  206,  205,  204,  203,
+
+      202,  201,  200,  199,  198,  197,  196,  195,  193,  192,
+      191,  190,  189,  188,  187,  186,  185,  184,  183,  182,
+      180,  179,  178,  177,  175,  174,  173,  172,  171,  169,
+      155,  154,  152,  151,  148,  147,  146,  145,  144,  143,
+      140,  139,  138,  137,  135,  134,  132,  130,  129,  128,
+      126,  125,  123,  122,  120,  119,  118,  117,  116,  115,
+      112,  111,  110,  109,  108,  107,  106,  105,  103,  102,
+      101,  100,   99,   98,   96,   95,   91,   87,   60,   48,
+       46,   43,   40,   27,   24,   16,   11,    7,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[156] =
+static yyconst flex_int32_t yy_rule_can_match_eol[215] =
     {   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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -782,7 +949,10 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 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,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -793,7 +963,7 @@
 #define YY_RESTORE_YY_MORE_OFFSET
 /*
 //
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -844,8 +1014,8 @@
     size_t yy_buffer_stack_max; /**< capacity of stack. */
     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
     char yy_hold_char;
-    yy_size_t yy_n_chars;
-    yy_size_t yyleng_r;
+    int yy_n_chars;
+    int yyleng_r;
     char *yy_c_buf_p;
     int yy_init;
     int yy_start;
@@ -898,7 +1068,7 @@
 
 void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
 
-yy_size_t yyget_leng (yyscan_t yyscanner );
+int yyget_leng (yyscan_t yyscanner );
 
 char *yyget_text (yyscan_t yyscanner );
 
@@ -967,7 +1137,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		yy_size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1109,13 +1279,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 >= 459 )
+				if ( yy_current_state >= 759 )
 					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 != 458 );
+		while ( yy_current_state != 758 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1126,7 +1296,7 @@
 
 		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
 			{
-			yy_size_t yyl;
+			int yyl;
 			for ( yyl = 0; yyl < yyleng; ++yyl )
 				if ( yytext[yyl] == '\n' )
 					   
@@ -1188,7 +1358,7 @@
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-{ return(ATTRIBUTE); }
+{ if (context->shaderVersion < 300) return(ATTRIBUTE); return reserved_word(yyscanner); }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
@@ -1200,7 +1370,7 @@
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-{ return(VARYING); }
+{ if (context->shaderVersion < 300) return(VARYING); return reserved_word(yyscanner); }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
@@ -1232,524 +1402,480 @@
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-{ return(IN_QUAL); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SWITCH); }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-{ return(OUT_QUAL); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CASE); }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-{ return(INOUT_QUAL); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(DEFAULT); }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(FLOAT_TYPE); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CENTROID); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(INT_TYPE); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(FLAT); }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(VOID_TYPE); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SMOOTH); }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(BOOL_TYPE); }
+{ return(IN_QUAL); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-{ yylval->lex.b = true;  return(BOOLCONSTANT); }
+{ return(OUT_QUAL); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-{ yylval->lex.b = false; return(BOOLCONSTANT); }
+{ return(INOUT_QUAL); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-{ return(DISCARD); }
+{ context->lexAfterType = true; return(FLOAT_TYPE); }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-{ return(RETURN); }
+{ context->lexAfterType = true; return(INT_TYPE); }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX2); }
+{ context->lexAfterType = true; return(VOID_TYPE); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX3); }
+{ context->lexAfterType = true; return(BOOL_TYPE); }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX4); }
+{ yylval->lex.b = true;  return(BOOLCONSTANT); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC2); }
+{ yylval->lex.b = false; return(BOOLCONSTANT); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC3); }
+{ return(DISCARD); }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC4); }
+{ return(RETURN); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC2); }
+{ context->lexAfterType = true; return(MATRIX2); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC3); }
+{ context->lexAfterType = true; return(MATRIX3); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC4); }
+{ context->lexAfterType = true; return(MATRIX4); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC2); }
+{ context->lexAfterType = true; return (VEC2); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC3); }
+{ context->lexAfterType = true; return (VEC3); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC4); }
+{ context->lexAfterType = true; return (VEC4); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2D; }
+{ context->lexAfterType = true; return (IVEC2); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLERCUBE; }
+{ context->lexAfterType = true; return (IVEC3); }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+{ context->lexAfterType = true; return (IVEC4); }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2DRECT; }
+{ context->lexAfterType = true; return (BVEC2); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(STRUCT); }
+{ context->lexAfterType = true; return (BVEC3); }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return (BVEC4); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return SAMPLER2D; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return SAMPLERCUBE; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER3D; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER3DRECT; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER2DSHADOW; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return SAMPLER2DRECT; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
+{ context->lexAfterType = true; return(STRUCT); }
 	YY_BREAK
+/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
 case 59:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 60:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 61:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 62:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 63:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 64:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 65:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 66:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 67:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 68:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 69:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 70:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 71:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 72:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 73:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 74:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 75:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 76:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 77:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 78:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 79:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 80:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 81:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 82:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 83:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 84:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 85:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 86:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 87:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 88:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 89:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 90:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 91:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 92:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 93:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 94:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 95:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 96:
-YY_RULE_SETUP
-{ return reserved_word(yyscanner); }
-	YY_BREAK
 case 97:
+case 98:
+case 99:
+case 100:
+case 101:
+case 102:
+case 103:
+case 104:
+case 105:
+case 106:
+case 107:
+case 108:
+case 109:
+case 110:
+case 111:
+case 112:
+case 113:
+case 114:
+YY_RULE_SETUP
+{ 
+    if (context->shaderVersion < 300) {
+		yylval->lex.string = NewPoolTString(yytext); 
+	    return check_type(yyscanner); 
+	}
+	return reserved_word(yyscanner);
+}
+	YY_BREAK
+/* Reserved keywords */
+case 115:
+case 116:
+case 117:
+case 118:
+case 119:
+case 120:
+case 121:
+case 122:
+case 123:
+case 124:
+case 125:
+case 126:
+case 127:
+case 128:
+case 129:
+case 130:
+case 131:
+case 132:
+case 133:
+case 134:
+case 135:
+case 136:
+case 137:
+case 138:
+case 139:
+case 140:
+case 141:
+case 142:
+case 143:
+case 144:
+case 145:
+case 146:
+case 147:
+case 148:
+case 149:
+case 150:
+case 151:
+case 152:
+case 153:
+case 154:
+case 155:
+case 156:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 98:
+case 157:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 99:
+case 158:
 YY_RULE_SETUP
 { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
-case 100:
+case 159:
 YY_RULE_SETUP
 { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
-case 101:
+case 160:
 YY_RULE_SETUP
 { context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
 	YY_BREAK
-case 102:
+case 161:
 YY_RULE_SETUP
 { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
-case 103:
+case 162:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
-case 104:
+case 163:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
-case 105:
+case 164:
 YY_RULE_SETUP
 { yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
-case 106:
+case 165:
 YY_RULE_SETUP
 {  return(ADD_ASSIGN); }
 	YY_BREAK
-case 107:
+case 166:
 YY_RULE_SETUP
 {  return(SUB_ASSIGN); }
 	YY_BREAK
-case 108:
+case 167:
 YY_RULE_SETUP
 {  return(MUL_ASSIGN); }
 	YY_BREAK
-case 109:
+case 168:
 YY_RULE_SETUP
 {  return(DIV_ASSIGN); }
 	YY_BREAK
-case 110:
+case 169:
 YY_RULE_SETUP
 {  return(MOD_ASSIGN); }
 	YY_BREAK
-case 111:
+case 170:
 YY_RULE_SETUP
 {  return(LEFT_ASSIGN); }
 	YY_BREAK
-case 112:
+case 171:
 YY_RULE_SETUP
 {  return(RIGHT_ASSIGN); }
 	YY_BREAK
-case 113:
+case 172:
 YY_RULE_SETUP
 {  return(AND_ASSIGN); }
 	YY_BREAK
-case 114:
+case 173:
 YY_RULE_SETUP
 {  return(XOR_ASSIGN); }
 	YY_BREAK
-case 115:
+case 174:
 YY_RULE_SETUP
 {  return(OR_ASSIGN); }
 	YY_BREAK
-case 116:
+case 175:
 YY_RULE_SETUP
 {  return(INC_OP); }
 	YY_BREAK
-case 117:
+case 176:
 YY_RULE_SETUP
 {  return(DEC_OP); }
 	YY_BREAK
-case 118:
+case 177:
 YY_RULE_SETUP
 {  return(AND_OP); }
 	YY_BREAK
-case 119:
+case 178:
 YY_RULE_SETUP
 {  return(OR_OP); }
 	YY_BREAK
-case 120:
+case 179:
 YY_RULE_SETUP
 {  return(XOR_OP); }
 	YY_BREAK
-case 121:
+case 180:
 YY_RULE_SETUP
 {  return(LE_OP); }
 	YY_BREAK
-case 122:
+case 181:
 YY_RULE_SETUP
 {  return(GE_OP); }
 	YY_BREAK
-case 123:
+case 182:
 YY_RULE_SETUP
 {  return(EQ_OP); }
 	YY_BREAK
-case 124:
+case 183:
 YY_RULE_SETUP
 {  return(NE_OP); }
 	YY_BREAK
-case 125:
+case 184:
 YY_RULE_SETUP
 {  return(LEFT_OP); }
 	YY_BREAK
-case 126:
+case 185:
 YY_RULE_SETUP
 {  return(RIGHT_OP); }
 	YY_BREAK
-case 127:
+case 186:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
-case 128:
+case 187:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
-case 129:
+case 188:
 YY_RULE_SETUP
 { return(RIGHT_BRACE); }
 	YY_BREAK
-case 130:
+case 189:
 YY_RULE_SETUP
 { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
-case 131:
+case 190:
 YY_RULE_SETUP
 { return(COLON); }
 	YY_BREAK
-case 132:
+case 191:
 YY_RULE_SETUP
 { context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
-case 133:
+case 192:
 YY_RULE_SETUP
 { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
-case 134:
+case 193:
 YY_RULE_SETUP
 { context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
-case 135:
+case 194:
 YY_RULE_SETUP
 { return(LEFT_BRACKET); }
 	YY_BREAK
-case 136:
+case 195:
 YY_RULE_SETUP
 { return(RIGHT_BRACKET); }
 	YY_BREAK
-case 137:
+case 196:
 YY_RULE_SETUP
 { BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
-case 138:
+case 197:
 YY_RULE_SETUP
 { return(BANG); }
 	YY_BREAK
-case 139:
+case 198:
 YY_RULE_SETUP
 { return(DASH); }
 	YY_BREAK
-case 140:
+case 199:
 YY_RULE_SETUP
 { return(TILDE); }
 	YY_BREAK
-case 141:
+case 200:
 YY_RULE_SETUP
 { return(PLUS); }
 	YY_BREAK
-case 142:
+case 201:
 YY_RULE_SETUP
 { return(STAR); }
 	YY_BREAK
-case 143:
+case 202:
 YY_RULE_SETUP
 { return(SLASH); }
 	YY_BREAK
-case 144:
+case 203:
 YY_RULE_SETUP
 { return(PERCENT); }
 	YY_BREAK
-case 145:
+case 204:
 YY_RULE_SETUP
 { return(LEFT_ANGLE); }
 	YY_BREAK
-case 146:
+case 205:
 YY_RULE_SETUP
 { return(RIGHT_ANGLE); }
 	YY_BREAK
-case 147:
+case 206:
 YY_RULE_SETUP
 { return(VERTICAL_BAR); }
 	YY_BREAK
-case 148:
+case 207:
 YY_RULE_SETUP
 { return(CARET); }
 	YY_BREAK
-case 149:
+case 208:
 YY_RULE_SETUP
 { return(AMPERSAND); }
 	YY_BREAK
-case 150:
+case 209:
 YY_RULE_SETUP
 { return(QUESTION); }
 	YY_BREAK
-case 151:
+case 210:
 YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
@@ -1757,12 +1883,12 @@
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 152:
+case 211:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 153:
-/* rule 153 can match eol */
+case 212:
+/* rule 212 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1771,11 +1897,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 154:
+case 213:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 155:
+case 214:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -1964,7 +2090,7 @@
 
 	else
 		{
-			yy_size_t num_to_read =
+			int num_to_read =
 			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
@@ -1978,7 +2104,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2009,7 +2135,7 @@
 
 		/* Read in more data. */
 		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			yyg->yy_n_chars, num_to_read );
+			yyg->yy_n_chars, (size_t) num_to_read );
 
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
 		}
@@ -2071,7 +2197,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 >= 459 )
+			if ( yy_current_state >= 759 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2100,11 +2226,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 >= 459 )
+		if ( yy_current_state >= 759 )
 			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 == 458);
+	yy_is_jam = (yy_current_state == 758);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2134,7 +2260,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
 			++yyg->yy_c_buf_p;
 
 			switch ( yy_get_next_buffer( yyscanner ) )
@@ -2158,7 +2284,7 @@
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap(yyscanner ) )
-						return 0;
+						return EOF;
 
 					if ( ! yyg->yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
@@ -2421,7 +2547,7 @@
  */
 static void yyensure_buffer_stack (yyscan_t yyscanner)
 {
-	yy_size_t num_to_alloc;
+	int num_to_alloc;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	if (!yyg->yy_buffer_stack) {
@@ -2519,11 +2645,12 @@
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
 {
 	YY_BUFFER_STATE b;
 	char *buf;
-	yy_size_t n, i;
+	yy_size_t n;
+	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -2673,7 +2800,7 @@
 /** Get the length of the current token.
  * @param yyscanner The scanner object.
  */
-yy_size_t yyget_leng  (yyscan_t yyscanner)
+int yyget_leng  (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
     return yyleng;
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 2231728..6409edc 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -68,7 +68,7 @@
 
 
 //
-// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
@@ -141,81 +141,90 @@
      IF = 273,
      DISCARD = 274,
      RETURN = 275,
-     BVEC2 = 276,
-     BVEC3 = 277,
-     BVEC4 = 278,
-     IVEC2 = 279,
-     IVEC3 = 280,
-     IVEC4 = 281,
-     VEC2 = 282,
-     VEC3 = 283,
-     VEC4 = 284,
-     MATRIX2 = 285,
-     MATRIX3 = 286,
-     MATRIX4 = 287,
-     IN_QUAL = 288,
-     OUT_QUAL = 289,
-     INOUT_QUAL = 290,
-     UNIFORM = 291,
-     VARYING = 292,
-     STRUCT = 293,
-     VOID_TYPE = 294,
-     WHILE = 295,
-     SAMPLER2D = 296,
-     SAMPLERCUBE = 297,
-     SAMPLER_EXTERNAL_OES = 298,
-     SAMPLER2DRECT = 299,
-     IDENTIFIER = 300,
-     TYPE_NAME = 301,
-     FLOATCONSTANT = 302,
-     INTCONSTANT = 303,
-     BOOLCONSTANT = 304,
-     FIELD_SELECTION = 305,
-     LEFT_OP = 306,
-     RIGHT_OP = 307,
-     INC_OP = 308,
-     DEC_OP = 309,
-     LE_OP = 310,
-     GE_OP = 311,
-     EQ_OP = 312,
-     NE_OP = 313,
-     AND_OP = 314,
-     OR_OP = 315,
-     XOR_OP = 316,
-     MUL_ASSIGN = 317,
-     DIV_ASSIGN = 318,
-     ADD_ASSIGN = 319,
-     MOD_ASSIGN = 320,
-     LEFT_ASSIGN = 321,
-     RIGHT_ASSIGN = 322,
-     AND_ASSIGN = 323,
-     XOR_ASSIGN = 324,
-     OR_ASSIGN = 325,
-     SUB_ASSIGN = 326,
-     LEFT_PAREN = 327,
-     RIGHT_PAREN = 328,
-     LEFT_BRACKET = 329,
-     RIGHT_BRACKET = 330,
-     LEFT_BRACE = 331,
-     RIGHT_BRACE = 332,
-     DOT = 333,
-     COMMA = 334,
-     COLON = 335,
-     EQUAL = 336,
-     SEMICOLON = 337,
-     BANG = 338,
-     DASH = 339,
-     TILDE = 340,
-     PLUS = 341,
-     STAR = 342,
-     SLASH = 343,
-     PERCENT = 344,
-     LEFT_ANGLE = 345,
-     RIGHT_ANGLE = 346,
-     VERTICAL_BAR = 347,
-     CARET = 348,
-     AMPERSAND = 349,
-     QUESTION = 350
+     SWITCH = 276,
+     CASE = 277,
+     DEFAULT = 278,
+     BVEC2 = 279,
+     BVEC3 = 280,
+     BVEC4 = 281,
+     IVEC2 = 282,
+     IVEC3 = 283,
+     IVEC4 = 284,
+     VEC2 = 285,
+     VEC3 = 286,
+     VEC4 = 287,
+     MATRIX2 = 288,
+     MATRIX3 = 289,
+     MATRIX4 = 290,
+     IN_QUAL = 291,
+     OUT_QUAL = 292,
+     INOUT_QUAL = 293,
+     UNIFORM = 294,
+     VARYING = 295,
+     CENTROID = 296,
+     FLAT = 297,
+     SMOOTH = 298,
+     STRUCT = 299,
+     VOID_TYPE = 300,
+     WHILE = 301,
+     SAMPLER2D = 302,
+     SAMPLERCUBE = 303,
+     SAMPLER_EXTERNAL_OES = 304,
+     SAMPLER2DRECT = 305,
+     SAMPLER3D = 306,
+     SAMPLER3DRECT = 307,
+     SAMPLER2DSHADOW = 308,
+     IDENTIFIER = 309,
+     TYPE_NAME = 310,
+     FLOATCONSTANT = 311,
+     INTCONSTANT = 312,
+     BOOLCONSTANT = 313,
+     FIELD_SELECTION = 314,
+     LEFT_OP = 315,
+     RIGHT_OP = 316,
+     INC_OP = 317,
+     DEC_OP = 318,
+     LE_OP = 319,
+     GE_OP = 320,
+     EQ_OP = 321,
+     NE_OP = 322,
+     AND_OP = 323,
+     OR_OP = 324,
+     XOR_OP = 325,
+     MUL_ASSIGN = 326,
+     DIV_ASSIGN = 327,
+     ADD_ASSIGN = 328,
+     MOD_ASSIGN = 329,
+     LEFT_ASSIGN = 330,
+     RIGHT_ASSIGN = 331,
+     AND_ASSIGN = 332,
+     XOR_ASSIGN = 333,
+     OR_ASSIGN = 334,
+     SUB_ASSIGN = 335,
+     LEFT_PAREN = 336,
+     RIGHT_PAREN = 337,
+     LEFT_BRACKET = 338,
+     RIGHT_BRACKET = 339,
+     LEFT_BRACE = 340,
+     RIGHT_BRACE = 341,
+     DOT = 342,
+     COMMA = 343,
+     COLON = 344,
+     EQUAL = 345,
+     SEMICOLON = 346,
+     BANG = 347,
+     DASH = 348,
+     TILDE = 349,
+     PLUS = 350,
+     STAR = 351,
+     SLASH = 352,
+     PERCENT = 353,
+     LEFT_ANGLE = 354,
+     RIGHT_ANGLE = 355,
+     VERTICAL_BAR = 356,
+     CARET = 357,
+     AMPERSAND = 358,
+     QUESTION = 359
    };
 #endif
 
@@ -293,6 +302,20 @@
     }  \
 }
 
+#define ES2_ONLY(S, L) {  \
+    if (context->shaderVersion != 100) {  \
+        context->error(L, " supported in GLSL ES 1.00 only ", S);  \
+        context->recover();  \
+    }  \
+}
+
+#define ES3_ONLY(S, L) {  \
+    if (context->shaderVersion != 300) {  \
+        context->error(L, " supported in GLSL ES 3.00 only ", S);  \
+        context->recover();  \
+    }  \
+}
+
 
 
 #ifdef short
@@ -508,10 +531,10 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  71
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1416
+#define YYLAST   1567
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  96
+#define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  83
 /* YYNRULES -- Number of rules.  */
@@ -521,7 +544,7 @@
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   350
+#define YYMAXUTOK   359
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -564,7 +587,7 @@
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104
 };
 
 #if YYDEBUG
@@ -598,89 +621,89 @@
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     175,     0,    -1,    45,    -1,    97,    -1,    48,    -1,    47,
-      -1,    49,    -1,    72,   124,    73,    -1,    98,    -1,    99,
-      74,   100,    75,    -1,   101,    -1,    99,    78,    50,    -1,
-      99,    53,    -1,    99,    54,    -1,   124,    -1,   102,    -1,
-     103,    -1,    99,    78,   103,    -1,   105,    73,    -1,   104,
-      73,    -1,   106,    39,    -1,   106,    -1,   106,   122,    -1,
-     105,    79,   122,    -1,   107,    72,    -1,   142,    -1,    45,
-      -1,    50,    -1,    99,    -1,    53,   108,    -1,    54,   108,
-      -1,   109,   108,    -1,    86,    -1,    84,    -1,    83,    -1,
-     108,    -1,   110,    87,   108,    -1,   110,    88,   108,    -1,
-     110,    -1,   111,    86,   110,    -1,   111,    84,   110,    -1,
-     111,    -1,   112,    -1,   113,    90,   112,    -1,   113,    91,
-     112,    -1,   113,    55,   112,    -1,   113,    56,   112,    -1,
-     113,    -1,   114,    57,   113,    -1,   114,    58,   113,    -1,
-     114,    -1,   115,    -1,   116,    -1,   117,    -1,   118,    59,
-     117,    -1,   118,    -1,   119,    61,   118,    -1,   119,    -1,
-     120,    60,   119,    -1,   120,    -1,   120,    95,   124,    80,
-     122,    -1,   121,    -1,   108,   123,   122,    -1,    81,    -1,
-      62,    -1,    63,    -1,    64,    -1,    71,    -1,   122,    -1,
-     124,    79,   122,    -1,   121,    -1,   127,    82,    -1,   135,
-      82,    -1,     7,   140,   141,    82,    -1,   128,    73,    -1,
-     130,    -1,   129,    -1,   130,   132,    -1,   129,    79,   132,
-      -1,   137,    45,    72,    -1,   139,    45,    -1,   139,    45,
-      74,   125,    75,    -1,   138,   133,   131,    -1,   133,   131,
-      -1,   138,   133,   134,    -1,   133,   134,    -1,    -1,    33,
-      -1,    34,    -1,    35,    -1,   139,    -1,   136,    -1,   135,
-      79,    45,    -1,   135,    79,    45,    74,    75,    -1,   135,
-      79,    45,    74,   125,    75,    -1,   135,    79,    45,    81,
-     150,    -1,   137,    -1,   137,    45,    -1,   137,    45,    74,
-      75,    -1,   137,    45,    74,   125,    75,    -1,   137,    45,
-      81,   150,    -1,     3,    45,    -1,   139,    -1,   138,   139,
-      -1,     9,    -1,     8,    -1,    37,    -1,     3,    37,    -1,
-      36,    -1,   141,    -1,   140,   141,    -1,     4,    -1,     5,
-      -1,     6,    -1,   142,    -1,   142,    74,   125,    75,    -1,
-      39,    -1,    11,    -1,    12,    -1,    10,    -1,    27,    -1,
-      28,    -1,    29,    -1,    21,    -1,    22,    -1,    23,    -1,
-      24,    -1,    25,    -1,    26,    -1,    30,    -1,    31,    -1,
-      32,    -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,
-     143,    -1,    46,    -1,    -1,    38,    45,    76,   144,   146,
-      77,    -1,    -1,    38,    76,   145,   146,    77,    -1,   147,
-      -1,   146,   147,    -1,   139,   148,    82,    -1,   149,    -1,
-     148,    79,   149,    -1,    45,    -1,    45,    74,   125,    75,
-      -1,   122,    -1,   126,    -1,   154,    -1,   153,    -1,   151,
-      -1,   163,    -1,   164,    -1,   167,    -1,   174,    -1,    76,
-      77,    -1,    -1,    -1,    76,   155,   162,   156,    77,    -1,
-     161,    -1,   153,    -1,    -1,   159,   161,    -1,    -1,   160,
-     153,    -1,    76,    77,    -1,    76,   162,    77,    -1,   152,
-      -1,   162,   152,    -1,    82,    -1,   124,    82,    -1,    18,
-      72,   124,    73,   165,    -1,   158,    16,   158,    -1,   158,
-      -1,   124,    -1,   137,    45,    81,   150,    -1,    -1,    40,
-      72,   168,   166,    73,   157,    -1,    -1,    15,   169,   158,
-      40,    72,   124,    73,    82,    -1,    -1,    17,    72,   170,
-     171,   173,    73,   157,    -1,   163,    -1,   151,    -1,   166,
-      -1,    -1,   172,    82,    -1,   172,    82,   124,    -1,    14,
-      82,    -1,    13,    82,    -1,    20,    82,    -1,    20,   124,
-      82,    -1,    19,    82,    -1,   176,    -1,   175,   176,    -1,
-     177,    -1,   126,    -1,    -1,   127,   178,   161,    -1
+     184,     0,    -1,    54,    -1,   106,    -1,    57,    -1,    56,
+      -1,    58,    -1,    81,   133,    82,    -1,   107,    -1,   108,
+      83,   109,    84,    -1,   110,    -1,   108,    87,    59,    -1,
+     108,    62,    -1,   108,    63,    -1,   133,    -1,   111,    -1,
+     112,    -1,   108,    87,   112,    -1,   114,    82,    -1,   113,
+      82,    -1,   115,    45,    -1,   115,    -1,   115,   131,    -1,
+     114,    88,   131,    -1,   116,    81,    -1,   151,    -1,    54,
+      -1,    59,    -1,   108,    -1,    62,   117,    -1,    63,   117,
+      -1,   118,   117,    -1,    95,    -1,    93,    -1,    92,    -1,
+     117,    -1,   119,    96,   117,    -1,   119,    97,   117,    -1,
+     119,    -1,   120,    95,   119,    -1,   120,    93,   119,    -1,
+     120,    -1,   121,    -1,   122,    99,   121,    -1,   122,   100,
+     121,    -1,   122,    64,   121,    -1,   122,    65,   121,    -1,
+     122,    -1,   123,    66,   122,    -1,   123,    67,   122,    -1,
+     123,    -1,   124,    -1,   125,    -1,   126,    -1,   127,    68,
+     126,    -1,   127,    -1,   128,    70,   127,    -1,   128,    -1,
+     129,    69,   128,    -1,   129,    -1,   129,   104,   133,    89,
+     131,    -1,   130,    -1,   117,   132,   131,    -1,    90,    -1,
+      71,    -1,    72,    -1,    73,    -1,    80,    -1,   131,    -1,
+     133,    88,   131,    -1,   130,    -1,   136,    91,    -1,   144,
+      91,    -1,     7,   149,   150,    91,    -1,   137,    82,    -1,
+     139,    -1,   138,    -1,   139,   141,    -1,   138,    88,   141,
+      -1,   146,    54,    81,    -1,   148,    54,    -1,   148,    54,
+      83,   134,    84,    -1,   147,   142,   140,    -1,   142,   140,
+      -1,   147,   142,   143,    -1,   142,   143,    -1,    -1,    36,
+      -1,    37,    -1,    38,    -1,   148,    -1,   145,    -1,   144,
+      88,    54,    -1,   144,    88,    54,    83,    84,    -1,   144,
+      88,    54,    83,   134,    84,    -1,   144,    88,    54,    90,
+     159,    -1,   146,    -1,   146,    54,    -1,   146,    54,    83,
+      84,    -1,   146,    54,    83,   134,    84,    -1,   146,    54,
+      90,   159,    -1,     3,    54,    -1,   148,    -1,   147,   148,
+      -1,     9,    -1,     8,    -1,    40,    -1,     3,    40,    -1,
+      39,    -1,   150,    -1,   149,   150,    -1,     4,    -1,     5,
+      -1,     6,    -1,   151,    -1,   151,    83,   134,    84,    -1,
+      45,    -1,    11,    -1,    12,    -1,    10,    -1,    30,    -1,
+      31,    -1,    32,    -1,    24,    -1,    25,    -1,    26,    -1,
+      27,    -1,    28,    -1,    29,    -1,    33,    -1,    34,    -1,
+      35,    -1,    47,    -1,    48,    -1,    49,    -1,    50,    -1,
+     152,    -1,    55,    -1,    -1,    44,    54,    85,   153,   155,
+      86,    -1,    -1,    44,    85,   154,   155,    86,    -1,   156,
+      -1,   155,   156,    -1,   148,   157,    91,    -1,   158,    -1,
+     157,    88,   158,    -1,    54,    -1,    54,    83,   134,    84,
+      -1,   131,    -1,   135,    -1,   163,    -1,   162,    -1,   160,
+      -1,   172,    -1,   173,    -1,   176,    -1,   183,    -1,    85,
+      86,    -1,    -1,    -1,    85,   164,   171,   165,    86,    -1,
+     170,    -1,   162,    -1,    -1,   168,   170,    -1,    -1,   169,
+     162,    -1,    85,    86,    -1,    85,   171,    86,    -1,   161,
+      -1,   171,   161,    -1,    91,    -1,   133,    91,    -1,    18,
+      81,   133,    82,   174,    -1,   167,    16,   167,    -1,   167,
+      -1,   133,    -1,   146,    54,    90,   159,    -1,    -1,    46,
+      81,   177,   175,    82,   166,    -1,    -1,    15,   178,   167,
+      46,    81,   133,    82,    91,    -1,    -1,    17,    81,   179,
+     180,   182,    82,   166,    -1,   172,    -1,   160,    -1,   175,
+      -1,    -1,   181,    91,    -1,   181,    91,   133,    -1,    14,
+      91,    -1,    13,    91,    -1,    20,    91,    -1,    20,   133,
+      91,    -1,    19,    91,    -1,   185,    -1,   184,   185,    -1,
+     186,    -1,   135,    -1,    -1,   136,   187,   170,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   168,   168,   203,   206,   219,   224,   229,   235,   238,
-     317,   320,   421,   431,   444,   452,   552,   555,   563,   567,
-     574,   578,   585,   591,   600,   608,   663,   670,   680,   683,
-     693,   703,   724,   725,   726,   731,   732,   741,   753,   754,
-     762,   773,   777,   778,   788,   798,   808,   821,   822,   832,
-     845,   849,   853,   857,   858,   871,   872,   885,   886,   899,
-     900,   917,   918,   931,   932,   933,   934,   935,   939,   942,
-     953,   961,   988,   993,  1007,  1045,  1048,  1055,  1063,  1084,
-    1105,  1116,  1145,  1150,  1160,  1165,  1175,  1178,  1181,  1184,
-    1190,  1197,  1200,  1222,  1240,  1264,  1287,  1291,  1309,  1317,
-    1349,  1369,  1458,  1467,  1490,  1493,  1499,  1507,  1515,  1523,
-    1533,  1540,  1543,  1546,  1552,  1555,  1570,  1574,  1578,  1582,
-    1591,  1596,  1601,  1606,  1611,  1616,  1621,  1626,  1631,  1636,
-    1642,  1648,  1654,  1659,  1664,  1673,  1682,  1687,  1700,  1700,
-    1714,  1714,  1723,  1726,  1741,  1777,  1781,  1787,  1795,  1811,
-    1815,  1819,  1820,  1826,  1827,  1828,  1829,  1830,  1834,  1835,
-    1835,  1835,  1845,  1846,  1850,  1850,  1851,  1851,  1856,  1859,
-    1869,  1872,  1878,  1879,  1883,  1891,  1895,  1905,  1910,  1927,
-    1927,  1932,  1932,  1939,  1939,  1947,  1950,  1956,  1959,  1965,
-    1969,  1976,  1983,  1990,  1997,  2008,  2017,  2021,  2028,  2031,
-    2037,  2037
+       0,   184,   184,   219,   222,   235,   240,   245,   251,   254,
+     333,   336,   437,   447,   460,   468,   568,   571,   579,   583,
+     590,   594,   601,   607,   616,   624,   679,   686,   696,   699,
+     709,   719,   740,   741,   742,   747,   748,   757,   769,   770,
+     778,   789,   793,   794,   804,   814,   824,   837,   838,   848,
+     861,   865,   869,   873,   874,   887,   888,   901,   902,   915,
+     916,   933,   934,   947,   948,   949,   950,   951,   955,   958,
+     969,   977,  1004,  1009,  1023,  1061,  1064,  1071,  1079,  1100,
+    1121,  1132,  1161,  1166,  1176,  1181,  1191,  1194,  1197,  1200,
+    1206,  1213,  1216,  1238,  1256,  1280,  1303,  1307,  1325,  1333,
+    1365,  1385,  1474,  1483,  1506,  1509,  1516,  1525,  1534,  1542,
+    1552,  1559,  1562,  1565,  1571,  1574,  1589,  1593,  1597,  1601,
+    1610,  1615,  1620,  1625,  1630,  1635,  1640,  1645,  1650,  1655,
+    1661,  1667,  1673,  1678,  1683,  1692,  1701,  1706,  1719,  1719,
+    1733,  1733,  1742,  1745,  1760,  1796,  1800,  1806,  1814,  1830,
+    1834,  1838,  1839,  1845,  1846,  1847,  1848,  1849,  1853,  1854,
+    1854,  1854,  1864,  1865,  1869,  1869,  1870,  1870,  1875,  1878,
+    1888,  1891,  1897,  1898,  1902,  1910,  1914,  1924,  1929,  1946,
+    1946,  1951,  1951,  1958,  1958,  1966,  1969,  1975,  1978,  1984,
+    1988,  1995,  2002,  2009,  2016,  2027,  2036,  2040,  2047,  2050,
+    2056,  2056
 };
 #endif
 
@@ -692,20 +715,22 @@
   "$end", "error", "$undefined", "INVARIANT", "HIGH_PRECISION",
   "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "ATTRIBUTE",
   "CONST_QUAL", "BOOL_TYPE", "FLOAT_TYPE", "INT_TYPE", "BREAK", "CONTINUE",
-  "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "BVEC2", "BVEC3",
-  "BVEC4", "IVEC2", "IVEC3", "IVEC4", "VEC2", "VEC3", "VEC4", "MATRIX2",
-  "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
-  "VARYING", "STRUCT", "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE",
-  "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT", "IDENTIFIER", "TYPE_NAME",
-  "FLOATCONSTANT", "INTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION",
-  "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP",
-  "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN",
-  "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN",
-  "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN",
-  "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT",
-  "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS",
-  "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR",
-  "CARET", "AMPERSAND", "QUESTION", "$accept", "variable_identifier",
+  "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE",
+  "DEFAULT", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "VEC2",
+  "VEC3", "VEC4", "MATRIX2", "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL",
+  "INOUT_QUAL", "UNIFORM", "VARYING", "CENTROID", "FLAT", "SMOOTH",
+  "STRUCT", "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE",
+  "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT", "SAMPLER3D", "SAMPLER3DRECT",
+  "SAMPLER2DSHADOW", "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT",
+  "INTCONSTANT", "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP",
+  "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP",
+  "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN",
+  "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN",
+  "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+  "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
+  "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
+  "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
+  "AMPERSAND", "QUESTION", "$accept", "variable_identifier",
   "primary_expression", "postfix_expression", "integer_expression",
   "function_call", "function_call_or_method", "function_call_generic",
   "function_call_header_no_parameters",
@@ -751,34 +776,35 @@
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    96,    97,    98,    98,    98,    98,    98,    99,    99,
-      99,    99,    99,    99,   100,   101,   102,   102,   103,   103,
-     104,   104,   105,   105,   106,   107,   107,   107,   108,   108,
-     108,   108,   109,   109,   109,   110,   110,   110,   111,   111,
-     111,   112,   113,   113,   113,   113,   113,   114,   114,   114,
-     115,   116,   117,   118,   118,   119,   119,   120,   120,   121,
-     121,   122,   122,   123,   123,   123,   123,   123,   124,   124,
-     125,   126,   126,   126,   127,   128,   128,   129,   129,   130,
-     131,   131,   132,   132,   132,   132,   133,   133,   133,   133,
-     134,   135,   135,   135,   135,   135,   136,   136,   136,   136,
-     136,   136,   137,   137,   138,   138,   138,   138,   138,   139,
-     139,   140,   140,   140,   141,   141,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
-     142,   142,   142,   142,   142,   142,   142,   142,   144,   143,
-     145,   143,   146,   146,   147,   148,   148,   149,   149,   150,
-     151,   152,   152,   153,   153,   153,   153,   153,   154,   155,
-     156,   154,   157,   157,   159,   158,   160,   158,   161,   161,
-     162,   162,   163,   163,   164,   165,   165,   166,   166,   168,
-     167,   169,   167,   170,   167,   171,   171,   172,   172,   173,
-     173,   174,   174,   174,   174,   174,   175,   175,   176,   176,
-     178,   177
+       0,   105,   106,   107,   107,   107,   107,   107,   108,   108,
+     108,   108,   108,   108,   109,   110,   111,   111,   112,   112,
+     113,   113,   114,   114,   115,   116,   116,   116,   117,   117,
+     117,   117,   118,   118,   118,   119,   119,   119,   120,   120,
+     120,   121,   122,   122,   122,   122,   122,   123,   123,   123,
+     124,   125,   126,   127,   127,   128,   128,   129,   129,   130,
+     130,   131,   131,   132,   132,   132,   132,   132,   133,   133,
+     134,   135,   135,   135,   136,   137,   137,   138,   138,   139,
+     140,   140,   141,   141,   141,   141,   142,   142,   142,   142,
+     143,   144,   144,   144,   144,   144,   145,   145,   145,   145,
+     145,   145,   146,   146,   147,   147,   147,   147,   147,   148,
+     148,   149,   149,   149,   150,   150,   151,   151,   151,   151,
+     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
+     151,   151,   151,   151,   151,   151,   151,   151,   153,   152,
+     154,   152,   155,   155,   156,   157,   157,   158,   158,   159,
+     160,   161,   161,   162,   162,   162,   162,   162,   163,   164,
+     165,   163,   166,   166,   168,   167,   169,   167,   170,   170,
+     171,   171,   172,   172,   173,   174,   174,   175,   175,   177,
+     176,   178,   176,   179,   176,   180,   180,   181,   181,   182,
+     182,   183,   183,   183,   183,   183,   184,   184,   185,   185,
+     187,   186
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -861,54 +887,54 @@
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -266
+#define YYPACT_NINF -258
 static const yytype_int16 yypact[] =
 {
-    1253,   -20,  -266,  -266,  -266,   148,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,  -266,  -266,   -39,  -266,  -266,  -266,  -266,
-    -266,  -266,  -266,   -18,    -2,     6,    21,   -61,  -266,    51,
-    1296,  -266,  1370,  -266,    25,  -266,  1209,  -266,  -266,  -266,
-    -266,  1370,    42,  -266,  -266,    50,  -266,    71,    95,  -266,
-    -266,  -266,  -266,  1296,   123,   105,  -266,     9,  -266,  -266,
-     974,  -266,  -266,    81,  -266,  1296,   290,  -266,  -266,  -266,
-    -266,   125,  1296,   -13,  -266,   776,   974,    99,  -266,  -266,
-    -266,  -266,   974,   974,   974,  -266,  -266,  -266,  -266,  -266,
-      35,  -266,  -266,  -266,   100,    -6,  1040,   104,  -266,   974,
-      36,   -64,  -266,   -21,   102,  -266,  -266,  -266,   113,   117,
-     -51,  -266,   108,  -266,  -266,  1296,   129,  1109,  -266,    97,
-     103,  -266,   112,   114,   106,   842,   115,   116,  -266,  -266,
-      39,  -266,  -266,   -43,  -266,   -18,    47,  -266,  -266,  -266,
-    -266,   374,  -266,  -266,  -266,  -266,   118,  -266,  -266,   908,
-     974,  -266,   120,  -266,  -266,  -266,  -266,    19,  -266,  -266,
-     974,  1333,  -266,  -266,   974,   119,  -266,  -266,  -266,   974,
-     974,   974,   974,   974,   974,   974,   974,   974,   974,   974,
-     974,   974,   974,  -266,  1152,   122,   -29,  -266,  -266,  -266,
-    -266,  -266,   121,  -266,   974,  -266,  -266,     5,  -266,  -266,
-     458,  -266,  -266,  -266,  -266,  -266,   974,   974,  -266,  -266,
-    -266,   974,  -266,   137,  -266,  -266,  -266,   138,   111,  -266,
-     142,  -266,  -266,  -266,  -266,    36,    36,  -266,  -266,  -266,
-    -266,   -21,   -21,  -266,   113,   117,    82,  -266,   974,   129,
-    -266,   175,    50,   626,   710,    38,  -266,   197,   458,  -266,
-    -266,   141,  -266,  -266,   974,   155,  -266,   145,  -266,  -266,
-    -266,  -266,   197,   121,   111,   186,   159,   160,  -266,  -266,
-    -266,   974,  -266,   166,   176,   236,  -266,   174,   542,  -266,
-      43,   974,   542,   121,   974,  -266,  -266,  -266,   177,   111,
-    -266,  -266,  -266,  -266
+    1383,   -29,  -258,  -258,  -258,   126,  -258,  -258,  -258,  -258,
+    -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,
+    -258,  -258,  -258,  -258,  -258,   -48,  -258,  -258,  -258,  -258,
+    -258,  -258,  -258,   -74,   -32,    25,    19,    15,  -258,    68,
+    1430,  -258,  1512,  -258,    45,  -258,  1330,  -258,  -258,  -258,
+    -258,  1512,    65,  -258,  -258,    74,  -258,    71,   117,  -258,
+    -258,  -258,  -258,  1430,   116,   112,  -258,     6,  -258,  -258,
+    1123,  -258,  -258,    78,  -258,  1430,   290,  -258,  -258,  -258,
+    -258,   118,  1430,    -2,  -258,   901,  1123,    89,  -258,  -258,
+    -258,  -258,  1123,  1123,  1123,  -258,  -258,  -258,  -258,  -258,
+       7,  -258,  -258,  -258,    91,   -64,  1195,    90,  -258,  1123,
+     -58,   -22,  -258,   -33,    -5,  -258,  -258,  -258,   106,   108,
+     -60,  -258,    92,  -258,  -258,  1430,   125,   191,  -258,    93,
+      94,  -258,   102,   105,    96,   976,   107,   104,  -258,  -258,
+      12,  -258,  -258,    32,  -258,   -74,    75,  -258,  -258,  -258,
+    -258,   383,  -258,  -258,  -258,  -258,   109,  -258,  -258,  1048,
+    1123,  -258,   121,  -258,  -258,  -258,  -258,   -35,  -258,  -258,
+    1123,  1471,  -258,  -258,  1123,   110,  -258,  -258,  -258,  1123,
+    1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,  1123,
+    1123,  1123,  1123,  -258,  1267,   123,    33,  -258,  -258,  -258,
+    -258,  -258,   115,  -258,  1123,  -258,  -258,    38,  -258,  -258,
+     476,  -258,  -258,  -258,  -258,  -258,  1123,  1123,  -258,  -258,
+    -258,  1123,  -258,   124,  -258,  -258,  -258,   128,   119,  -258,
+     132,  -258,  -258,  -258,  -258,   -58,   -58,  -258,  -258,  -258,
+    -258,   -33,   -33,  -258,   106,   108,    72,  -258,  1123,   125,
+    -258,   147,    74,   662,   755,    16,  -258,   829,   476,  -258,
+    -258,   130,  -258,  -258,  1123,   143,  -258,   148,  -258,  -258,
+    -258,  -258,   829,   115,   119,   155,   146,   144,  -258,  -258,
+    -258,  1123,  -258,   140,   150,   217,  -258,   152,   569,  -258,
+      17,  1123,   569,   115,  1123,  -258,  -258,  -258,   153,   119,
+    -258,  -258,  -258,  -258
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -266,  -266,  -266,  -266,  -266,  -266,  -266,    85,  -266,  -266,
-    -266,  -266,   -44,  -266,   -15,  -266,   -55,   -19,  -266,  -266,
-    -266,    72,    70,    73,  -266,   -66,   -83,  -266,   -92,   -73,
-      13,    14,  -266,  -266,  -266,   180,   206,   201,   184,  -266,
-    -266,  -241,   -25,   -30,   262,    -4,     0,  -266,  -266,  -266,
-     143,  -122,  -266,    22,  -145,    16,  -144,  -226,  -266,  -266,
-    -266,   -17,  -265,  -266,  -266,   -54,    63,    20,  -266,  -266,
-       4,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-     231,  -266,  -266
+    -258,  -258,  -258,  -258,  -258,  -258,  -258,    63,  -258,  -258,
+    -258,  -258,   -44,  -258,   -19,  -258,   -67,   -20,  -258,  -258,
+    -258,    48,    53,    54,  -258,   -66,   -83,  -258,   -92,   -73,
+       8,    14,  -258,  -258,  -258,   165,   192,   184,   168,  -258,
+    -258,  -237,   -23,   -30,   246,   -21,     0,  -258,  -258,  -258,
+     127,  -122,  -258,    10,  -145,     1,  -144,  -224,  -258,  -258,
+    -258,   -36,  -257,  -258,  -258,   -54,    50,     9,  -258,  -258,
+     -11,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,  -258,
+     216,  -258,  -258
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -918,294 +944,324 @@
 #define YYTABLE_NINF -165
 static const yytype_int16 yytable[] =
 {
-      44,    77,   167,   163,   121,   199,    52,   220,   285,   191,
-      68,    64,   162,    32,    33,   224,   275,    49,    65,   121,
-     181,    66,   182,   176,    58,    50,   108,   269,   301,     6,
-       7,   275,    64,    81,   183,   184,   217,    53,    69,   218,
-      44,   108,    44,   207,   192,   126,    44,    73,   165,   166,
-     249,    44,    81,   250,    59,    60,    61,    23,    24,    32,
-      33,   159,   295,    44,    54,   178,   295,   173,   160,   185,
-     186,    56,   199,   174,    58,    44,   146,   163,   228,     6,
-       7,    84,    44,    85,   217,    57,   223,   256,   168,   169,
-      86,   232,   226,   121,   -75,   126,    67,   126,   217,    70,
-     246,   211,   212,   213,    59,    60,    61,    23,    24,   170,
-     214,   273,   255,   171,   220,   108,   298,   217,    74,   -25,
-     215,    70,   217,   179,   180,    44,    76,    44,   237,   238,
-     239,   240,    49,   259,   260,   233,   234,   108,   108,   108,
+      44,    77,   167,   163,   121,   199,    52,   220,    32,   191,
+      68,    49,   162,    64,    33,   224,   285,    54,   173,   121,
+     275,    69,    58,   176,   174,    50,   108,     6,     7,   269,
+      73,   183,   184,    81,    64,   275,   301,    53,   179,   180,
+      44,   108,    44,   207,   192,   126,    44,   226,   165,   166,
+      56,    44,    81,   217,    32,    59,    60,    61,    23,    24,
+      33,   187,   188,    44,   295,   178,   185,   186,   295,   168,
+     169,   181,   199,   182,    58,    44,   146,   163,   228,     6,
+       7,   159,    44,   211,   212,   213,   223,    84,   160,    85,
+     170,   232,   214,   121,   171,   126,    86,   126,   273,   298,
+     246,   -75,   215,    65,   217,   217,    66,    59,    60,    61,
+      23,    24,   255,    57,   220,   108,   237,   238,   239,   240,
+     217,   249,    67,   218,   250,    44,   217,    44,    70,   256,
+       2,     3,     4,   259,   260,   233,   234,   108,   108,   108,
      108,   108,   108,   108,   108,   108,   108,   108,   261,   302,
-      83,   146,     2,     3,     4,   121,    59,    60,    61,   187,
-     188,   217,   264,   124,   126,   274,   235,   236,   241,   242,
-     156,   -26,   189,   172,   195,   265,   177,   108,   190,   200,
-     274,   279,   121,   193,   203,   201,   204,   208,   205,   290,
-     217,  -116,   221,   209,    44,   225,   248,  -164,   268,   299,
-      58,     2,     3,     4,   108,     6,     7,     8,     9,    10,
-     146,   163,   262,   263,   -27,   267,   278,   281,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-     280,   287,   288,    23,    24,    25,    26,   289,    27,    28,
-      29,    30,    87,    31,    88,    89,    90,    91,   291,   292,
-      92,    93,   293,   146,   146,   294,   231,   146,   146,   303,
-     244,   243,   157,    78,   245,    82,   158,    51,   194,    94,
-     270,   266,   146,   258,   271,   300,   282,    72,     0,     0,
-      95,    96,     0,    97,     0,     0,     0,     0,   146,     0,
+      74,   146,    59,    60,    61,   121,   -25,    49,    70,    76,
+     217,   264,   235,   236,   126,   274,    83,   241,   242,   124,
+     -26,   177,   156,   172,   189,   265,   193,   108,   190,   195,
+     274,   279,   121,   203,   200,   201,   204,   205,   208,   290,
+     209,  -116,   221,   267,    44,     2,     3,     4,   268,   299,
+    -164,     8,     9,    10,   108,   225,   248,   217,   262,   287,
+     146,   163,   263,   -27,   278,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,   280,   288,   281,
+     289,   291,   292,   293,   231,    25,    26,   243,    27,    28,
+      29,    30,   294,   244,   303,   245,    31,   157,    82,    78,
+     158,    51,   194,   146,   146,   270,   300,   146,   146,   266,
+     258,   282,    72,   271,     0,     0,     0,     0,     0,     0,
+       0,     0,   146,     0,     0,     0,     0,   198,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   146,     0,
        0,     0,   146,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,   129,   130,   131,     0,   132,   133,   134,
-     135,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-     136,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
+     135,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
+      24,     0,     0,     0,    25,    26,   136,    27,    28,    29,
+      30,     0,     0,     0,    87,    31,    88,    89,    90,    91,
+       0,     0,    92,    93,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     0,     0,     0,   137,   138,     0,     0,
-       0,     0,   139,    95,    96,     0,    97,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,   129,   130,   131,
-       0,   132,   133,   134,   135,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-      23,    24,    25,    26,   136,    27,    28,    29,    30,    87,
-      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-     137,   219,     0,     0,     0,     0,   139,    95,    96,     0,
-      97,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,   129,   130,   131,     0,   132,   133,   134,   135,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,    23,    24,    25,    26,   136,    27,
-      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
-       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      94,     0,     0,     0,   137,     0,     0,     0,     0,     0,
-     139,    95,    96,     0,    97,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   129,   130,   131,     0,   132,
-     133,   134,   135,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
-      25,    26,   136,    27,    28,    29,    30,    87,    31,    88,
+       0,    94,     0,     0,     0,   137,   138,     0,     0,     0,
+       0,   139,    95,    96,     0,    97,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,   129,   130,   131,     0,
+     132,   133,   134,   135,     0,     0,     0,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
+       0,     0,    23,    24,     0,     0,     0,    25,    26,   136,
+      27,    28,    29,    30,     0,     0,     0,    87,    31,    88,
       89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    94,     0,     0,     0,    76,     0,
+       0,     0,     0,     0,    94,     0,     0,     0,   137,   219,
        0,     0,     0,     0,   139,    95,    96,     0,    97,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,   129,
-     130,   131,     0,   132,   133,   134,   135,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,    23,    24,    25,    26,   136,    27,    28,    29,
-      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   139,    95,
-      96,     0,    97,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
-      91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
+     130,   131,     0,   132,   133,   134,   135,     0,     0,     0,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,     0,     0,     0,    23,    24,     0,     0,     0,
+      25,    26,   136,    27,    28,    29,    30,     0,     0,     0,
+      87,    31,    88,    89,    90,    91,     0,     0,    92,    93,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     0,     0,     0,     8,     9,    10,     0,
-       0,     0,   139,    95,    96,     0,    97,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-      30,    87,    31,    88,    89,    90,    91,     0,     0,    92,
-      93,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    94,     0,
-       0,   161,     8,     9,    10,     0,     0,     0,     0,    95,
-      96,     0,    97,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-      25,    26,     0,    27,    28,    29,    30,    87,    31,    88,
-      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    94,     0,     0,     0,     8,     9,
-      10,     0,     0,     0,   206,    95,    96,     0,    97,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,     0,     0,    25,    26,     0,    27,
-      28,    29,    30,    87,    31,    88,    89,    90,    91,     0,
+       0,     0,     0,     0,     0,     0,     0,    94,     0,     0,
+       0,   137,     0,     0,     0,     0,     0,   139,    95,    96,
+       0,    97,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,   129,   130,   131,     0,   132,   133,   134,   135,
+       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
+       0,     0,     0,    25,    26,   136,    27,    28,    29,    30,
+       0,     0,     0,    87,    31,    88,    89,    90,    91,     0,
        0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      94,     0,     0,   222,     8,     9,    10,     0,     0,     0,
-       0,    95,    96,     0,    97,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-       0,     0,    25,    26,     0,    27,    28,    29,    30,    87,
+      94,     0,     0,     0,    76,     0,     0,     0,     0,     0,
+     139,    95,    96,     0,    97,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,   129,   130,   131,     0,   132,
+     133,   134,   135,     0,     0,     0,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       0,    23,    24,     0,     0,     0,    25,    26,   136,    27,
+      28,    29,    30,     0,     0,     0,    87,    31,    88,    89,
+      90,    91,     0,     0,    92,    93,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    94,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   139,    95,    96,     0,    97,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,     0,     0,     0,    23,    24,     0,     0,     0,    25,
+      26,     0,    27,    28,    29,    30,     0,     0,     0,    87,
       31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    94,     0,     0,     0,
-       8,     9,    10,     0,     0,     0,     0,    95,    96,     0,
-      97,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,    25,   175,
-       0,    27,    28,    29,    30,    87,    31,    88,    89,    90,
+       0,     0,    58,     2,     3,     4,    94,     6,     7,     8,
+       9,    10,     0,     0,     0,     0,   139,    95,    96,     0,
+      97,     0,     0,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
+       0,     0,     0,    25,    26,     0,    27,    28,    29,    30,
+       0,     0,     0,    87,    31,    88,    89,    90,    91,     0,
+       0,    92,    93,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      94,     8,     9,    10,     0,     0,     0,     0,     0,     0,
+       0,    95,    96,     0,    97,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,     0,     0,     0,    25,    26,     0,    27,    28,
+      29,    30,     0,     0,     0,    87,    31,    88,    89,    90,
       91,     0,     0,    92,    93,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    94,     2,     3,     4,     0,     0,     0,     8,
-       9,    10,     0,    95,    96,     0,    97,     0,     0,     0,
+       0,     0,    94,     0,     0,   161,     8,     9,    10,     0,
+       0,     0,     0,    95,    96,     0,    97,     0,     0,     0,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,     0,     0,    25,    26,     0,
-      27,    28,    29,    30,     0,    31,     2,     3,     4,     0,
-       0,     0,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,   198,     0,     0,     0,
-      25,    26,     0,    27,    28,    29,    30,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    71,
-       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,   247,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,     0,     0,     0,    23,    24,    25,    26,     0,
-      27,    28,    29,    30,     0,    31,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
-       0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
+      21,    22,     0,     0,     0,     0,     0,     0,     0,     0,
+      25,    26,     0,    27,    28,    29,    30,     0,     0,     0,
+      87,    31,    88,    89,    90,    91,     0,     0,    92,    93,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    94,     8,     9,
+      10,     0,     0,     0,     0,     0,     0,   206,    95,    96,
+       0,    97,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,     0,     0,     0,     0,     0,     0,
+       0,     0,    25,    26,     0,    27,    28,    29,    30,     0,
+       0,     0,    87,    31,    88,    89,    90,    91,     0,     0,
+      92,    93,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
+       0,     0,   222,     8,     9,    10,     0,     0,     0,     0,
+      95,    96,     0,    97,     0,     0,     0,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
+       0,     0,     0,     0,     0,     0,     0,    25,    26,     0,
+      27,    28,    29,    30,     0,     0,     0,    87,    31,    88,
+      89,    90,    91,     0,     0,    92,    93,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    94,     8,     9,    10,     0,     0,
+       0,     0,     0,     0,     0,    95,    96,     0,    97,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,     0,     0,     0,     0,     0,     0,     0,     0,    25,
+     175,     0,    27,    28,    29,    30,     0,     0,     0,    87,
+      31,    88,    89,    90,    91,     0,     0,    92,    93,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     2,     3,     4,     0,     0,    94,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,    95,    96,     0,
+      97,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,     0,     0,     0,     0,     0,     0,     0,
+       0,    25,    26,     0,    27,    28,    29,    30,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
+      71,     0,     0,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   247,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,    23,
-      24,    25,    26,     0,    27,    28,    29,    30,     0,    31,
-       2,     3,     4,     0,     0,     0,     8,     9,    10,     0,
+      24,     0,     0,     0,    25,    26,     0,    27,    28,    29,
+      30,     0,     0,     0,     0,    31,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
-      30,     0,    31,     8,     9,    10,     0,     0,     0,     0,
+       0,     0,    23,    24,     0,     0,     0,    25,    26,     0,
+      27,    28,    29,    30,     2,     3,     4,     0,    31,     0,
+       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,    25,    26,     0,    27,    28,    29,    30,   229,    31,
-       8,     9,    10,   230,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,    25,    26,
-       0,    27,    28,    29,    30,     0,    31
+       0,     0,     0,     0,    25,    26,     0,    27,    28,    29,
+      30,     8,     9,    10,     0,    31,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
+       0,     0,     0,     0,     0,    25,    26,     0,    27,    28,
+      29,    30,     8,     9,    10,   229,    31,     0,     0,     0,
+     230,     0,     0,     0,     0,     0,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,     0,     0,
+       0,     0,     0,     0,     0,     0,    25,    26,     0,    27,
+      28,    29,    30,     0,     0,     0,     0,    31
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    55,    94,    86,    70,   127,    45,   151,   273,    60,
-      40,    36,    85,     0,     0,   160,   257,    37,    79,    85,
-      84,    82,    86,   106,     3,    45,    70,   253,   293,     8,
-       9,   272,    57,    63,    55,    56,    79,    76,    42,    82,
-      40,    85,    42,   135,    95,    75,    46,    51,    92,    93,
-      79,    51,    82,    82,    33,    34,    35,    36,    37,    46,
-      46,    74,   288,    63,    82,   109,   292,    73,    81,    90,
-      91,    73,   194,    79,     3,    75,    76,   160,   170,     8,
-       9,    72,    82,    74,    79,    79,   159,    82,    53,    54,
-      81,   174,    73,   159,    73,   125,    45,   127,    79,    74,
-     192,    62,    63,    64,    33,    34,    35,    36,    37,    74,
-      71,    73,   204,    78,   258,   159,    73,    79,    76,    72,
-      81,    74,    79,    87,    88,   125,    76,   127,   183,   184,
-     185,   186,    37,   216,   217,   179,   180,   181,   182,   183,
+       0,    55,    94,    86,    70,   127,    54,   151,     0,    69,
+      40,    40,    85,    36,     0,   160,   273,    91,    82,    85,
+     257,    42,     3,   106,    88,    54,    70,     8,     9,   253,
+      51,    64,    65,    63,    57,   272,   293,    85,    96,    97,
+      40,    85,    42,   135,   104,    75,    46,    82,    92,    93,
+      82,    51,    82,    88,    46,    36,    37,    38,    39,    40,
+      46,    66,    67,    63,   288,   109,    99,   100,   292,    62,
+      63,    93,   194,    95,     3,    75,    76,   160,   170,     8,
+       9,    83,    82,    71,    72,    73,   159,    81,    90,    83,
+      83,   174,    80,   159,    87,   125,    90,   127,    82,    82,
+     192,    82,    90,    88,    88,    88,    91,    36,    37,    38,
+      39,    40,   204,    88,   258,   159,   183,   184,   185,   186,
+      88,    88,    54,    91,    91,   125,    88,   127,    83,    91,
+       4,     5,     6,   216,   217,   179,   180,   181,   182,   183,
      184,   185,   186,   187,   188,   189,   190,   191,   221,   294,
-      45,   151,     4,     5,     6,   221,    33,    34,    35,    57,
-      58,    79,    80,    82,   194,   257,   181,   182,   187,   188,
-      45,    72,    59,    73,    45,   248,    72,   221,    61,    82,
-     272,   264,   248,    75,    72,    82,    72,    72,    82,   281,
-      79,    72,    74,    77,   194,    75,    74,    76,   252,   291,
-       3,     4,     5,     6,   248,     8,     9,    10,    11,    12,
-     210,   294,    75,    75,    72,    40,    75,    72,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      75,    45,    73,    36,    37,    38,    39,    77,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    82,    73,
-      53,    54,    16,   253,   254,    81,   171,   257,   258,    82,
-     190,   189,    82,    57,   191,    64,    82,     5,   125,    72,
-     254,   249,   272,   210,   254,   292,   272,    46,    -1,    -1,
-      83,    84,    -1,    86,    -1,    -1,    -1,    -1,   288,    -1,
+      85,   151,    36,    37,    38,   221,    81,    40,    83,    85,
+      88,    89,   181,   182,   194,   257,    54,   187,   188,    91,
+      81,    81,    54,    82,    68,   248,    84,   221,    70,    54,
+     272,   264,   248,    81,    91,    91,    81,    91,    81,   281,
+      86,    81,    83,    46,   194,     4,     5,     6,   252,   291,
+      85,    10,    11,    12,   248,    84,    83,    88,    84,    54,
+     210,   294,    84,    81,    84,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    84,    82,    81,
+      86,    91,    82,    16,   171,    44,    45,   189,    47,    48,
+      49,    50,    90,   190,    91,   191,    55,    82,    64,    57,
+      82,     5,   125,   253,   254,   254,   292,   257,   258,   249,
+     210,   272,    46,   254,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   272,    -1,    -1,    -1,    -1,    86,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   288,    -1,
       -1,    -1,   292,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      20,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
+      40,    -1,    -1,    -1,    44,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    54,    55,    56,    57,    58,    59,
+      -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,    -1,    82,    83,    84,    -1,    86,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
+      -1,    81,    -1,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    91,    92,    93,    -1,    95,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    -1,    -1,    -1,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    77,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,
-      86,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    -1,    86,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    -1,    86,     3,
+      -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    85,    86,
+      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    95,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    -1,    86,     3,     4,     5,     6,     7,     8,     9,
+      14,    15,    -1,    17,    18,    19,    20,    -1,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,
+      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
+      -1,    85,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      -1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
+      -1,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      81,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,
+      91,    92,    93,    -1,    95,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
+      18,    19,    20,    -1,    -1,    -1,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
+      -1,    39,    40,    -1,    -1,    -1,    44,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    56,    57,
+      58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    91,    92,    93,    -1,    95,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    -1,    -1,    -1,    39,    40,    -1,    -1,    -1,    44,
+      45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,    81,     8,     9,    10,
+      11,    12,    -1,    -1,    -1,    -1,    91,    92,    93,    -1,
+      95,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    -1,    -1,    -1,    39,    40,
+      -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
+      -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      81,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    93,    -1,    95,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    56,    57,    58,
+      59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    81,    -1,    -1,    84,    10,    11,    12,    -1,
+      -1,    -1,    -1,    92,    93,    -1,    95,    -1,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      44,    45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    10,    11,
+      12,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      -1,    95,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    44,    45,    -1,    47,    48,    49,    50,    -1,
+      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
+      -1,    -1,    84,    10,    11,    12,    -1,    -1,    -1,    -1,
+      92,    93,    -1,    95,    -1,    -1,    -1,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    -1,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    56,
+      57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    81,    10,    11,    12,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    95,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
+      45,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    54,
+      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     4,     5,     6,    -1,    -1,    81,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,
+      95,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    44,    45,    -1,    47,    48,    49,    50,    -1,    -1,
+      -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    10,    11,    12,    -1,
-      -1,    -1,    82,    83,    84,    -1,    86,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    75,    10,    11,    12,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    86,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      38,    39,    -1,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    53,    54,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    10,    11,
-      12,    -1,    -1,    -1,    82,    83,    84,    -1,    86,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    75,    10,    11,    12,    -1,    -1,    -1,
-      -1,    83,    84,    -1,    86,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    38,    39,    -1,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    53,    54,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-      10,    11,    12,    -1,    -1,    -1,    -1,    83,    84,    -1,
-      86,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-      -1,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,     4,     5,     6,    -1,    -1,    -1,    10,
-      11,    12,    -1,    83,    84,    -1,    86,    -1,    -1,    -1,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
-      41,    42,    43,    44,    -1,    46,     4,     5,     6,    -1,
-      -1,    -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    -1,    77,    -1,    -1,    -1,
-      38,    39,    -1,    41,    42,    43,    44,    -1,    46,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
-      41,    42,    43,    44,    -1,    46,     3,     4,     5,     6,
+      -1,    -1,    -1,    86,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    39,
+      40,    -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,
+      50,    -1,    -1,    -1,    -1,    55,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    41,    42,    43,    44,    -1,    46,
-       4,     5,     6,    -1,    -1,    -1,    10,    11,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    38,    39,    -1,    41,    42,    43,
-      44,    -1,    46,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
-      10,    11,    12,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    38,    39,
-      -1,    41,    42,    43,    44,    -1,    46
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    44,    45,    -1,
+      47,    48,    49,    50,     4,     5,     6,    -1,    55,    -1,
+      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,
+      50,    10,    11,    12,    -1,    55,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,
+      49,    50,    10,    11,    12,    54,    55,    -1,    -1,    -1,
+      59,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,
+      48,    49,    50,    -1,    -1,    -1,    -1,    55
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1213,36 +1269,36 @@
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    36,    37,    38,    39,    41,    42,    43,
-      44,    46,   126,   127,   128,   129,   130,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   175,   176,   177,    37,
-      45,   140,    45,    76,    82,   178,    73,    79,     3,    33,
-      34,    35,   132,   133,   138,    79,    82,    45,   139,   141,
-      74,     0,   176,   141,    76,   145,    76,   161,   132,   131,
-     134,   139,   133,    45,    72,    74,    81,    45,    47,    48,
-      49,    50,    53,    54,    72,    83,    84,    86,    97,    98,
-      99,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   125,   142,    82,   144,   139,   146,   147,    13,
-      14,    15,    17,    18,    19,    20,    40,    76,    77,    82,
-     108,   121,   122,   124,   126,   127,   142,   151,   152,   153,
-     154,   162,   163,   164,   167,   174,    45,   131,   134,    74,
-      81,    75,   125,   122,   150,   108,   108,   124,    53,    54,
-      74,    78,    73,    73,    79,    39,   122,    72,   108,    87,
-      88,    84,    86,    55,    56,    90,    91,    57,    58,    59,
-      61,    60,    95,    75,   146,    45,   148,   149,    77,   147,
-      82,    82,   169,    72,    72,    82,    82,   124,    72,    77,
-     155,    62,    63,    64,    71,    81,   123,    79,    82,    77,
-     152,    74,    75,   125,   150,    75,    73,   100,   124,    45,
-      50,   103,   122,   108,   108,   110,   110,   112,   112,   112,
-     112,   113,   113,   117,   118,   119,   124,    77,    74,    79,
-      82,   158,   159,   160,   170,   124,    82,   168,   162,   122,
-     122,   125,    75,    75,    80,   125,   149,    40,   161,   153,
-     151,   163,   171,    73,   124,   137,   166,   156,    75,   122,
-      75,    72,   166,   172,   173,   158,   165,    45,    73,    77,
-     124,    82,    73,    16,    81,   153,   157,   161,    73,   124,
-     157,   158,   150,    82
+      12,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    39,    40,    44,    45,    47,    48,    49,
+      50,    55,   135,   136,   137,   138,   139,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   184,   185,   186,    40,
+      54,   149,    54,    85,    91,   187,    82,    88,     3,    36,
+      37,    38,   141,   142,   147,    88,    91,    54,   148,   150,
+      83,     0,   185,   150,    85,   154,    85,   170,   141,   140,
+     143,   148,   142,    54,    81,    83,    90,    54,    56,    57,
+      58,    59,    62,    63,    81,    92,    93,    95,   106,   107,
+     108,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   134,   151,    91,   153,   148,   155,   156,    13,
+      14,    15,    17,    18,    19,    20,    46,    85,    86,    91,
+     117,   130,   131,   133,   135,   136,   151,   160,   161,   162,
+     163,   171,   172,   173,   176,   183,    54,   140,   143,    83,
+      90,    84,   134,   131,   159,   117,   117,   133,    62,    63,
+      83,    87,    82,    82,    88,    45,   131,    81,   117,    96,
+      97,    93,    95,    64,    65,    99,   100,    66,    67,    68,
+      70,    69,   104,    84,   155,    54,   157,   158,    86,   156,
+      91,    91,   178,    81,    81,    91,    91,   133,    81,    86,
+     164,    71,    72,    73,    80,    90,   132,    88,    91,    86,
+     161,    83,    84,   134,   159,    84,    82,   109,   133,    54,
+      59,   112,   131,   117,   117,   119,   119,   121,   121,   121,
+     121,   122,   122,   126,   127,   128,   133,    86,    83,    88,
+      91,   167,   168,   169,   179,   133,    91,   177,   171,   131,
+     131,   134,    84,    84,    89,   134,   158,    46,   170,   162,
+     160,   172,   180,    82,   133,   146,   175,   165,    84,   131,
+      84,    81,   175,   181,   182,   167,   174,    54,    82,    86,
+     133,    91,    82,    16,    90,   162,   166,   170,    82,   133,
+     166,   167,   159,    91
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3600,6 +3656,7 @@
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
+		ES2_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "attribute"))
             context->recover();
         (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yyvsp[(1) - (1)].lex).line);
@@ -3609,6 +3666,7 @@
   case 106:
 
     {
+	    ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
@@ -3621,6 +3679,7 @@
   case 107:
 
     {
+	    ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
             context->recover();
         if (context->shaderType == SH_VERTEX_SHADER)
diff --git a/src/compiler/glslang_tab.h b/src/compiler/glslang_tab.h
index 3e461ee..6595fb5 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -56,81 +56,90 @@
      IF = 273,
      DISCARD = 274,
      RETURN = 275,
-     BVEC2 = 276,
-     BVEC3 = 277,
-     BVEC4 = 278,
-     IVEC2 = 279,
-     IVEC3 = 280,
-     IVEC4 = 281,
-     VEC2 = 282,
-     VEC3 = 283,
-     VEC4 = 284,
-     MATRIX2 = 285,
-     MATRIX3 = 286,
-     MATRIX4 = 287,
-     IN_QUAL = 288,
-     OUT_QUAL = 289,
-     INOUT_QUAL = 290,
-     UNIFORM = 291,
-     VARYING = 292,
-     STRUCT = 293,
-     VOID_TYPE = 294,
-     WHILE = 295,
-     SAMPLER2D = 296,
-     SAMPLERCUBE = 297,
-     SAMPLER_EXTERNAL_OES = 298,
-     SAMPLER2DRECT = 299,
-     IDENTIFIER = 300,
-     TYPE_NAME = 301,
-     FLOATCONSTANT = 302,
-     INTCONSTANT = 303,
-     BOOLCONSTANT = 304,
-     FIELD_SELECTION = 305,
-     LEFT_OP = 306,
-     RIGHT_OP = 307,
-     INC_OP = 308,
-     DEC_OP = 309,
-     LE_OP = 310,
-     GE_OP = 311,
-     EQ_OP = 312,
-     NE_OP = 313,
-     AND_OP = 314,
-     OR_OP = 315,
-     XOR_OP = 316,
-     MUL_ASSIGN = 317,
-     DIV_ASSIGN = 318,
-     ADD_ASSIGN = 319,
-     MOD_ASSIGN = 320,
-     LEFT_ASSIGN = 321,
-     RIGHT_ASSIGN = 322,
-     AND_ASSIGN = 323,
-     XOR_ASSIGN = 324,
-     OR_ASSIGN = 325,
-     SUB_ASSIGN = 326,
-     LEFT_PAREN = 327,
-     RIGHT_PAREN = 328,
-     LEFT_BRACKET = 329,
-     RIGHT_BRACKET = 330,
-     LEFT_BRACE = 331,
-     RIGHT_BRACE = 332,
-     DOT = 333,
-     COMMA = 334,
-     COLON = 335,
-     EQUAL = 336,
-     SEMICOLON = 337,
-     BANG = 338,
-     DASH = 339,
-     TILDE = 340,
-     PLUS = 341,
-     STAR = 342,
-     SLASH = 343,
-     PERCENT = 344,
-     LEFT_ANGLE = 345,
-     RIGHT_ANGLE = 346,
-     VERTICAL_BAR = 347,
-     CARET = 348,
-     AMPERSAND = 349,
-     QUESTION = 350
+     SWITCH = 276,
+     CASE = 277,
+     DEFAULT = 278,
+     BVEC2 = 279,
+     BVEC3 = 280,
+     BVEC4 = 281,
+     IVEC2 = 282,
+     IVEC3 = 283,
+     IVEC4 = 284,
+     VEC2 = 285,
+     VEC3 = 286,
+     VEC4 = 287,
+     MATRIX2 = 288,
+     MATRIX3 = 289,
+     MATRIX4 = 290,
+     IN_QUAL = 291,
+     OUT_QUAL = 292,
+     INOUT_QUAL = 293,
+     UNIFORM = 294,
+     VARYING = 295,
+     CENTROID = 296,
+     FLAT = 297,
+     SMOOTH = 298,
+     STRUCT = 299,
+     VOID_TYPE = 300,
+     WHILE = 301,
+     SAMPLER2D = 302,
+     SAMPLERCUBE = 303,
+     SAMPLER_EXTERNAL_OES = 304,
+     SAMPLER2DRECT = 305,
+     SAMPLER3D = 306,
+     SAMPLER3DRECT = 307,
+     SAMPLER2DSHADOW = 308,
+     IDENTIFIER = 309,
+     TYPE_NAME = 310,
+     FLOATCONSTANT = 311,
+     INTCONSTANT = 312,
+     BOOLCONSTANT = 313,
+     FIELD_SELECTION = 314,
+     LEFT_OP = 315,
+     RIGHT_OP = 316,
+     INC_OP = 317,
+     DEC_OP = 318,
+     LE_OP = 319,
+     GE_OP = 320,
+     EQ_OP = 321,
+     NE_OP = 322,
+     AND_OP = 323,
+     OR_OP = 324,
+     XOR_OP = 325,
+     MUL_ASSIGN = 326,
+     DIV_ASSIGN = 327,
+     ADD_ASSIGN = 328,
+     MOD_ASSIGN = 329,
+     LEFT_ASSIGN = 330,
+     RIGHT_ASSIGN = 331,
+     AND_ASSIGN = 332,
+     XOR_ASSIGN = 333,
+     OR_ASSIGN = 334,
+     SUB_ASSIGN = 335,
+     LEFT_PAREN = 336,
+     RIGHT_PAREN = 337,
+     LEFT_BRACKET = 338,
+     RIGHT_BRACKET = 339,
+     LEFT_BRACE = 340,
+     RIGHT_BRACE = 341,
+     DOT = 342,
+     COMMA = 343,
+     COLON = 344,
+     EQUAL = 345,
+     SEMICOLON = 346,
+     BANG = 347,
+     DASH = 348,
+     TILDE = 349,
+     PLUS = 350,
+     STAR = 351,
+     SLASH = 352,
+     PERCENT = 353,
+     LEFT_ANGLE = 354,
+     RIGHT_ANGLE = 355,
+     VERTICAL_BAR = 356,
+     CARET = 357,
+     AMPERSAND = 358,
+     QUESTION = 359
    };
 #endif