[Scummvm-git-logs] scummvm master -> 4aa8bd69c2cdf06cc19f530accc86c48ef68a8c1

sev- sev at scummvm.org
Tue Jan 21 16:46:26 UTC 2020


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
77e7a791b7 DIRECTOR: Fix processing of palettes with 256 colors
529e1d465e DIRECTOR: Inverse sprite when clicked on
4aa8bd69c2 DIRECTOR: LINGO: Parse object field references


Commit: 77e7a791b7ee99a2c7a9b230c60f484bd0b5e004
    https://github.com/scummvm/scummvm/commit/77e7a791b7ee99a2c7a9b230c60f484bd0b5e004
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-21T09:06:00+01:00

Commit Message:
DIRECTOR: Fix processing of palettes with 256 colors

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 6a64ef1..c001782 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -390,7 +390,7 @@ void Score::loadPalette(Common::SeekableSubReadStreamEndian &stream) {
 	uint16 _paletteColorCount = steps;
 	byte *_palette = new byte[index + 1];
 
-	for (uint8 i = 0; i < steps; i++) {
+	for (int i = 0; i < steps; i++) {
 		_palette[index - 2] = stream.readByte();
 		stream.readByte();
 


Commit: 529e1d465e56d4e07f95e69d524ead67e3754405
    https://github.com/scummvm/scummvm/commit/529e1d465e56d4e07f95e69d524ead67e3754405
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-21T09:26:13+01:00

Commit Message:
DIRECTOR: Inverse sprite when clicked on

The Inverse Ink is incorrect.

Changed paths:
    engines/director/frame.cpp


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 880842f..b72e0b4 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -636,6 +636,12 @@ void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) {
 					continue;
 				}
 
+				InkType ink;
+				if (i == _vm->getCurrentScore()->_currentMouseDownSpriteId)
+					ink = kInkTypeReverse;
+				else
+					ink = _sprites[i]->_ink;
+
 				BitmapCast *bc = (BitmapCast *)_sprites[i]->_cast;
 
 				int32 regX = bc->_regX;
@@ -649,7 +655,7 @@ void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) {
 				int width = _vm->getVersion() > 4 ? bc->_initialRect.width() : _sprites[i]->_width;
 				Common::Rect drawRect(x, y, x + width, y + height);
 				addDrawRect(i, drawRect);
-				inkBasedBlit(surface, *(bc->_surface), _sprites[i]->_ink, drawRect);
+				inkBasedBlit(surface, *(bc->_surface), ink, drawRect);
 			}
 		}
 	}
@@ -1039,7 +1045,7 @@ void Frame::drawReverseSprite(Graphics::ManagedSurface &target, const Graphics::
 		for (int j = 0; j < srcRect.width(); j++) {
 			if ((getSpriteIDFromPos(Common::Point(drawRect.left + j, drawRect.top + ii)) != 0)) {
 				if (*src != skipColor) {
-					*dst = (*dst == *src ? (*src == 0 ? 0xff : 0) : *src);
+					*dst = 0xff - *src;
 				}
 			} else if (*src != skipColor) {
 				*dst = *src;


Commit: 4aa8bd69c2cdf06cc19f530accc86c48ef68a8c1
    https://github.com/scummvm/scummvm/commit/4aa8bd69c2cdf06cc19f530accc86c48ef68a8c1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-21T17:41:10+01:00

Commit Message:
DIRECTOR: LINGO: Parse object field references

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 8980419..7a94b6d 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -107,6 +107,7 @@ static struct FuncDescr {
 	{ LC::c_not,			"c_not",			"" },
 	{ LC::c_objectfieldassign,"c_objectfieldassign","sF" },
 	{ LC::c_objectfieldpush,"c_objectfieldpush","sF" }, // object, field
+	{ LC::c_objectrefpush,	"c_objectrefpush",	"ss" }, // object, field
 	{ LC::c_of,				"c_of",				"" },
 	{ LC::c_open,			"c_open",			"" },
 	{ LC::c_or,				"c_or",				"" },
@@ -456,6 +457,14 @@ void LC::c_objectfieldassign() {
 	g_lingo->setObjectField(object, field, d);
 }
 
+void LC::c_objectrefpush() {
+	Common::String object(g_lingo->readString());
+	Common::String field(g_lingo->readString());
+
+	Datum d = g_lingo->getObjectRef(object, field);
+	g_lingo->push(d);
+}
+
 void LC::c_swap() {
 	Datum d2 = g_lingo->pop();
 	Datum d1 = g_lingo->pop();
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index e02fc91..23dff63 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -82,6 +82,7 @@ namespace LC {
 	void c_themenuitementityassign();
 	void c_objectfieldpush();
 	void c_objectfieldassign();
+	void c_objectrefpush();
 
 	void c_repeatwhilecode();
 	void c_repeatwithcode();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 42d9931..6c9353b 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -173,61 +173,62 @@ extern int yydebug;
     tPLAYACCEL = 283,
     tMETHOD = 284,
     THEOBJECTFIELD = 285,
-    tDOWN = 286,
-    tELSE = 287,
-    tELSIF = 288,
-    tEXIT = 289,
-    tGLOBAL = 290,
-    tGO = 291,
-    tIF = 292,
-    tIN = 293,
-    tINTO = 294,
-    tLOOP = 295,
-    tMACRO = 296,
-    tMOVIE = 297,
-    tNEXT = 298,
-    tOF = 299,
-    tPREVIOUS = 300,
-    tPUT = 301,
-    tREPEAT = 302,
-    tSET = 303,
-    tTHEN = 304,
-    tTO = 305,
-    tWHEN = 306,
-    tWITH = 307,
-    tWHILE = 308,
-    tNLELSE = 309,
-    tFACTORY = 310,
-    tOPEN = 311,
-    tPLAY = 312,
-    tDONE = 313,
-    tINSTANCE = 314,
-    tGE = 315,
-    tLE = 316,
-    tEQ = 317,
-    tNEQ = 318,
-    tAND = 319,
-    tOR = 320,
-    tNOT = 321,
-    tMOD = 322,
-    tAFTER = 323,
-    tBEFORE = 324,
-    tCONCAT = 325,
-    tCONTAINS = 326,
-    tSTARTS = 327,
-    tCHAR = 328,
-    tITEM = 329,
-    tLINE = 330,
-    tWORD = 331,
-    tSPRITE = 332,
-    tINTERSECTS = 333,
-    tWITHIN = 334,
-    tTELL = 335,
-    tPROPERTY = 336,
-    tON = 337,
-    tENDIF = 338,
-    tENDREPEAT = 339,
-    tENDTELL = 340
+    THEOBJECTREF = 286,
+    tDOWN = 287,
+    tELSE = 288,
+    tELSIF = 289,
+    tEXIT = 290,
+    tGLOBAL = 291,
+    tGO = 292,
+    tIF = 293,
+    tIN = 294,
+    tINTO = 295,
+    tLOOP = 296,
+    tMACRO = 297,
+    tMOVIE = 298,
+    tNEXT = 299,
+    tOF = 300,
+    tPREVIOUS = 301,
+    tPUT = 302,
+    tREPEAT = 303,
+    tSET = 304,
+    tTHEN = 305,
+    tTO = 306,
+    tWHEN = 307,
+    tWITH = 308,
+    tWHILE = 309,
+    tNLELSE = 310,
+    tFACTORY = 311,
+    tOPEN = 312,
+    tPLAY = 313,
+    tDONE = 314,
+    tINSTANCE = 315,
+    tGE = 316,
+    tLE = 317,
+    tEQ = 318,
+    tNEQ = 319,
+    tAND = 320,
+    tOR = 321,
+    tNOT = 322,
+    tMOD = 323,
+    tAFTER = 324,
+    tBEFORE = 325,
+    tCONCAT = 326,
+    tCONTAINS = 327,
+    tSTARTS = 328,
+    tCHAR = 329,
+    tITEM = 330,
+    tLINE = 331,
+    tWORD = 332,
+    tSPRITE = 333,
+    tINTERSECTS = 334,
+    tWITHIN = 335,
+    tTELL = 336,
+    tPROPERTY = 337,
+    tON = 338,
+    tENDIF = 339,
+    tENDREPEAT = 340,
+    tENDTELL = 341
   };
 #endif
 
@@ -250,7 +251,12 @@ union YYSTYPE
 		int oe;
 	} objectfield;
 
-#line 254 "engines/director/lingo/lingo-gr.cpp"
+	struct {
+		Common::String *obj;
+		Common::String *field;
+	} objectref;
+
+#line 260 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -567,21 +573,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  126
+#define YYFINAL  127
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1689
+#define YYLAST   1654
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  101
+#define YYNTOKENS  102
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  51
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  171
+#define YYNRULES  172
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  369
+#define YYNSTATES  370
 
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   340
+#define YYMAXUTOK   341
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -594,15 +600,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      94,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      95,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    93,    88,     2,
-      95,    96,    91,    89,    97,    90,     2,    92,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   100,     2,
-      86,     2,    87,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    94,    89,     2,
+      96,    97,    92,    90,    98,    91,     2,    93,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   101,     2,
+      87,     2,    88,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    98,     2,    99,     2,     2,     2,     2,     2,     2,
+       2,    99,     2,   100,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -627,31 +633,31 @@ static const yytype_int8 yytranslate[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85
+      85,    86
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   135,   135,   136,   137,   139,   140,   141,   143,   149,
-     152,   153,   154,   160,   167,   173,   180,   186,   193,   204,
-     211,   212,   213,   215,   216,   217,   218,   220,   221,   226,
-     237,   254,   266,   277,   279,   284,   288,   293,   297,   307,
-     318,   319,   321,   328,   338,   349,   351,   357,   363,   370,
-     372,   374,   375,   376,   378,   384,   387,   390,   394,   398,
-     402,   404,   405,   406,   409,   412,   415,   423,   429,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   459,   460,   461,   462,   463,   464,   465,
-     466,   468,   471,   473,   474,   475,   476,   477,   478,   478,
-     479,   479,   480,   481,   484,   487,   488,   490,   494,   499,
-     503,   508,   512,   524,   525,   526,   527,   531,   535,   540,
-     541,   543,   544,   548,   552,   556,   556,   586,   586,   586,
-     593,   594,   594,   601,   611,   619,   619,   621,   622,   623,
-     624,   626,   627,   628,   630,   632,   640,   641,   642,   644,
-     645,   647,   649,   650,   651,   652,   654,   655,   657,   658,
-     660,   664
+       0,   141,   141,   142,   143,   145,   146,   147,   149,   155,
+     158,   159,   160,   166,   173,   179,   186,   192,   199,   210,
+     217,   218,   219,   221,   222,   223,   224,   226,   227,   232,
+     243,   260,   272,   283,   285,   290,   294,   299,   303,   313,
+     324,   325,   327,   334,   344,   355,   357,   363,   369,   376,
+     378,   380,   381,   382,   384,   390,   393,   396,   400,   404,
+     408,   410,   411,   412,   415,   418,   421,   429,   435,   440,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
+     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
+     466,   467,   468,   469,   471,   472,   473,   474,   475,   476,
+     477,   478,   480,   483,   485,   486,   487,   488,   489,   490,
+     490,   491,   491,   492,   493,   496,   499,   500,   502,   506,
+     511,   515,   520,   524,   536,   537,   538,   539,   543,   547,
+     552,   553,   555,   556,   560,   564,   568,   568,   598,   598,
+     598,   605,   606,   606,   613,   623,   631,   631,   633,   634,
+     635,   636,   638,   639,   640,   642,   644,   652,   653,   654,
+     656,   657,   659,   661,   662,   663,   664,   666,   667,   669,
+     670,   672,   676
 };
 #endif
 
@@ -665,16 +671,16 @@ static const char *const yytname[] =
   "ARGC", "ARGCNORET", "THEENTITY", "THEENTITYWITHID", "THEMENUITEMENTITY",
   "FLOAT", "BLTIN", "FBLTIN", "RBLTIN", "ID", "STRING", "HANDLER",
   "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tMETHOD", "THEOBJECTFIELD",
-  "tDOWN", "tELSE", "tELSIF", "tEXIT", "tGLOBAL", "tGO", "tIF", "tIN",
-  "tINTO", "tLOOP", "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS",
-  "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE",
-  "tNLELSE", "tFACTORY", "tOPEN", "tPLAY", "tDONE", "tINSTANCE", "tGE",
-  "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE",
-  "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD",
-  "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL", "tPROPERTY", "tON",
-  "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'", "'&'", "'+'", "'-'",
-  "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'", "':'",
-  "$accept", "program", "programline", "asgn", "stmtoneliner",
+  "THEOBJECTREF", "tDOWN", "tELSE", "tELSIF", "tEXIT", "tGLOBAL", "tGO",
+  "tIF", "tIN", "tINTO", "tLOOP", "tMACRO", "tMOVIE", "tNEXT", "tOF",
+  "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH",
+  "tWHILE", "tNLELSE", "tFACTORY", "tOPEN", "tPLAY", "tDONE", "tINSTANCE",
+  "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER",
+  "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE",
+  "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL", "tPROPERTY",
+  "tON", "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'", "'&'", "'+'",
+  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'",
+  "':'", "$accept", "program", "programline", "asgn", "stmtoneliner",
   "stmtonelinerwithif", "stmt", "tellstart", "ifstmt", "elseifstmtlist",
   "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "if", "elseif",
   "begin", "end", "stmtlist", "when", "simpleexpr", "expr", "chunkexpr",
@@ -699,13 +705,13 @@ static const yytype_int16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      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,    60,    62,    38,    43,
-      45,    42,    47,    37,    10,    40,    41,    44,    91,    93,
-      58
+     335,   336,   337,   338,   339,   340,   341,    60,    62,    38,
+      43,    45,    42,    47,    37,    10,    40,    41,    44,    91,
+      93,    58
 };
 # endif
 
-#define YYPACT_NINF (-269)
+#define YYPACT_NINF (-270)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -719,43 +725,43 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     342,   -70,  -269,  -269,  1026,  -269,  1060,  1140,    30,  1174,
-    -269,  -269,  -269,  -269,  -269,    27,  -269,   908,  -269,  -269,
-      33,  1026,   -33,    93,    54,    73,  1026,   946,    91,  1026,
-    1026,  1026,  1026,  1026,  1026,  1026,  -269,  -269,  1026,  1026,
-    1026,   422,     8,  -269,  -269,  -269,  -269,  -269,  1026,   -20,
-    1026,   748,  -269,  1584,  -269,  -269,  -269,  -269,  -269,  -269,
-    -269,  -269,  -269,  -269,   -12,  1026,  1584,  1026,  1584,    18,
-    1026,    18,  -269,  -269,  1026,  1584,    20,  1026,  -269,  -269,
-      95,  -269,  1026,  -269,    77,  -269,   414,  -269,    97,  -269,
-     166,   101,  -269,   -29,    30,    30,    -2,    79,    82,  -269,
-    1501,  -269,   414,  -269,  -269,    35,  -269,  1195,  1229,  1262,
-    1295,  1551,  1460,   128,   130,  -269,  -269,  1514,    55,    57,
-    -269,  1584,    59,    63,    64,  -269,  -269,   508,  1584,  1026,
-    1026,  1584,  -269,  -269,  1026,  1584,  -269,  -269,  1026,  1026,
-    1026,  1026,  1026,  1026,  1026,  1026,  1026,  1026,  1026,  1026,
-    1026,  1026,  1026,  1026,  1026,   131,  1026,   166,  1514,   -38,
-    1026,    -3,    11,  1026,    18,   131,  -269,    65,  1584,  1026,
-    -269,  -269,    16,  1026,  1026,  -269,  1026,  1026,     0,   119,
-    1026,  1026,  1026,  -269,  1026,  -269,   141,  1026,  1026,  1026,
-    1026,  1026,  1026,  1026,  1026,  1026,  1026,  -269,  -269,  -269,
-      69,  -269,  -269,    30,    30,  -269,  1026,    60,  -269,  -269,
-    1584,  1584,   118,  -269,  1584,     9,     9,     9,     9,  1597,
-    1597,  -269,    14,     9,     9,     9,     9,    14,   -51,   -51,
-    -269,  -269,  -269,   -42,  -269,  1584,  -269,  -269,  1584,   -30,
-     148,  1584,  -269,  -269,  -269,  1584,  1584,  1584,     9,  1026,
-    1026,   151,  1584,     9,  1584,  1584,  -269,  1584,  1328,  1584,
-    1361,  1584,  1394,  1584,  1427,  1584,  1584,   828,  -269,   152,
-    -269,  -269,  1584,    55,    57,  -269,   668,  -269,     1,  -269,
-     132,    85,   156,    85,  -269,   131,  1584,     9,    30,  1026,
-    1026,  1026,  1026,  -269,   668,  -269,  -269,  -269,   109,   668,
-     144,  1026,   668,   828,   172,  -269,  -269,  -269,   -26,   149,
-    1584,  1584,  1584,  1584,  -269,   113,  -269,   122,  1026,  1584,
-    -269,  -269,  -269,   588,   668,    85,  1026,  -269,  -269,  1584,
-    -269,    80,   -18,   180,  -269,  1584,  -269,   668,  -269,  -269,
-    -269,  1026,   124,  -269,  -269,  -269,   111,   668,   668,   125,
-    -269,  1584,  -269,   828,   187,   129,  -269,   668,   163,  -269,
-    -269,  -269,   133,  -269,   134,  -269,   668,  -269,  -269
+     283,   -74,  -270,  -270,   978,  -270,  1013,  1094,    20,  1129,
+    -270,  -270,  -270,  -270,  -270,  -270,    52,  -270,   859,  -270,
+    -270,    53,   978,    16,   146,    29,    68,   978,   897,    80,
+     978,   978,   978,   978,   978,   978,   978,  -270,  -270,   978,
+     978,   978,   367,     7,  -270,  -270,  -270,  -270,  -270,   978,
+       3,   978,   697,  -270,  1548,  -270,  -270,  -270,  -270,  -270,
+    -270,  -270,  -270,  -270,  -270,    17,   978,  1548,   978,  1548,
+      23,   978,    23,  -270,  -270,   978,  1548,    24,   978,  -270,
+    -270,    91,  -270,   978,  -270,    73,  -270,   359,  -270,    92,
+    -270,  1168,    94,  -270,     2,    20,    20,    27,    67,    70,
+    -270,   143,  -270,   359,  -270,  -270,    25,  -270,  1201,  1234,
+    1267,  1300,  1515,  1465,   101,   102,  -270,  -270,  1478,    31,
+      51,  -270,  1548,    54,    57,    58,  -270,  -270,   454,  1548,
+     978,   978,  1548,  -270,  -270,   978,  1548,  -270,  -270,   978,
+     978,   978,   978,   978,   978,   978,   978,   978,   978,   978,
+     978,   978,   978,   978,   978,   978,   135,   978,  1168,  1478,
+     -42,   978,   -37,   -17,   978,    23,   135,  -270,    61,  1548,
+     978,  -270,  -270,    18,   978,   978,  -270,   978,   978,    34,
+     116,   978,   978,   978,  -270,   978,  -270,   142,   978,   978,
+     978,   978,   978,   978,   978,   978,   978,   978,  -270,  -270,
+    -270,    69,  -270,  -270,    20,    20,  -270,   978,    72,  -270,
+    -270,  1548,  1548,   122,  -270,  1548,    15,    15,    15,    15,
+    1561,  1561,  -270,    19,    15,    15,    15,    15,    19,   -34,
+     -34,  -270,  -270,  -270,   -79,  -270,  1548,  -270,  -270,  1548,
+     -78,   152,  1548,  -270,  -270,  -270,  1548,  1548,  1548,    15,
+     978,   978,   157,  1548,    15,  1548,  1548,  -270,  1548,  1333,
+    1548,  1366,  1548,  1399,  1548,  1432,  1548,  1548,   778,  -270,
+     159,  -270,  -270,  1548,    31,    51,  -270,   616,  -270,    22,
+    -270,   133,    96,   176,    96,  -270,   135,  1548,    15,    20,
+     978,   978,   978,   978,  -270,   616,  -270,  -270,  -270,   115,
+     616,   150,   978,   616,   778,   179,  -270,  -270,  -270,   -73,
+     166,  1548,  1548,  1548,  1548,  -270,   124,  -270,   134,   978,
+    1548,  -270,  -270,  -270,   535,   616,    96,   978,  -270,  -270,
+    1548,  -270,    43,   -21,   197,  -270,  1548,  -270,   616,  -270,
+    -270,  -270,   978,   138,  -270,  -270,  -270,   125,   616,   616,
+     139,  -270,  1548,  -270,   778,   202,   141,  -270,   616,   177,
+    -270,  -270,  -270,   144,  -270,   145,  -270,   616,  -270,  -270
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -763,65 +769,65 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    66,     0,    56,   156,   156,     0,    59,
-      58,    57,   135,   141,    68,   107,   108,     0,    47,   137,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   110,   145,     0,     0,
-       0,   162,     0,     3,    69,    27,     7,    28,     0,     0,
-       0,     0,    61,    21,   102,    62,    22,   104,   105,     6,
-      49,    20,    60,     4,    59,     0,    67,   156,   157,   114,
-     156,    64,    59,   101,   156,   159,   155,   156,    49,   106,
-       0,   123,     0,   124,     0,   125,   126,   128,     0,    33,
-     103,     0,    45,     0,     0,     0,     0,     0,     0,   140,
-     116,   131,   132,   134,   121,   112,    83,     0,     0,     0,
-       0,     0,     0,     0,     0,    88,    89,     0,    58,    57,
-     163,   166,     0,   164,   165,   168,     1,     5,    50,     0,
-       0,    50,    50,    26,     0,    24,    25,    23,     0,     0,
+       0,     0,    55,    66,     0,    56,   157,   157,     0,    59,
+      58,    57,   136,   142,    68,    69,   108,   109,     0,    47,
+     138,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   111,   146,     0,
+       0,     0,   163,     0,     3,    70,    27,     7,    28,     0,
+       0,     0,     0,    61,    21,   103,    62,    22,   105,   106,
+       6,    49,    20,    60,     4,    59,     0,    67,   157,   158,
+     115,   157,    64,    59,   102,   157,   160,   156,   157,    49,
+     107,     0,   124,     0,   125,     0,   126,   127,   129,     0,
+      33,   104,     0,    45,     0,     0,     0,     0,     0,     0,
+     141,   117,   132,   133,   135,   122,   113,    84,     0,     0,
+       0,     0,     0,     0,     0,     0,    89,    90,     0,    58,
+      57,   164,   167,     0,   165,   166,   169,     1,     5,    50,
+       0,     0,    50,    50,    26,     0,    24,    25,    23,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   147,   156,     0,   157,     0,
-       0,     0,     0,     0,   136,   147,   117,   109,   130,     0,
-     127,   138,     0,     0,     0,    46,     0,     0,     0,     0,
-       0,     0,     0,    54,     0,   133,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    37,    37,   119,
-     111,   146,    90,     0,     0,   161,     0,     0,     2,    51,
-      50,    50,     0,    34,    50,    79,    80,    77,    78,    81,
-      82,    74,    85,    86,    87,    76,    75,    84,    70,    71,
-      72,    73,   148,     0,   113,   158,    63,    65,   160,     0,
-       0,   129,    49,     8,     9,    10,    11,    15,    13,     0,
-       0,     0,    14,    12,    19,   115,   122,    93,     0,    95,
-       0,    97,     0,    99,     0,    91,    92,     0,    51,     0,
-     171,   170,   167,     0,     0,   169,    50,    51,     0,    51,
-       0,   154,     0,   154,   118,   147,    16,    17,     0,     0,
-       0,     0,     0,    50,    50,   120,    52,    53,     0,    50,
-       0,     0,    50,     0,     0,    51,   149,    51,     0,     0,
-      94,    96,    98,   100,    36,     0,    29,     0,     0,    50,
-      40,    50,   150,   144,   142,   154,     0,    35,    32,    50,
-      51,    50,     0,   151,    51,    18,    51,    50,    49,    48,
-      41,     0,     0,    49,    44,   152,   143,   139,    50,     0,
-      51,    50,    38,     0,     0,     0,    30,    50,     0,    50,
-     153,    31,     0,    51,     0,    39,    50,    43,    42
+       0,     0,     0,     0,     0,     0,   148,   157,     0,   158,
+       0,     0,     0,     0,     0,   137,   148,   118,   110,   131,
+       0,   128,   139,     0,     0,     0,    46,     0,     0,     0,
+       0,     0,     0,     0,    54,     0,   134,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    37,    37,
+     120,   112,   147,    91,     0,     0,   162,     0,     0,     2,
+      51,    50,    50,     0,    34,    50,    80,    81,    78,    79,
+      82,    83,    75,    86,    87,    88,    77,    76,    85,    71,
+      72,    73,    74,   149,     0,   114,   159,    63,    65,   161,
+       0,     0,   130,    49,     8,     9,    10,    11,    15,    13,
+       0,     0,     0,    14,    12,    19,   116,   123,    94,     0,
+      96,     0,    98,     0,   100,     0,    92,    93,     0,    51,
+       0,   172,   171,   168,     0,     0,   170,    50,    51,     0,
+      51,     0,   155,     0,   155,   119,   148,    16,    17,     0,
+       0,     0,     0,     0,    50,    50,   121,    52,    53,     0,
+      50,     0,     0,    50,     0,     0,    51,   150,    51,     0,
+       0,    95,    97,    99,   101,    36,     0,    29,     0,     0,
+      50,    40,    50,   151,   145,   143,   155,     0,    35,    32,
+      50,    51,    50,     0,   152,    51,    18,    51,    50,    49,
+      48,    41,     0,     0,    49,    44,   153,   144,   140,    50,
+       0,    51,    50,    38,     0,     0,     0,    30,    50,     0,
+      50,   154,    31,     0,    51,     0,    39,    50,    43,    42
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -269,  -269,    87,  -269,  -258,  -269,     6,    17,  -269,  -269,
-    -269,  -269,  -269,  -269,   167,  -269,   -74,   -10,   -57,  -269,
-      -7,    -4,  -269,    47,   170,  -269,  -269,  -269,  -269,  -269,
-    -269,   -17,  -269,  -269,  -269,  -269,  -269,  -269,  -269,  -269,
-    -158,  -269,  -268,   173,     5,  -269,  -269,  -269,  -269,  -269,
-      25
+    -270,  -270,   109,  -270,  -255,  -270,     6,    40,  -270,  -270,
+    -270,  -270,  -270,  -270,   189,  -270,   -75,   -82,    64,  -270,
+      -7,    -4,  -270,    71,   190,  -270,  -270,  -270,  -270,  -270,
+    -270,   -19,  -270,  -270,  -270,  -270,  -270,  -270,  -270,  -270,
+    -158,  -270,  -269,   191,     4,  -270,  -270,  -270,  -270,  -270,
+      37
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    42,    43,    44,    45,   132,   297,   267,    47,   331,
-     340,   133,    48,    49,    50,   341,   155,   209,   276,    51,
-      52,    53,    54,    55,    56,    80,   113,   167,   200,   105,
-      57,    87,    58,    77,    59,    88,   242,    78,    60,   114,
-     233,   346,   305,    61,   162,    76,    62,   122,   123,   124,
-     125
+      -1,    43,    44,    45,    46,   133,   298,   268,    48,   332,
+     341,   134,    49,    50,    51,   342,   156,   210,   277,    52,
+      53,    54,    55,    56,    57,    81,   114,   168,   201,   106,
+      58,    88,    59,    78,    60,    89,   243,    79,    61,   115,
+     234,   347,   306,    62,   163,    77,    63,   123,   124,   125,
+     126
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -829,348 +835,342 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      66,    73,    68,    68,   165,    75,    46,   239,   126,   293,
-     103,    69,    71,    86,   343,   307,   144,    90,   129,    91,
-      92,   176,   100,   102,    63,   106,   107,   108,   109,   110,
-     111,   112,   300,   177,   115,   116,   117,   121,     8,   243,
-     153,   154,   130,     2,   128,   321,   131,   135,   180,     5,
-     249,   301,   281,    72,    10,   282,    11,   334,   234,   160,
-     181,   157,   250,   158,   283,   344,   158,   282,   325,   170,
-     158,   282,   159,    68,    79,   161,   144,    98,   168,   145,
-      89,   144,   164,   156,   273,   185,   274,   178,   179,    30,
-      31,    32,    33,   236,   160,   359,    99,   150,   151,   152,
-     153,   154,   127,   151,   152,   153,   154,   237,   160,    93,
-      94,    95,   338,   339,   104,   160,    96,   163,   166,   169,
-     171,   212,   213,    97,   175,   210,   211,   308,    41,   182,
-     214,   183,   186,    46,   215,   216,   217,   218,   219,   220,
+      67,    74,    69,    69,   166,    76,    47,   127,   240,   104,
+      70,    72,   344,   294,    87,   308,   282,   284,    91,   283,
+     283,    64,   326,   101,   103,   283,   107,   108,   109,   110,
+     111,   112,   113,     2,   145,   116,   117,   118,   122,     5,
+       8,   244,   130,    73,    10,   129,    11,   132,   136,   322,
+     213,   214,    99,   177,   301,   235,   161,   335,   154,   155,
+     237,   161,   158,   345,   159,   178,   131,   159,   171,    92,
+      93,   159,   160,   302,    69,   162,   339,   340,   181,   169,
+     238,   161,   165,   145,   186,   250,   146,   145,   179,   180,
+     182,   100,    31,    32,    33,    34,   274,   251,   275,   360,
+      80,    90,   128,   105,   151,   152,   153,   154,   155,   152,
+     153,   154,   155,   157,   167,   172,   170,   176,   183,    42,
+     184,   161,   164,   187,   200,   202,   211,   212,   309,   278,
+     279,   215,   204,   281,    47,   216,   217,   218,   219,   220,
      221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   199,    68,   201,   232,   203,   235,   204,   205,   238,
-     206,   207,   240,   251,   256,   241,   269,   279,   285,   245,
-     246,   284,   247,   248,   288,   295,   252,   253,   254,   306,
-     255,   303,   304,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   316,   318,   322,   270,   271,   327,   326,
-     277,   278,   272,   345,   280,   172,   328,   352,   354,   356,
-     360,   294,   363,   361,   208,   268,   365,   367,   134,   244,
-     299,   136,   302,     0,   137,     0,   138,   139,   140,   141,
-     142,   143,   275,   144,   173,   174,   145,   146,   147,     0,
-       0,     0,     0,     0,     0,   286,   287,     0,   323,     0,
-     324,     0,   148,   149,   150,   151,   152,   153,   154,     0,
-       0,     0,     0,     0,   350,     0,   298,     0,     0,   353,
-       0,     0,     0,   337,     0,     0,     0,   347,     0,   348,
-       0,   309,     0,   314,   315,   310,   311,   312,   313,   317,
-       0,     0,   320,   357,     0,     0,     0,   319,     0,     0,
-       0,     0,     0,     0,     0,     0,   366,     0,     0,   330,
-       0,   332,     0,     0,   329,     0,     0,     0,     0,   336,
-       0,   342,   335,     0,     0,     0,     0,   349,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   351,   355,     0,
-       0,   358,    -5,     1,     0,     0,     0,   362,     0,   364,
-       0,     0,     0,     0,     0,     2,   368,     0,     3,     4,
-       0,     5,     6,     7,     8,     9,    10,     0,    11,     0,
-      12,    13,    14,     0,     0,     0,    15,    16,    17,    18,
-       0,     0,     0,    19,     0,    20,     0,     0,    21,    22,
-      23,     0,     0,    24,     0,     0,     0,    25,    26,    27,
-       0,    28,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-       0,     0,    35,    36,    37,     0,     0,     0,     0,     0,
-       0,    38,    39,     0,     0,     2,    -5,    40,     3,     4,
-      41,     5,     0,     7,     8,    64,   118,     0,   119,     0,
-       0,     0,    14,     0,     0,     0,    82,     0,    84,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    65,     0,
-      23,     0,     0,     0,   138,   139,   140,   141,   142,   143,
-       0,   144,     0,     0,   145,   146,   147,     0,    29,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-     148,   149,   150,   151,   152,   153,   154,     0,     0,     0,
-       0,    38,    39,     0,     0,     0,     0,    40,     0,     0,
-      41,     2,   120,     0,     3,     4,     0,     5,     6,     7,
-       8,     9,    10,     0,    11,     0,    12,    13,    14,     0,
-       0,     0,    15,    16,    17,    18,     0,     0,     0,    19,
-       0,    20,     0,     0,    21,    22,    23,     0,     0,    24,
-       0,     0,     0,    25,    26,    27,     0,    28,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     2,     0,    40,     3,     4,    41,     5,     6,     7,
-       8,     9,    10,     0,    11,   333,    12,     0,    14,     0,
-       0,     0,    15,    16,    17,    18,     0,     0,     0,     0,
-       0,    20,     0,     0,    21,    22,    23,     0,     0,    24,
-       0,     0,     0,     0,    26,    27,     0,    28,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-       0,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     2,   296,    40,     3,     4,    41,     5,     6,     7,
-       8,     9,    10,     0,    11,     0,    12,     0,    14,     0,
-       0,     0,    15,    16,    17,    18,     0,     0,     0,     0,
-       0,    20,     0,     0,    21,    22,    23,     0,     0,    24,
-       0,     0,     0,     0,    26,    27,     0,    28,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-       0,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     2,   296,    40,     3,     4,    41,     5,     6,     7,
-       8,     9,    10,     0,    11,     0,    12,     0,    14,     0,
-       0,     0,    15,    16,    17,    18,     0,     0,     0,     0,
-       0,     0,     0,     0,    21,     0,    23,     0,     0,     0,
-       0,     0,     0,     0,    26,    27,     0,    28,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,     0,    36,
-       0,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     2,     0,    40,     3,     4,    41,     5,     6,     7,
-       8,     9,    10,     0,    11,     0,    12,     0,    14,     0,
-       0,     0,    15,    16,    17,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    21,     0,    23,     0,     0,     0,
-       0,     0,     0,     0,    26,    27,     0,    28,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,     0,    36,
-       0,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,     2,     0,    40,     3,     4,    41,     5,     0,     7,
-       8,    64,    10,     0,    11,     0,     0,     0,    14,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    81,     0,
-      82,    83,    84,    85,    65,     0,    23,     0,     0,     2,
-       0,     0,     3,     4,     0,     5,     0,     7,     8,    64,
-      10,     0,    11,     0,    29,     0,    14,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,    82,     0,
-      84,     0,    65,     0,    23,     0,     0,    38,    39,     0,
-       0,     0,     0,    40,   101,     0,    41,     0,     0,     0,
-       0,     0,    29,     0,     0,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    38,    39,     0,     0,     2,
-       0,    40,     3,     4,    41,     5,     0,     7,     8,    64,
-      10,     0,    11,     0,     0,     0,    14,     0,     0,     0,
+     231,   232,   205,    69,   206,   207,   208,   236,   233,   241,
+     239,   252,    94,    95,    96,   257,   242,   270,   286,    97,
+     246,   247,   280,   248,   249,   285,    98,   253,   254,   255,
+     289,   256,   296,   304,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   305,   299,   185,   271,   272,   307,
+     317,   319,   323,   273,   139,   140,   141,   142,   143,   144,
+     328,   145,   315,   316,   146,   147,   148,   327,   318,   329,
+     346,   321,   353,   355,   357,   361,   362,   364,   366,   368,
+     149,   150,   151,   152,   153,   154,   155,   209,   331,   269,
+     333,   135,   137,   138,   245,   276,   287,   288,   337,     0,
+     343,     0,     0,     0,     0,     0,   350,     0,     0,     0,
+       0,     0,     0,     0,   351,     0,     0,   356,     0,   354,
+     359,     0,     0,     0,     0,     0,   363,     0,   365,     0,
+       0,     0,   310,    -5,     1,   369,   311,   312,   313,   314,
+       0,     0,     0,     0,     0,     0,     2,     0,   320,     3,
+       4,     0,     5,     6,     7,     8,     9,    10,     0,    11,
+       0,    12,    13,    14,    15,   330,     0,     0,    16,    17,
+      18,    19,     0,   336,     0,    20,     0,    21,     0,     0,
+      22,    23,    24,   295,     0,    25,     0,     0,   352,    26,
+      27,    28,   300,    29,   303,     0,     0,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,     0,     0,    36,    37,    38,     0,     0,     0,
+     324,     0,   325,    39,    40,     0,     0,     0,    -5,    41,
+       2,     0,    42,     3,     4,     0,     5,     0,     7,     8,
+      65,   119,     0,   120,     0,   338,     0,    14,    15,   348,
+       0,   349,    83,     0,    85,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    66,   358,    24,     0,     0,     0,
+     139,   140,   141,   142,   143,   144,     0,   145,   367,     0,
+     146,   147,   148,     0,    30,     0,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,   149,   150,   151,   152,
+     153,   154,   155,     0,     0,     0,     0,    39,    40,     0,
+       0,     0,     0,    41,     0,     0,    42,     2,   121,     0,
+       3,     4,     0,     5,     6,     7,     8,     9,    10,     0,
+      11,     0,    12,    13,    14,    15,     0,     0,     0,    16,
+      17,    18,    19,     0,     0,     0,    20,     0,    21,     0,
+       0,    22,    23,    24,     0,     0,    25,     0,     0,     0,
+      26,    27,    28,     0,    29,     0,     0,     0,     0,     0,
+       0,    30,     0,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,     0,     0,    36,    37,    38,     0,     0,
+       0,     0,     0,     0,    39,    40,     0,     0,     2,     0,
+      41,     3,     4,    42,     5,     6,     7,     8,     9,    10,
+       0,    11,   334,    12,     0,    14,    15,     0,     0,     0,
+      16,    17,    18,    19,     0,     0,     0,     0,     0,    21,
+       0,     0,    22,    23,    24,     0,     0,    25,     0,     0,
+       0,     0,    27,    28,     0,    29,     0,     0,     0,     0,
+       0,     0,    30,     0,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,     0,     0,    36,    37,     0,     0,
+       0,     0,     0,     0,     0,    39,    40,     0,     0,     2,
+     297,    41,     3,     4,    42,     5,     6,     7,     8,     9,
+      10,     0,    11,     0,    12,     0,    14,    15,     0,     0,
+       0,    16,    17,    18,    19,     0,     0,     0,     0,     0,
+      21,     0,     0,    22,    23,    24,     0,     0,    25,     0,
+       0,     0,     0,    27,    28,     0,    29,     0,     0,     0,
+       0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
+      31,    32,    33,    34,    35,     0,     0,    36,    37,     0,
+       0,     0,     0,     0,     0,     0,    39,    40,     0,     0,
+       2,   297,    41,     3,     4,    42,     5,     6,     7,     8,
+       9,    10,     0,    11,     0,    12,     0,    14,    15,     0,
+       0,     0,    16,    17,    18,    19,     0,     0,     0,     0,
+       0,     0,     0,     0,    22,     0,    24,     0,     0,     0,
+       0,     0,     0,     0,    27,    28,     0,    29,     0,     0,
+       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,     0,     0,     0,    37,
+       0,     0,     0,     0,     0,     0,     0,    39,    40,     0,
+       0,     2,     0,    41,     3,     4,    42,     5,     6,     7,
+       8,     9,    10,     0,    11,     0,    12,     0,    14,    15,
+       0,     0,     0,    16,    17,    18,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    22,     0,    24,     0,     0,
+       0,     0,     0,     0,     0,    27,    28,     0,    29,     0,
+       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,     0,     0,     0,
+      37,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     2,     0,    41,     3,     4,    42,     5,     0,
+       7,     8,    65,    10,     0,    11,     0,     0,     0,    14,
+      15,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      82,     0,    83,    84,    85,    86,    66,     0,    24,     0,
+       2,     0,     0,     3,     4,     0,     5,     0,     7,     8,
+      65,    10,     0,    11,     0,     0,    30,    14,    15,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,     0,     0,
+      83,     0,    85,     0,    66,     0,    24,     0,     0,    39,
+      40,     0,     0,     0,     0,    41,   102,     0,    42,     0,
+       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    39,    40,     0,
+       0,     2,     0,    41,     3,     4,    42,     5,     0,     7,
+       8,    65,    10,     0,    11,     0,     0,     0,    14,    15,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    65,     2,    23,     0,     3,     4,     0,     5,
-       0,     7,     8,    64,    10,     0,    11,     0,     0,     0,
-      14,     0,    29,     0,     0,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,     0,     0,    65,     0,    23,     0,
-       0,     0,     0,     0,     0,    38,    39,     0,     0,     0,
-       0,    40,     0,     0,    41,     0,    29,     0,     0,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    38,
-      39,     0,     0,     2,     0,    67,     3,     4,    41,     5,
-       0,     7,     8,    64,    10,     0,    11,     0,     0,     0,
-      14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    65,     2,    23,     0,
-       3,     4,     0,     5,     0,     7,     8,    64,    10,     0,
-      11,     0,     0,     0,    14,     0,    29,     0,     0,     0,
-       0,     0,     0,    30,    31,    32,    33,    34,     0,     0,
-      65,     0,    23,     0,     0,     0,     0,     0,     0,    38,
-      39,     0,     0,     0,     0,    70,     0,     0,    41,   187,
-      29,     0,     0,     0,     0,   188,     0,    30,    31,    32,
-      33,    34,     0,     0,     0,   138,   139,   140,   141,   142,
-     143,     0,   144,    38,    39,   145,   146,   147,     0,    74,
-       0,     0,    41,   189,     0,     0,     0,     0,     0,   190,
-       0,   148,   149,   150,   151,   152,   153,   154,     0,   138,
-     139,   140,   141,   142,   143,     0,   144,     0,     0,   145,
-     146,   147,     0,     0,     0,     0,   191,     0,     0,     0,
-       0,     0,   192,     0,     0,   148,   149,   150,   151,   152,
-     153,   154,   138,   139,   140,   141,   142,   143,     0,   144,
-       0,     0,   145,   146,   147,     0,     0,     0,     0,   193,
-       0,     0,     0,     0,     0,   194,     0,     0,   148,   149,
-     150,   151,   152,   153,   154,   138,   139,   140,   141,   142,
-     143,     0,   144,     0,     0,   145,   146,   147,     0,     0,
-       0,     0,   289,     0,     0,     0,     0,     0,     0,     0,
-       0,   148,   149,   150,   151,   152,   153,   154,   138,   139,
-     140,   141,   142,   143,     0,   144,     0,     0,   145,   146,
-     147,     0,     0,     0,     0,   290,     0,     0,     0,     0,
-       0,     0,     0,     0,   148,   149,   150,   151,   152,   153,
-     154,   138,   139,   140,   141,   142,   143,     0,   144,     0,
-       0,   145,   146,   147,     0,     0,     0,     0,   291,     0,
-       0,     0,     0,     0,     0,     0,     0,   148,   149,   150,
-     151,   152,   153,   154,   138,   139,   140,   141,   142,   143,
-       0,   144,     0,     0,   145,   146,   147,     0,     0,     0,
-       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
-     148,   149,   150,   151,   152,   153,   154,   138,   139,   140,
-     141,   142,   143,     0,   144,     0,     0,   145,   146,   147,
+       0,     0,     0,     0,     0,    66,     2,    24,     0,     3,
+       4,     0,     5,     0,     7,     8,    65,    10,     0,    11,
+       0,     0,     0,    14,    15,    30,     0,     0,     0,     0,
+       0,     0,    31,    32,    33,    34,    35,     0,     0,     0,
+      66,     0,    24,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     0,     0,    41,     0,     0,    42,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    39,    40,     0,     0,     2,     0,    68,
+       3,     4,    42,     5,     0,     7,     8,    65,    10,     0,
+      11,     0,     0,     0,    14,    15,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     197,     0,     0,   148,   149,   150,   151,   152,   153,   154,
-     138,   139,   140,   141,   142,   143,     0,   144,     0,     0,
-     145,   146,   147,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   148,   149,   150,   151,
-     152,   153,   154,   184,   198,     0,     0,     0,     0,     0,
-       0,   138,   139,   140,   141,   142,   143,     0,   144,     0,
-       0,   145,   146,   147,   138,   139,   140,   141,   142,   143,
-       0,   144,     0,     0,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,     0,     0,     0,     0,     0,     0,
-     148,   149,   150,   151,   152,   153,   154,     0,     0,     0,
-     202,   138,   139,   140,   141,   142,   143,     0,   144,     0,
-       0,   145,   146,   147,     0,     0,     0,     0,     0,   195,
-     196,     0,     0,     0,     0,     0,     0,   148,   149,   150,
-     151,   152,   153,   154,   138,   139,   140,   141,   142,   143,
-       0,   144,     0,     0,   145,   146,   147,   138,   139,   140,
-     141,     0,     0,     0,   144,     0,     0,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,     0,     0,     0,
-       0,     0,     0,   148,   149,   150,   151,   152,   153,   154
+       0,    66,     2,    24,     0,     3,     4,     0,     5,     0,
+       7,     8,    65,    10,     0,    11,     0,     0,     0,    14,
+      15,    30,     0,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,     0,     0,     0,    66,     0,    24,     0,
+       0,     0,     0,     0,    39,    40,     0,     0,     0,     0,
+      71,     0,     0,    42,     0,     0,    30,     0,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,   173,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    39,
+      40,     0,     0,     0,     0,    75,     0,     0,    42,   139,
+     140,   141,   142,   143,   144,     0,   145,   174,   175,   146,
+     147,   148,     0,     0,     0,     0,   188,     0,     0,     0,
+       0,     0,   189,     0,     0,   149,   150,   151,   152,   153,
+     154,   155,   139,   140,   141,   142,   143,   144,     0,   145,
+       0,     0,   146,   147,   148,     0,     0,     0,     0,   190,
+       0,     0,     0,     0,     0,   191,     0,     0,   149,   150,
+     151,   152,   153,   154,   155,   139,   140,   141,   142,   143,
+     144,     0,   145,     0,     0,   146,   147,   148,     0,     0,
+       0,     0,   192,     0,     0,     0,     0,     0,   193,     0,
+       0,   149,   150,   151,   152,   153,   154,   155,   139,   140,
+     141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
+     148,     0,     0,     0,     0,   194,     0,     0,     0,     0,
+       0,   195,     0,     0,   149,   150,   151,   152,   153,   154,
+     155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
+       0,   146,   147,   148,     0,     0,     0,     0,   290,     0,
+       0,     0,     0,     0,     0,     0,     0,   149,   150,   151,
+     152,   153,   154,   155,   139,   140,   141,   142,   143,   144,
+       0,   145,     0,     0,   146,   147,   148,     0,     0,     0,
+       0,   291,     0,     0,     0,     0,     0,     0,     0,     0,
+     149,   150,   151,   152,   153,   154,   155,   139,   140,   141,
+     142,   143,   144,     0,   145,     0,     0,   146,   147,   148,
+       0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
+       0,     0,     0,   149,   150,   151,   152,   153,   154,   155,
+     139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
+     146,   147,   148,     0,     0,     0,     0,   293,     0,     0,
+       0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
+     153,   154,   155,   139,   140,   141,   142,   143,   144,     0,
+     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   198,     0,     0,   149,
+     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
+     143,   144,     0,   145,     0,     0,   146,   147,   148,   139,
+     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,     0,
+     199,     0,     0,     0,     0,   149,   150,   151,   152,   153,
+     154,   155,     0,     0,     0,   203,   139,   140,   141,   142,
+     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
+       0,     0,     0,     0,   196,   197,     0,     0,     0,     0,
+       0,     0,   149,   150,   151,   152,   153,   154,   155,   139,
+     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
+     147,   148,   139,   140,   141,   142,     0,     0,     0,   145,
+       0,     0,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,     0,     0,     0,     0,     0,     0,   149,   150,
+     151,   152,   153,   154,   155
 };
 
 static const yytype_int16 yycheck[] =
 {
-       4,     8,     6,     7,    78,     9,     0,   165,     0,   267,
-      27,     6,     7,    17,    32,   283,    67,    21,    38,    52,
-      53,    50,    26,    27,    94,    29,    30,    31,    32,    33,
-      34,    35,    31,    62,    38,    39,    40,    41,    22,    23,
-      91,    92,    62,    13,    48,   303,    50,    51,    50,    19,
-      50,    50,    94,    23,    24,    97,    26,   325,    96,    97,
-      62,    65,    62,    67,    94,    83,    70,    97,    94,    86,
-      74,    97,    67,    77,    47,    70,    67,    23,    82,    70,
-      47,    67,    77,    95,    24,   102,    26,    94,    95,    73,
-      74,    75,    76,    96,    97,   353,    23,    88,    89,    90,
-      91,    92,    94,    89,    90,    91,    92,    96,    97,    16,
-      17,    18,    32,    33,    23,    97,    23,    97,    23,    42,
-      23,   131,   132,    30,    23,   129,   130,   285,    98,    50,
-     134,    49,    97,   127,   138,   139,   140,   141,   142,   143,
+       4,     8,     6,     7,    79,     9,     0,     0,   166,    28,
+       6,     7,    33,   268,    18,   284,    95,    95,    22,    98,
+      98,    95,    95,    27,    28,    98,    30,    31,    32,    33,
+      34,    35,    36,    13,    68,    39,    40,    41,    42,    19,
+      22,    23,    39,    23,    24,    49,    26,    51,    52,   304,
+     132,   133,    23,    51,    32,    97,    98,   326,    92,    93,
+      97,    98,    66,    84,    68,    63,    63,    71,    87,    53,
+      54,    75,    68,    51,    78,    71,    33,    34,    51,    83,
+      97,    98,    78,    68,   103,    51,    71,    68,    95,    96,
+      63,    23,    74,    75,    76,    77,    24,    63,    26,   354,
+      48,    48,    95,    23,    89,    90,    91,    92,    93,    90,
+      91,    92,    93,    96,    23,    23,    43,    23,    51,    99,
+      50,    98,    98,    98,    23,    23,   130,   131,   286,   211,
+     212,   135,   101,   215,   128,   139,   140,   141,   142,   143,
      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,    23,   156,    23,    23,   100,   160,   100,    99,   163,
-      97,    97,    97,    44,    23,   169,    97,    49,   242,   173,
-     174,    23,   176,   177,    23,    23,   180,   181,   182,    23,
-     184,    49,    97,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,    84,    50,    23,   203,   204,    85,    50,
-     210,   211,   206,    23,   214,    39,    84,    83,    97,    84,
-      23,   268,    49,    84,   127,   198,    83,    83,    51,   172,
-     277,    51,   279,    -1,    51,    -1,    60,    61,    62,    63,
-      64,    65,   207,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,   249,   250,    -1,   305,    -1,
-     307,    -1,    86,    87,    88,    89,    90,    91,    92,    -1,
-      -1,    -1,    -1,    -1,   338,    -1,   276,    -1,    -1,   343,
-      -1,    -1,    -1,   330,    -1,    -1,    -1,   334,    -1,   336,
-      -1,   288,    -1,   293,   294,   289,   290,   291,   292,   299,
-      -1,    -1,   302,   350,    -1,    -1,    -1,   301,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,   319,
-      -1,   321,    -1,    -1,   318,    -1,    -1,    -1,    -1,   329,
-      -1,   331,   326,    -1,    -1,    -1,    -1,   337,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   348,    -1,
-      -1,   351,     0,     1,    -1,    -1,    -1,   357,    -1,   359,
-      -1,    -1,    -1,    -1,    -1,    13,   366,    -1,    16,    17,
-      -1,    19,    20,    21,    22,    23,    24,    -1,    26,    -1,
-      28,    29,    30,    -1,    -1,    -1,    34,    35,    36,    37,
-      -1,    -1,    -1,    41,    -1,    43,    -1,    -1,    46,    47,
-      48,    -1,    -1,    51,    -1,    -1,    -1,    55,    56,    57,
-      -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,
-      -1,    -1,    80,    81,    82,    -1,    -1,    -1,    -1,    -1,
-      -1,    89,    90,    -1,    -1,    13,    94,    95,    16,    17,
-      98,    19,    -1,    21,    22,    23,    24,    -1,    26,    -1,
-      -1,    -1,    30,    -1,    -1,    -1,    42,    -1,    44,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      48,    -1,    -1,    -1,    60,    61,    62,    63,    64,    65,
-      -1,    67,    -1,    -1,    70,    71,    72,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,
-      86,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
-      -1,    89,    90,    -1,    -1,    -1,    -1,    95,    -1,    -1,
-      98,    13,   100,    -1,    16,    17,    -1,    19,    20,    21,
-      22,    23,    24,    -1,    26,    -1,    28,    29,    30,    -1,
-      -1,    -1,    34,    35,    36,    37,    -1,    -1,    -1,    41,
-      -1,    43,    -1,    -1,    46,    47,    48,    -1,    -1,    51,
-      -1,    -1,    -1,    55,    56,    57,    -1,    59,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    80,    81,
-      82,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    13,    -1,    95,    16,    17,    98,    19,    20,    21,
-      22,    23,    24,    -1,    26,    27,    28,    -1,    30,    -1,
-      -1,    -1,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    43,    -1,    -1,    46,    47,    48,    -1,    -1,    51,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    13,    94,    95,    16,    17,    98,    19,    20,    21,
-      22,    23,    24,    -1,    26,    -1,    28,    -1,    30,    -1,
-      -1,    -1,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    43,    -1,    -1,    46,    47,    48,    -1,    -1,    51,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    80,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    13,    94,    95,    16,    17,    98,    19,    20,    21,
-      22,    23,    24,    -1,    26,    -1,    28,    -1,    30,    -1,
-      -1,    -1,    34,    35,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    -1,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    13,    -1,    95,    16,    17,    98,    19,    20,    21,
-      22,    23,    24,    -1,    26,    -1,    28,    -1,    30,    -1,
-      -1,    -1,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    -1,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    13,    -1,    95,    16,    17,    98,    19,    -1,    21,
-      22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    -1,
-      42,    43,    44,    45,    46,    -1,    48,    -1,    -1,    13,
-      -1,    -1,    16,    17,    -1,    19,    -1,    21,    22,    23,
-      24,    -1,    26,    -1,    66,    -1,    30,    -1,    -1,    -1,
-      -1,    73,    74,    75,    76,    77,    -1,    -1,    42,    -1,
-      44,    -1,    46,    -1,    48,    -1,    -1,    89,    90,    -1,
-      -1,    -1,    -1,    95,    58,    -1,    98,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
-      74,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    -1,    -1,    13,
-      -1,    95,    16,    17,    98,    19,    -1,    21,    22,    23,
-      24,    -1,    26,    -1,    -1,    -1,    30,    -1,    -1,    -1,
+     154,   155,   101,   157,   100,    98,    98,   161,    23,    98,
+     164,    45,    16,    17,    18,    23,   170,    98,   243,    23,
+     174,   175,    50,   177,   178,    23,    30,   181,   182,   183,
+      23,   185,    23,    50,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,    98,   277,    53,   204,   205,    23,
+      85,    51,    23,   207,    61,    62,    63,    64,    65,    66,
+      86,    68,   294,   295,    71,    72,    73,    51,   300,    85,
+      23,   303,    84,    98,    85,    23,    85,    50,    84,    84,
+      87,    88,    89,    90,    91,    92,    93,   128,   320,   199,
+     322,    52,    52,    52,   173,   208,   250,   251,   330,    -1,
+     332,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   339,    -1,    -1,   349,    -1,   344,
+     352,    -1,    -1,    -1,    -1,    -1,   358,    -1,   360,    -1,
+      -1,    -1,   289,     0,     1,   367,   290,   291,   292,   293,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,   302,    16,
+      17,    -1,    19,    20,    21,    22,    23,    24,    -1,    26,
+      -1,    28,    29,    30,    31,   319,    -1,    -1,    35,    36,
+      37,    38,    -1,   327,    -1,    42,    -1,    44,    -1,    -1,
+      47,    48,    49,   269,    -1,    52,    -1,    -1,   342,    56,
+      57,    58,   278,    60,   280,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    -1,    -1,    81,    82,    83,    -1,    -1,    -1,
+     306,    -1,   308,    90,    91,    -1,    -1,    -1,    95,    96,
+      13,    -1,    99,    16,    17,    -1,    19,    -1,    21,    22,
+      23,    24,    -1,    26,    -1,   331,    -1,    30,    31,   335,
+      -1,   337,    43,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    47,   351,    49,    -1,    -1,    -1,
+      61,    62,    63,    64,    65,    66,    -1,    68,   364,    -1,
+      71,    72,    73,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    76,    77,    78,    87,    88,    89,    90,
+      91,    92,    93,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    -1,    -1,    96,    -1,    -1,    99,    13,   101,    -1,
+      16,    17,    -1,    19,    20,    21,    22,    23,    24,    -1,
+      26,    -1,    28,    29,    30,    31,    -1,    -1,    -1,    35,
+      36,    37,    38,    -1,    -1,    -1,    42,    -1,    44,    -1,
+      -1,    47,    48,    49,    -1,    -1,    52,    -1,    -1,    -1,
+      56,    57,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
+      76,    77,    78,    -1,    -1,    81,    82,    83,    -1,    -1,
+      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    13,    -1,
+      96,    16,    17,    99,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    -1,    30,    31,    -1,    -1,    -1,
+      35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    44,
+      -1,    -1,    47,    48,    49,    -1,    -1,    52,    -1,    -1,
+      -1,    -1,    57,    58,    -1,    60,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
+      75,    76,    77,    78,    -1,    -1,    81,    82,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    13,
+      95,    96,    16,    17,    99,    19,    20,    21,    22,    23,
+      24,    -1,    26,    -1,    28,    -1,    30,    31,    -1,    -1,
+      -1,    35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,
+      44,    -1,    -1,    47,    48,    49,    -1,    -1,    52,    -1,
+      -1,    -1,    -1,    57,    58,    -1,    60,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
+      74,    75,    76,    77,    78,    -1,    -1,    81,    82,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,    -1,
+      13,    95,    96,    16,    17,    99,    19,    20,    21,    22,
+      23,    24,    -1,    26,    -1,    28,    -1,    30,    31,    -1,
+      -1,    -1,    35,    36,    37,    38,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    57,    58,    -1,    60,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    76,    77,    78,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    13,    -1,    96,    16,    17,    99,    19,    20,    21,
+      22,    23,    24,    -1,    26,    -1,    28,    -1,    30,    31,
+      -1,    -1,    -1,    35,    36,    37,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    57,    58,    -1,    60,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    76,    77,    78,    -1,    -1,    -1,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    13,    -1,    96,    16,    17,    99,    19,    -1,
+      21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    -1,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      13,    -1,    -1,    16,    17,    -1,    19,    -1,    21,    22,
+      23,    24,    -1,    26,    -1,    -1,    67,    30,    31,    -1,
+      -1,    -1,    -1,    74,    75,    76,    77,    78,    -1,    -1,
+      43,    -1,    45,    -1,    47,    -1,    49,    -1,    -1,    90,
+      91,    -1,    -1,    -1,    -1,    96,    59,    -1,    99,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    76,    77,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    13,    -1,    96,    16,    17,    99,    19,    -1,    21,
+      22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,    31,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    13,    48,    -1,    16,    17,    -1,    19,
-      -1,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
-      30,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    73,
-      74,    75,    76,    77,    -1,    -1,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    98,    -1,    66,    -1,    -1,    -1,
-      -1,    -1,    -1,    73,    74,    75,    76,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    -1,    -1,    13,    -1,    95,    16,    17,    98,    19,
-      -1,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
-      30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    46,    13,    48,    -1,
-      16,    17,    -1,    19,    -1,    21,    22,    23,    24,    -1,
-      26,    -1,    -1,    -1,    30,    -1,    66,    -1,    -1,    -1,
-      -1,    -1,    -1,    73,    74,    75,    76,    77,    -1,    -1,
-      46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    -1,    -1,    -1,    -1,    95,    -1,    -1,    98,    44,
-      66,    -1,    -1,    -1,    -1,    50,    -1,    73,    74,    75,
-      76,    77,    -1,    -1,    -1,    60,    61,    62,    63,    64,
-      65,    -1,    67,    89,    90,    70,    71,    72,    -1,    95,
-      -1,    -1,    98,    44,    -1,    -1,    -1,    -1,    -1,    50,
-      -1,    86,    87,    88,    89,    90,    91,    92,    -1,    60,
-      61,    62,    63,    64,    65,    -1,    67,    -1,    -1,    70,
-      71,    72,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,
-      -1,    -1,    50,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    92,    60,    61,    62,    63,    64,    65,    -1,    67,
-      -1,    -1,    70,    71,    72,    -1,    -1,    -1,    -1,    44,
-      -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    86,    87,
-      88,    89,    90,    91,    92,    60,    61,    62,    63,    64,
-      65,    -1,    67,    -1,    -1,    70,    71,    72,    -1,    -1,
-      -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    92,    60,    61,
-      62,    63,    64,    65,    -1,    67,    -1,    -1,    70,    71,
-      72,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    91,
-      92,    60,    61,    62,    63,    64,    65,    -1,    67,    -1,
-      -1,    70,    71,    72,    -1,    -1,    -1,    -1,    44,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    60,    61,    62,    63,    64,    65,
-      -1,    67,    -1,    -1,    70,    71,    72,    -1,    -1,    -1,
-      -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    87,    88,    89,    90,    91,    92,    60,    61,    62,
-      63,    64,    65,    -1,    67,    -1,    -1,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    47,    13,    49,    -1,    16,
+      17,    -1,    19,    -1,    21,    22,    23,    24,    -1,    26,
+      -1,    -1,    -1,    30,    31,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    76,    77,    78,    -1,    -1,    -1,
+      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      -1,    -1,    -1,    -1,    96,    -1,    -1,    99,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    -1,    13,    -1,    96,
+      16,    17,    99,    19,    -1,    21,    22,    23,    24,    -1,
+      26,    -1,    -1,    -1,    30,    31,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      50,    -1,    -1,    86,    87,    88,    89,    90,    91,    92,
-      60,    61,    62,    63,    64,    65,    -1,    67,    -1,    -1,
-      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    91,    92,    52,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    60,    61,    62,    63,    64,    65,    -1,    67,    -1,
-      -1,    70,    71,    72,    60,    61,    62,    63,    64,    65,
-      -1,    67,    -1,    -1,    70,    71,    72,    86,    87,    88,
-      89,    90,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
-      96,    60,    61,    62,    63,    64,    65,    -1,    67,    -1,
-      -1,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    92,    60,    61,    62,    63,    64,    65,
-      -1,    67,    -1,    -1,    70,    71,    72,    60,    61,    62,
-      63,    -1,    -1,    -1,    67,    -1,    -1,    70,    71,    72,
-      86,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    92
+      -1,    47,    13,    49,    -1,    16,    17,    -1,    19,    -1,
+      21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,
+      31,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
+      76,    77,    78,    -1,    -1,    -1,    47,    -1,    49,    -1,
+      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      96,    -1,    -1,    99,    -1,    -1,    67,    -1,    -1,    -1,
+      -1,    -1,    -1,    74,    75,    76,    77,    78,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
+      91,    -1,    -1,    -1,    -1,    96,    -1,    -1,    99,    61,
+      62,    63,    64,    65,    66,    -1,    68,    69,    70,    71,
+      72,    73,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      -1,    -1,    51,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    93,    61,    62,    63,    64,    65,    66,    -1,    68,
+      -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,    45,
+      -1,    -1,    -1,    -1,    -1,    51,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    93,    61,    62,    63,    64,    65,
+      66,    -1,    68,    -1,    -1,    71,    72,    73,    -1,    -1,
+      -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    93,    61,    62,
+      63,    64,    65,    66,    -1,    68,    -1,    -1,    71,    72,
+      73,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
+      -1,    51,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      93,    61,    62,    63,    64,    65,    66,    -1,    68,    -1,
+      -1,    71,    72,    73,    -1,    -1,    -1,    -1,    45,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    93,    61,    62,    63,    64,    65,    66,
+      -1,    68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,
+      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    93,    61,    62,    63,
+      64,    65,    66,    -1,    68,    -1,    -1,    71,    72,    73,
+      -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    93,
+      61,    62,    63,    64,    65,    66,    -1,    68,    -1,    -1,
+      71,    72,    73,    -1,    -1,    -1,    -1,    45,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    93,    61,    62,    63,    64,    65,    66,    -1,
+      68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    51,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    93,    61,    62,    63,    64,
+      65,    66,    -1,    68,    -1,    -1,    71,    72,    73,    61,
+      62,    63,    64,    65,    66,    -1,    68,    -1,    -1,    71,
+      72,    73,    87,    88,    89,    90,    91,    92,    93,    -1,
+      95,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    93,    -1,    -1,    -1,    97,    61,    62,    63,    64,
+      65,    66,    -1,    68,    -1,    -1,    71,    72,    73,    -1,
+      -1,    -1,    -1,    -1,    79,    80,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    92,    93,    61,
+      62,    63,    64,    65,    66,    -1,    68,    -1,    -1,    71,
+      72,    73,    61,    62,    63,    64,    -1,    -1,    -1,    68,
+      -1,    -1,    71,    72,    73,    87,    88,    89,    90,    91,
+      92,    93,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    93
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1178,65 +1178,65 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     1,    13,    16,    17,    19,    20,    21,    22,    23,
-      24,    26,    28,    29,    30,    34,    35,    36,    37,    41,
-      43,    46,    47,    48,    51,    55,    56,    57,    59,    66,
-      73,    74,    75,    76,    77,    80,    81,    82,    89,    90,
-      95,    98,   102,   103,   104,   105,   107,   109,   113,   114,
-     115,   120,   121,   122,   123,   124,   125,   131,   133,   135,
-     139,   144,   147,    94,    23,    46,   122,    95,   122,   145,
-      95,   145,    23,   121,    95,   122,   146,   134,   138,    47,
-     126,    40,    42,    43,    44,    45,   122,   132,   136,    47,
-     122,    52,    53,    16,    17,    18,    23,    30,    23,    23,
-     122,    58,   122,   132,    23,   130,   122,   122,   122,   122,
-     122,   122,   122,   127,   140,   122,   122,   122,    24,    26,
-     100,   122,   148,   149,   150,   151,     0,    94,   122,    38,
-      62,   122,   106,   112,   115,   122,   125,   144,    60,    61,
-      62,    63,    64,    65,    67,    70,    71,    72,    86,    87,
-      88,    89,    90,    91,    92,   117,    95,   122,   122,   145,
-      97,   145,   145,    97,   145,   117,    23,   128,   122,    42,
-     132,    23,    39,    68,    69,    23,    50,    62,   121,   121,
-      50,    62,    50,    49,    52,   132,    97,    44,    50,    44,
-      50,    44,    50,    44,    50,    78,    79,    50,    94,    23,
-     129,    23,    96,   100,   100,    99,    97,    97,   103,   118,
-     122,   122,   118,   118,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,    23,   141,    96,   122,    96,    96,   122,   141,
-      97,   122,   137,    23,   124,   122,   122,   122,   122,    50,
-      62,    44,   122,   122,   122,   122,    23,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   108,   108,    97,
-     121,   121,   122,    24,    26,   151,   119,   118,   118,    49,
-     118,    94,    97,    94,    23,   117,   122,   122,    23,    44,
-      44,    44,    44,   105,   119,    23,    94,   107,   118,   119,
-      31,    50,   119,    49,    97,   143,    23,   143,   141,   121,
-     122,   122,   122,   122,   118,   118,    84,   118,    50,   122,
-     118,   105,    23,   119,   119,    94,    50,    85,    84,   122,
-     118,   110,   118,    27,   143,   122,   118,   119,    32,    33,
-     111,   116,   118,    32,    83,    23,   142,   119,   119,   118,
-     117,   122,    83,   117,    97,   118,    84,   119,   118,   105,
-      23,    84,   118,    49,   118,    83,   119,    83,   118
+      24,    26,    28,    29,    30,    31,    35,    36,    37,    38,
+      42,    44,    47,    48,    49,    52,    56,    57,    58,    60,
+      67,    74,    75,    76,    77,    78,    81,    82,    83,    90,
+      91,    96,    99,   103,   104,   105,   106,   108,   110,   114,
+     115,   116,   121,   122,   123,   124,   125,   126,   132,   134,
+     136,   140,   145,   148,    95,    23,    47,   123,    96,   123,
+     146,    96,   146,    23,   122,    96,   123,   147,   135,   139,
+      48,   127,    41,    43,    44,    45,    46,   123,   133,   137,
+      48,   123,    53,    54,    16,    17,    18,    23,    30,    23,
+      23,   123,    59,   123,   133,    23,   131,   123,   123,   123,
+     123,   123,   123,   123,   128,   141,   123,   123,   123,    24,
+      26,   101,   123,   149,   150,   151,   152,     0,    95,   123,
+      39,    63,   123,   107,   113,   116,   123,   126,   145,    61,
+      62,    63,    64,    65,    66,    68,    71,    72,    73,    87,
+      88,    89,    90,    91,    92,    93,   118,    96,   123,   123,
+     146,    98,   146,   146,    98,   146,   118,    23,   129,   123,
+      43,   133,    23,    40,    69,    70,    23,    51,    63,   122,
+     122,    51,    63,    51,    50,    53,   133,    98,    45,    51,
+      45,    51,    45,    51,    45,    51,    79,    80,    51,    95,
+      23,   130,    23,    97,   101,   101,   100,    98,    98,   104,
+     119,   123,   123,   119,   119,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,    23,   142,    97,   123,    97,    97,   123,
+     142,    98,   123,   138,    23,   125,   123,   123,   123,   123,
+      51,    63,    45,   123,   123,   123,   123,    23,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   109,   109,
+      98,   122,   122,   123,    24,    26,   152,   120,   119,   119,
+      50,   119,    95,    98,    95,    23,   118,   123,   123,    23,
+      45,    45,    45,    45,   106,   120,    23,    95,   108,   119,
+     120,    32,    51,   120,    50,    98,   144,    23,   144,   142,
+     122,   123,   123,   123,   123,   119,   119,    85,   119,    51,
+     123,   119,   106,    23,   120,   120,    95,    51,    86,    85,
+     123,   119,   111,   119,    27,   144,   123,   119,   120,    33,
+      34,   112,   117,   119,    33,    84,    23,   143,   120,   120,
+     119,   118,   123,    84,   118,    98,   119,    85,   120,   119,
+     106,    23,    85,   119,    50,   119,    84,   120,    84,   119
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   101,   102,   102,   102,   103,   103,   103,   104,   104,
-     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
-     105,   105,   105,   106,   106,   106,   106,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   108,   109,   109,
-     110,   110,   111,   112,   112,   113,   114,   115,   116,   117,
-     118,   119,   119,   119,   120,   121,   121,   121,   121,   121,
-     121,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
-     122,   122,   122,   123,   123,   123,   123,   123,   123,   123,
-     123,   124,   124,   125,   125,   125,   125,   125,   126,   125,
-     127,   125,   125,   125,   125,   125,   125,   128,   128,   129,
-     129,   130,   130,   131,   131,   131,   131,   131,   131,   132,
-     132,   133,   133,   133,   133,   134,   133,   136,   137,   135,
-     135,   138,   135,   135,   135,   140,   139,   141,   141,   141,
-     141,   142,   142,   142,   143,   144,   145,   145,   145,   146,
-     146,   147,   148,   148,   148,   148,   149,   149,   150,   150,
-     151,   151
+       0,   102,   103,   103,   103,   104,   104,   104,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     106,   106,   106,   107,   107,   107,   107,   108,   108,   108,
+     108,   108,   108,   108,   108,   108,   108,   109,   110,   110,
+     111,   111,   112,   113,   113,   114,   115,   116,   117,   118,
+     119,   120,   120,   120,   121,   122,   122,   122,   122,   122,
+     122,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   124,   124,   124,   124,   124,   124,
+     124,   124,   125,   125,   126,   126,   126,   126,   126,   127,
+     126,   128,   126,   126,   126,   126,   126,   126,   129,   129,
+     130,   130,   131,   131,   132,   132,   132,   132,   132,   132,
+     133,   133,   134,   134,   134,   134,   135,   134,   137,   138,
+     136,   136,   139,   136,   136,   136,   141,   140,   142,   142,
+     142,   142,   143,   143,   143,   144,   145,   146,   146,   146,
+     147,   147,   148,   149,   149,   149,   149,   150,   150,   151,
+     151,   152,   152
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1249,17 +1249,17 @@ static const yytype_int8 yyr2[] =
        0,     2,     6,    11,     7,     2,     3,     1,     1,     0,
        0,     0,     2,     2,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     4,     2,     4,     1,     2,     1,     1,
-       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     2,     3,     3,     3,     3,     2,     2,
-       3,     4,     4,     4,     6,     4,     6,     4,     6,     4,
-       6,     2,     1,     2,     1,     1,     2,     1,     0,     3,
-       0,     3,     2,     4,     2,     4,     2,     1,     3,     1,
-       3,     1,     3,     2,     2,     2,     2,     3,     2,     3,
-       2,     2,     2,     3,     2,     0,     3,     0,     0,     9,
-       2,     0,     7,     8,     6,     0,     3,     0,     1,     3,
-       4,     0,     1,     3,     0,     2,     0,     1,     3,     1,
-       3,     3,     0,     1,     1,     1,     1,     3,     1,     3,
-       3,     3
+       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
+       2,     3,     4,     4,     4,     6,     4,     6,     4,     6,
+       4,     6,     2,     1,     2,     1,     1,     2,     1,     0,
+       3,     0,     3,     2,     4,     2,     4,     2,     1,     3,
+       1,     3,     1,     3,     2,     2,     2,     2,     3,     2,
+       3,     2,     2,     2,     3,     2,     0,     3,     0,     0,
+       9,     2,     0,     7,     8,     6,     0,     3,     0,     1,
+       3,     4,     0,     1,     3,     0,     2,     0,     1,     3,
+       1,     3,     3,     0,     1,     1,     1,     1,     3,     1,
+       3,     3,     3
 };
 
 
@@ -1695,73 +1695,73 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
   switch (yytype)
     {
     case 20: /* BLTIN  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1701 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 21: /* FBLTIN  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1707 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 22: /* RBLTIN  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1713 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* ID  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1719 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* STRING  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1725 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* HANDLER  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1731 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* SYMBOL  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1737 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* ENDCLAUSE  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1743 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* tPLAYACCEL  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1749 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* tMETHOD  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1755 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* THEOBJECTFIELD  */
-#line 131 "engines/director/lingo/lingo-gr.y"
+#line 137 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
 #line 1761 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 139: /* on  */
-#line 130 "engines/director/lingo/lingo-gr.y"
+    case 140: /* on  */
+#line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 1767 "engines/director/lingo/lingo-gr.cpp"
         break;
@@ -2031,13 +2031,13 @@ yyreduce:
   switch (yyn)
     {
   case 4:
-#line 137 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
                                 { yyerrok; }
 #line 2037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 149 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2048,7 +2048,7 @@ yyreduce:
     break;
 
   case 9:
-#line 149 "engines/director/lingo/lingo-gr.y"
+#line 155 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
@@ -2056,19 +2056,19 @@ yyreduce:
     break;
 
   case 10:
-#line 152 "engines/director/lingo/lingo-gr.y"
+#line 158 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
 #line 2062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 153 "engines/director/lingo/lingo-gr.y"
+#line 159 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
 #line 2068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 154 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2079,7 +2079,7 @@ yyreduce:
     break;
 
   case 13:
-#line 160 "engines/director/lingo/lingo-gr.y"
+#line 166 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2091,7 +2091,7 @@ yyreduce:
     break;
 
   case 14:
-#line 167 "engines/director/lingo/lingo-gr.y"
+#line 173 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2102,7 +2102,7 @@ yyreduce:
     break;
 
   case 15:
-#line 173 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2114,7 +2114,7 @@ yyreduce:
     break;
 
   case 16:
-#line 180 "engines/director/lingo/lingo-gr.y"
+#line 186 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
@@ -2125,7 +2125,7 @@ yyreduce:
     break;
 
   case 17:
-#line 186 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
@@ -2136,7 +2136,7 @@ yyreduce:
     break;
 
   case 18:
-#line 193 "engines/director/lingo/lingo-gr.y"
+#line 199 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2152,7 +2152,7 @@ yyreduce:
     break;
 
   case 19:
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_objectfieldassign);
 		g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
@@ -2163,7 +2163,7 @@ yyreduce:
     break;
 
   case 29:
-#line 226 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[-3].code) - (yyvsp[-5].code));
@@ -2174,7 +2174,7 @@ yyreduce:
     break;
 
   case 30:
-#line 237 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
                                                                                            {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-7].code) - (yyvsp[-9].code));
@@ -2191,7 +2191,7 @@ yyreduce:
     break;
 
   case 31:
-#line 254 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
                                                                                                  {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2208,7 +2208,7 @@ yyreduce:
     break;
 
   case 32:
-#line 266 "engines/director/lingo/lingo-gr.y"
+#line 272 "engines/director/lingo/lingo-gr.y"
                                                                       {
 		inst list = 0, body = 0, end = 0;
 		WRITE_UINT32(&list, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2223,14 +2223,14 @@ yyreduce:
     break;
 
   case 33:
-#line 277 "engines/director/lingo/lingo-gr.y"
+#line 283 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
 #line 2230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 279 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                       {
 		inst end = 0;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
@@ -2240,7 +2240,7 @@ yyreduce:
     break;
 
   case 35:
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                                                           {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
@@ -2249,7 +2249,7 @@ yyreduce:
     break;
 
   case 36:
-#line 288 "engines/director/lingo/lingo-gr.y"
+#line 294 "engines/director/lingo/lingo-gr.y"
                                                     {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
@@ -2258,7 +2258,7 @@ yyreduce:
     break;
 
   case 37:
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 299 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
@@ -2266,7 +2266,7 @@ yyreduce:
     break;
 
   case 38:
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2281,7 +2281,7 @@ yyreduce:
     break;
 
   case 39:
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2296,7 +2296,7 @@ yyreduce:
     break;
 
   case 42:
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                                         {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[-3].code) - (yyvsp[-5].code));
@@ -2307,7 +2307,7 @@ yyreduce:
     break;
 
   case 43:
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2322,7 +2322,7 @@ yyreduce:
     break;
 
   case 44:
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2337,13 +2337,13 @@ yyreduce:
     break;
 
   case 45:
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 355 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
 #line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
-#line 351 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2353,7 +2353,7 @@ yyreduce:
     break;
 
   case 47:
-#line 357 "engines/director/lingo/lingo-gr.y"
+#line 363 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2363,7 +2363,7 @@ yyreduce:
     break;
 
   case 48:
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                         {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2374,25 +2374,25 @@ yyreduce:
     break;
 
   case 49:
-#line 370 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
 #line 2380 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
 #line 2386 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
 #line 2392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 384 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_whencode);
 		g_lingo->code1(STOP);
@@ -2402,7 +2402,7 @@ yyreduce:
     break;
 
   case 55:
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
@@ -2410,7 +2410,7 @@ yyreduce:
     break;
 
   case 56:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
@@ -2418,7 +2418,7 @@ yyreduce:
     break;
 
   case 57:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
                         {											// D3
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2427,7 +2427,7 @@ yyreduce:
     break;
 
   case 58:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 400 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2436,7 +2436,7 @@ yyreduce:
     break;
 
   case 59:
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 404 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_eval);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2445,13 +2445,13 @@ yyreduce:
     break;
 
   case 61:
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 410 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
 #line 2451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
@@ -2459,7 +2459,7 @@ yyreduce:
     break;
 
   case 64:
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
@@ -2467,7 +2467,7 @@ yyreduce:
     break;
 
   case 65:
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
@@ -2475,7 +2475,7 @@ yyreduce:
     break;
 
   case 66:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2488,7 +2488,7 @@ yyreduce:
     break;
 
   case 67:
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                {
 		(yyval.code) = g_lingo->code1(LC::c_theentitypush);
 		inst e = 0, f = 0;
@@ -2499,7 +2499,7 @@ yyreduce:
     break;
 
   case 68:
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 435 "engines/director/lingo/lingo-gr.y"
                          {
 		g_lingo->code1(LC::c_objectfieldpush);
 		g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
@@ -2508,465 +2508,476 @@ yyreduce:
 #line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70:
-#line 435 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_add); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+  case 69:
+#line 440 "engines/director/lingo/lingo-gr.y"
+                       {
+		g_lingo->code1(LC::c_objectrefpush);
+		g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
+		g_lingo->codeString((yyvsp[0].objectref).field->c_str());
+		delete (yyvsp[0].objectref).obj;
+		delete (yyvsp[0].objectref).field; }
+#line 2520 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
-#line 436 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_sub); }
-#line 2521 "engines/director/lingo/lingo-gr.cpp"
+#line 447 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_add); }
+#line 2526 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
-#line 437 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_mul); }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 448 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_sub); }
+#line 2532 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73:
-#line 438 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_div); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 449 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_mul); }
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
-#line 439 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_mod); }
-#line 2539 "engines/director/lingo/lingo-gr.cpp"
+#line 450 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_div); }
+#line 2544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
-#line 440 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_gt); }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 451 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_mod); }
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
-#line 441 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_lt); }
-#line 2551 "engines/director/lingo/lingo-gr.cpp"
+#line 452 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_gt); }
+#line 2556 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
-#line 442 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_eq); }
-#line 2557 "engines/director/lingo/lingo-gr.cpp"
+#line 453 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_lt); }
+#line 2562 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
-#line 443 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_neq); }
-#line 2563 "engines/director/lingo/lingo-gr.cpp"
+#line 454 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_eq); }
+#line 2568 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
-#line 444 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_ge); }
-#line 2569 "engines/director/lingo/lingo-gr.cpp"
+#line 455 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_neq); }
+#line 2574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
-#line 445 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_le); }
-#line 2575 "engines/director/lingo/lingo-gr.cpp"
+#line 456 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_ge); }
+#line 2580 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
-#line 446 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_and); }
-#line 2581 "engines/director/lingo/lingo-gr.cpp"
+#line 457 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_le); }
+#line 2586 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
-#line 447 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_or); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 458 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_and); }
+#line 2592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
-#line 448 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_not); }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 459 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_or); }
+#line 2598 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
-#line 449 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_ampersand); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 460 "engines/director/lingo/lingo-gr.y"
+                                        { g_lingo->code1(LC::c_not); }
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
-#line 450 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_concat); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 461 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_ampersand); }
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
-#line 451 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_contains); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 462 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_concat); }
+#line 2616 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
-#line 452 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_starts); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 463 "engines/director/lingo/lingo-gr.y"
+                                        { g_lingo->code1(LC::c_contains); }
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
-#line 453 "engines/director/lingo/lingo-gr.y"
-                                    { (yyval.code) = (yyvsp[0].code); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 464 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_starts); }
+#line 2628 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
-#line 454 "engines/director/lingo/lingo-gr.y"
-                                    { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 465 "engines/director/lingo/lingo-gr.y"
+                                    { (yyval.code) = (yyvsp[0].code); }
+#line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
-#line 455 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = (yyvsp[-1].code); }
-#line 2635 "engines/director/lingo/lingo-gr.cpp"
+#line 466 "engines/director/lingo/lingo-gr.y"
+                                    { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
+#line 2640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
-#line 456 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_intersects); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 467 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.code) = (yyvsp[-1].code); }
+#line 2646 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
-#line 457 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_within); }
-#line 2647 "engines/director/lingo/lingo-gr.cpp"
+#line 468 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_intersects); }
+#line 2652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
-#line 459 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_charOf); }
-#line 2653 "engines/director/lingo/lingo-gr.cpp"
+#line 469 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->code1(LC::c_within); }
+#line 2658 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
-#line 460 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_charToOf); }
-#line 2659 "engines/director/lingo/lingo-gr.cpp"
+#line 471 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->code1(LC::c_charOf); }
+#line 2664 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
-#line 461 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_itemOf); }
-#line 2665 "engines/director/lingo/lingo-gr.cpp"
+#line 472 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_charToOf); }
+#line 2670 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
-#line 462 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_itemToOf); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 473 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->code1(LC::c_itemOf); }
+#line 2676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
-#line 463 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_lineOf); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 474 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_itemToOf); }
+#line 2682 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
-#line 464 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_lineToOf); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 475 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->code1(LC::c_lineOf); }
+#line 2688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
-#line 465 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_wordOf); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 476 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_lineToOf); }
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
-#line 466 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_wordToOf); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 477 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->code1(LC::c_wordOf); }
+#line 2700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 478 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->code1(LC::c_wordToOf); }
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 102:
+#line 480 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103:
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 485 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106:
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 488 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107:
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2721 "engines/director/lingo/lingo-gr.cpp"
+#line 2732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 490 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                                  { g_lingo->_indef = kStateNone; }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 491 "engines/director/lingo/lingo-gr.y"
                     { g_lingo->_indef = kStateInArgs; }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                                      { g_lingo->_indef = kStateNone; }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113:
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 496 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115:
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 499 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2767 "engines/director/lingo/lingo-gr.cpp"
+#line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 500 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 2773 "engines/director/lingo/lingo-gr.cpp"
+#line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2782 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118:
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 506 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 515 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121:
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2818 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122:
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 524 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123:
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2844 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124:
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 2839 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 2845 "engines/director/lingo/lingo-gr.cpp"
+#line 2856 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 539 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 2854 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127:
-#line 531 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 543 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128:
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 547 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 2872 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131:
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 555 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_playdone); }
-#line 2878 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132:
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 556 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 2898 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133:
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 560 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134:
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 564 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 568 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 568 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 2920 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137:
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 598 "engines/director/lingo/lingo-gr.y"
              { g_lingo->_indef = kStateInArgs; }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138:
-#line 586 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->_currentFactory.clear(); }
-#line 2932 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 605 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 2949 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 606 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2955 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                                      {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -2977,11 +2988,11 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 2992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                  {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
@@ -2989,65 +3000,65 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 631 "engines/director/lingo/lingo-gr.y"
          { g_lingo->_indef = kStateInArgs; }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 631 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 633 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 3022 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 3028 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149:
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 635 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150:
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 636 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-3].narg) + 1; delete (yyvsp[0].s); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152:
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153:
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 640 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
-#line 630 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 642 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 644 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3055,113 +3066,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 652 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157:
-#line 641 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158:
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 654 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3077 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159:
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 656 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3083 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160:
-#line 645 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 657 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3089 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161:
-#line 647 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 659 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 3095 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162:
-#line 649 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 661 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3101 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163:
-#line 650 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 662 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3107 "engines/director/lingo/lingo-gr.cpp"
+#line 3118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164:
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 165:
+#line 663 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3113 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 166:
+#line 664 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166:
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 167:
+#line 666 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3125 "engines/director/lingo/lingo-gr.cpp"
+#line 3136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167:
-#line 655 "engines/director/lingo/lingo-gr.y"
+  case 168:
+#line 667 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3131 "engines/director/lingo/lingo-gr.cpp"
+#line 3142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168:
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 169:
+#line 669 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169:
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 170:
+#line 670 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3143 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170:
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 171:
+#line 672 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 172:
+#line 676 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3161 "engines/director/lingo/lingo-gr.cpp"
+#line 3172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3165 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3393,5 +3404,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 670 "engines/director/lingo/lingo-gr.y"
+#line 682 "engines/director/lingo/lingo-gr.y"
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 627c189..9c7fbc1 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -77,61 +77,62 @@ extern int yydebug;
     tPLAYACCEL = 283,
     tMETHOD = 284,
     THEOBJECTFIELD = 285,
-    tDOWN = 286,
-    tELSE = 287,
-    tELSIF = 288,
-    tEXIT = 289,
-    tGLOBAL = 290,
-    tGO = 291,
-    tIF = 292,
-    tIN = 293,
-    tINTO = 294,
-    tLOOP = 295,
-    tMACRO = 296,
-    tMOVIE = 297,
-    tNEXT = 298,
-    tOF = 299,
-    tPREVIOUS = 300,
-    tPUT = 301,
-    tREPEAT = 302,
-    tSET = 303,
-    tTHEN = 304,
-    tTO = 305,
-    tWHEN = 306,
-    tWITH = 307,
-    tWHILE = 308,
-    tNLELSE = 309,
-    tFACTORY = 310,
-    tOPEN = 311,
-    tPLAY = 312,
-    tDONE = 313,
-    tINSTANCE = 314,
-    tGE = 315,
-    tLE = 316,
-    tEQ = 317,
-    tNEQ = 318,
-    tAND = 319,
-    tOR = 320,
-    tNOT = 321,
-    tMOD = 322,
-    tAFTER = 323,
-    tBEFORE = 324,
-    tCONCAT = 325,
-    tCONTAINS = 326,
-    tSTARTS = 327,
-    tCHAR = 328,
-    tITEM = 329,
-    tLINE = 330,
-    tWORD = 331,
-    tSPRITE = 332,
-    tINTERSECTS = 333,
-    tWITHIN = 334,
-    tTELL = 335,
-    tPROPERTY = 336,
-    tON = 337,
-    tENDIF = 338,
-    tENDREPEAT = 339,
-    tENDTELL = 340
+    THEOBJECTREF = 286,
+    tDOWN = 287,
+    tELSE = 288,
+    tELSIF = 289,
+    tEXIT = 290,
+    tGLOBAL = 291,
+    tGO = 292,
+    tIF = 293,
+    tIN = 294,
+    tINTO = 295,
+    tLOOP = 296,
+    tMACRO = 297,
+    tMOVIE = 298,
+    tNEXT = 299,
+    tOF = 300,
+    tPREVIOUS = 301,
+    tPUT = 302,
+    tREPEAT = 303,
+    tSET = 304,
+    tTHEN = 305,
+    tTO = 306,
+    tWHEN = 307,
+    tWITH = 308,
+    tWHILE = 309,
+    tNLELSE = 310,
+    tFACTORY = 311,
+    tOPEN = 312,
+    tPLAY = 313,
+    tDONE = 314,
+    tINSTANCE = 315,
+    tGE = 316,
+    tLE = 317,
+    tEQ = 318,
+    tNEQ = 319,
+    tAND = 320,
+    tOR = 321,
+    tNOT = 322,
+    tMOD = 323,
+    tAFTER = 324,
+    tBEFORE = 325,
+    tCONCAT = 326,
+    tCONTAINS = 327,
+    tSTARTS = 328,
+    tCHAR = 329,
+    tITEM = 330,
+    tLINE = 331,
+    tWORD = 332,
+    tSPRITE = 333,
+    tINTERSECTS = 334,
+    tWITHIN = 335,
+    tTELL = 336,
+    tPROPERTY = 337,
+    tON = 338,
+    tENDIF = 339,
+    tENDREPEAT = 340,
+    tENDTELL = 341
   };
 #endif
 
@@ -154,7 +155,12 @@ union YYSTYPE
 		int oe;
 	} objectfield;
 
-#line 158 "engines/director/lingo/lingo-gr.h"
+	struct {
+		Common::String *obj;
+		Common::String *field;
+	} objectref;
+
+#line 164 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e0e1308..b5613a0 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -96,6 +96,11 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 		Common::String *os;
 		int oe;
 	} objectfield;
+
+	struct {
+		Common::String *obj;
+		Common::String *field;
+	} objectref;
 }
 
 %token UNARY
@@ -107,6 +112,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token<s> ID STRING HANDLER SYMBOL
 %token<s> ENDCLAUSE tPLAYACCEL tMETHOD
 %token<objectfield> THEOBJECTFIELD
+%token<objectref> THEOBJECTREF
 %token tDOWN tELSE tELSIF tEXIT tGLOBAL tGO tIF tIN tINTO tLOOP tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
 %token tWITH tWHILE tNLELSE tFACTORY tOPEN tPLAY tDONE tINSTANCE
@@ -431,6 +437,12 @@ expr: simpleexpr { $$ = $simpleexpr; }
 		g_lingo->codeString($THEOBJECTFIELD.os->c_str());
 		g_lingo->codeInt($THEOBJECTFIELD.oe);
 		delete $THEOBJECTFIELD.os; }
+	| THEOBJECTREF {
+		g_lingo->code1(LC::c_objectrefpush);
+		g_lingo->codeString($THEOBJECTREF.obj->c_str());
+		g_lingo->codeString($THEOBJECTREF.field->c_str());
+		delete $THEOBJECTREF.obj;
+		delete $THEOBJECTREF.field; }
 	| asgn
 	| expr '+' expr				{ g_lingo->code1(LC::c_add); }
 	| expr '-' expr				{ g_lingo->code1(LC::c_sub); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 3c6bc12..a215ec8 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1566,11 +1566,13 @@ YY_RULE_SETUP
 				return THEENTITY;
 		} else {
 			if (g_director->getVersion() >= 4) {
-				field = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
+				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
 
-				if (!g_lingo->_theEntityFields.contains(field)) {
-					warning("LEXER: Unhandled the field '%s' for object", field.c_str());
-					return LEXERROR;
+				if (!g_lingo->_theEntityFields.contains(key)) { // Okay, this must be an object reference
+					yylval.objectref.obj = new Common::String(ptr);
+					yylval.objectref.field = new Common::String(field);
+
+					return THEOBJECTREF;
 				}
 
 				yylval.objectfield.os = new Common::String(ptr);
@@ -1585,7 +1587,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 314 "engines/director/lingo/lingo-lex.l"
+#line 316 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1623,7 +1625,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 348 "engines/director/lingo/lingo-lex.l"
+#line 350 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1646,72 +1648,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 367 "engines/director/lingo/lingo-lex.l"
+#line 369 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 368 "engines/director/lingo/lingo-lex.l"
+#line 370 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
+#line 371 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
+#line 372 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
+#line 373 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 372 "engines/director/lingo/lingo-lex.l"
+#line 374 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
+#line 375 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 374 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 379 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 380 "engines/director/lingo/lingo-lex.l"
+#line 382 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 382 "engines/director/lingo/lingo-lex.l"
+#line 384 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1749,41 +1751,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 416 "engines/director/lingo/lingo-lex.l"
+#line 418 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 417 "engines/director/lingo/lingo-lex.l"
+#line 419 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 418 "engines/director/lingo/lingo-lex.l"
+#line 420 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 75:
 /* rule 75 can match eol */
 YY_RULE_SETUP
-#line 419 "engines/director/lingo/lingo-lex.l"
+#line 421 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 420 "engines/director/lingo/lingo-lex.l"
+#line 422 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 421 "engines/director/lingo/lingo-lex.l"
+#line 423 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 423 "engines/director/lingo/lingo-lex.l"
+#line 425 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1787 "engines/director/lingo/lingo-lex.cpp"
+#line 1789 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2743,7 +2745,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 423 "engines/director/lingo/lingo-lex.l"
+#line 425 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 6b853aa..2055b07 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -295,11 +295,13 @@ the[ \t]+[[:alpha:]]+[ \t]+of[ \t]+{identifier}	{
 				return THEENTITY;
 		} else {
 			if (g_director->getVersion() >= 4) {
-				field = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
+				Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
 
-				if (!g_lingo->_theEntityFields.contains(field)) {
-					warning("LEXER: Unhandled the field '%s' for object", field.c_str());
-					return LEXERROR;
+				if (!g_lingo->_theEntityFields.contains(key)) { // Okay, this must be an object reference
+					yylval.objectref.obj = new Common::String(ptr);
+					yylval.objectref.field = new Common::String(field);
+
+					return THEOBJECTREF;
 				}
 
 				yylval.objectfield.os = new Common::String(ptr);
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 098803a..fb55374 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -898,4 +898,13 @@ void Lingo::setObjectField(Common::String &obj, int field, Datum &d) {
 	warning("STUB: setObjectField(\"%s\", %d, ...)", obj.c_str(), field);
 }
 
+Datum Lingo::getObjectRef(Common::String &obj, Common::String &field) {
+	warning("STUB: getObjectRef(\"%s\", \"%s\")", obj.c_str(), field.c_str());
+
+	Datum d;
+	d.type = VOID;
+
+	return d;
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 39d6d8a..1445e01 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -269,6 +269,7 @@ public:
 	Datum getTheCast(Datum &id, int field);
 	Datum getObjectField(Common::String &obj, int field);
 	void setObjectField(Common::String &obj, int field, Datum &d);
+	Datum getObjectRef(Common::String &obj, Common::String &field);
 	const char *entity2str(int id);
 	const char *field2str(int id);
 




More information about the Scummvm-git-logs mailing list