Lexer: transfer error to parser 54/17154/3
Calixte DENIZET [Wed, 2 Sep 2015 14:35:22 +0000 (16:35 +0200)]
put in file :
function t1
  t="test'
endfunction

then exec file, the 2nd error about "unexpected end of line" must not appear.

Change-Id: I2d5a3b3af65ddc2d8b7be23612b066baf2e06a7f

scilab/modules/ast/includes/parse/parsescilab.hxx
scilab/modules/ast/src/cpp/parse/bison/parsescilab.output
scilab/modules/ast/src/cpp/parse/bison/parsescilab.yy
scilab/modules/ast/src/cpp/parse/flex/scanscilab.ll
scilab/modules/ast/src/cpp/parse/parsescilab.cpp
scilab/modules/ast/src/cpp/parse/scanscilab.cpp

index 186e727..ed5df3d 100644 (file)
@@ -43,8 +43,8 @@ extern int yydebug;
 /* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-  enum yytokentype
-  {
+enum yytokentype
+{
     YYEOF = 0,
     DOTS = 258,
     EOL = 259,
@@ -113,22 +113,23 @@ extern int yydebug;
     TRY = 322,
     CATCH = 323,
     RETURN = 324,
-    STR = 325,
-    ID = 326,
-    VARINT = 327,
-    VARFLOAT = 328,
-    NUM = 329,
-    PATH = 330,
-    COMMENT = 331,
-    BLOCKCOMMENT = 332,
-    TOPLEVEL = 333,
-    HIGHLEVEL = 334,
-    UPLEVEL = 335,
-    LISTABLE = 336,
-    CONTROLBREAK = 337,
-    UMINUS = 338,
-    FUNCTIONCALL = 339
-  };
+    FLEX_ERROR = 325,
+    STR = 326,
+    ID = 327,
+    VARINT = 328,
+    VARFLOAT = 329,
+    NUM = 330,
+    PATH = 331,
+    COMMENT = 332,
+    BLOCKCOMMENT = 333,
+    TOPLEVEL = 334,
+    HIGHLEVEL = 335,
+    UPLEVEL = 336,
+    LISTABLE = 337,
+    CONTROLBREAK = 338,
+    UMINUS = 339,
+    FUNCTIONCALL = 340
+};
 #endif
 /* Tokens.  */
 #define YYEOF 0
@@ -199,21 +200,22 @@ extern int yydebug;
 #define TRY 322
 #define CATCH 323
 #define RETURN 324
-#define STR 325
-#define ID 326
-#define VARINT 327
-#define VARFLOAT 328
-#define NUM 329
-#define PATH 330
-#define COMMENT 331
-#define BLOCKCOMMENT 332
-#define TOPLEVEL 333
-#define HIGHLEVEL 334
-#define UPLEVEL 335
-#define LISTABLE 336
-#define CONTROLBREAK 337
-#define UMINUS 338
-#define FUNCTIONCALL 339
+#define FLEX_ERROR 325
+#define STR 326
+#define ID 327
+#define VARINT 328
+#define VARFLOAT 329
+#define NUM 330
+#define PATH 331
+#define COMMENT 332
+#define BLOCKCOMMENT 333
+#define TOPLEVEL 334
+#define HIGHLEVEL 335
+#define UPLEVEL 336
+#define LISTABLE 337
+#define CONTROLBREAK 338
+#define UMINUS 339
+#define FUNCTIONCALL 340
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -222,7 +224,7 @@ union YYSTYPE
 {
 
 
-  /* Tokens. */
+    /* Tokens. */
     double                      number;
     std::wstring*               str;
     std::wstring*               path;
@@ -286,10 +288,10 @@ union YYSTYPE
 typedef struct YYLTYPE YYLTYPE;
 struct YYLTYPE
 {
-  int first_line;
-  int first_column;
-  int last_line;
-  int last_column;
+    int first_line;
+    int first_column;
+    int last_line;
+    int last_column;
 };
 # define YYLTYPE_IS_DECLARED 1
 # define YYLTYPE_IS_TRIVIAL 1
index df6c7bb..db3aafd 100644 (file)
@@ -2,6 +2,7 @@ Terminaux inutilisés dans la grammaire
 
    "line break"
    "spaces"
+   FLEX_ERROR
    "block comment"
    FUNCTIONCALL
 
@@ -567,92 +568,93 @@ error (256) 34
 "try" (322) 376 377 408
 "catch" (323) 376 409
 "return" (324) 384 385 386 410
-"string" (325) 41 206
-"identifier" (326) 36 37 45 49 50 51 52 67 68 69 70 71 72 73 74 75
+FLEX_ERROR (325)
+"string" (326) 41 206
+"identifier" (327) 36 37 45 49 50 51 52 67 68 69 70 71 72 73 74 75
     76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 95 96 191 202 263
     269 341 342
-"integer" (327) 38 203
-"float" (328) 40 205
-"number" (329) 39 204
-"path" (330) 46
-"line comment" (331) 7 9 11 12 33 249 252 303 304 366 387 388 390
-"block comment" (332)
-TOPLEVEL (333)
-HIGHLEVEL (334)
-UPLEVEL (335)
-LISTABLE (336)
-CONTROLBREAK (337)
-UMINUS (338)
-FUNCTIONCALL (339)
+"integer" (328) 38 203
+"float" (329) 40 205
+"number" (330) 39 204
+"path" (331) 46
+"line comment" (332) 7 9 11 12 33 249 252 303 304 366 387 388 390
+"block comment" (333)
+TOPLEVEL (334)
+HIGHLEVEL (335)
+UPLEVEL (336)
+LISTABLE (337)
+CONTROLBREAK (338)
+UMINUS (339)
+FUNCTIONCALL (340)
 
 
 Non-terminaux, suivis des règles où ils apparaissent
 
-$accept (85)
+$accept (86)
     à gauche: 0
-program (86)
+program (87)
     à gauche: 1 2 3 4, à droite: 0
-expressions (87)
+expressions (88)
     à gauche: 5 6 7 8 9, à droite: 1 2 102 277 279 327 353 356 378
     379 380 381
-recursiveExpression (88)
+recursiveExpression (89)
     à gauche: 10 11 12 13, à droite: 5 6 7 10 11
-expressionLineBreak (89)
+expressionLineBreak (90)
     à gauche: 14 15 16 17 18 19, à droite: 3 10 11 12 13 17 18 19
-expression (90)
+expression (91)
     à gauche: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34, à droite:
     6 7 8 9 10 11 12 13
-implicitFunctionCall (91)
+implicitFunctionCall (92)
     à gauche: 35 36, à droite: 29 35
-implicitCallable (92)
+implicitCallable (93)
     à gauche: 37 38 39 40 41 42 43 44 45 46, à droite: 35 36 45
-functionCall (93)
+functionCall (94)
     à gauche: 47 48, à droite: 21 48 54 59 64 104 107 109 112 115
     118 121 124 127 130 133 136 139 141 143 145 146 147 149 150 151
     154 155 157 159 161 163 165 167 169 171 173 175 177 179 181 183
     185 187 190 193 194 195 196 198 214 216 218 219 220 246 248 251
     256 257 258 260 262 265 266 267 268 272 315 322 324 326 343 386
-simpleFunctionCall (94)
+simpleFunctionCall (95)
     à gauche: 49 50 51 52, à droite: 47
-functionArgs (95)
+functionArgs (96)
     à gauche: 53 54 55 56 57 58 59 60 61 62 63 64 65 66, à droite:
     49 50 62 63 64 65 66 213 214 271 272
-functionDeclaration (96)
+functionDeclaration (97)
     à gauche: 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
     85 86 87 88 89 90, à droite: 20
-functionDeclarationReturns (97)
+functionDeclarationReturns (98)
     à gauche: 91, à droite: 68 72 76 80 84 88
-functionDeclarationArguments (98)
+functionDeclarationArguments (99)
     à gauche: 92 93 94, à droite: 67 68 69 70 71 72 73 74 75 76 77
     78 79 80 81 82 83 84 85 86 87 88 89 90
-idList (99)
+idList (100)
     à gauche: 95 96, à droite: 91 92 95
-functionDeclarationBreak (100)
+functionDeclarationBreak (101)
     à gauche: 97 98 99 100 101, à droite: 67 68 69 70 71 72 73 74
     75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
-functionBody (101)
+functionBody (102)
     à gauche: 102 103, à droite: 67 68 69 70 71 72 73 74 75 76 77
     78 79 80 81 82 83 84 85 86 87 88 89 90
-condition (102)
+condition (103)
     à gauche: 104 105, à droite: 274 275 276 298 299 300 355
-comparison (103)
+comparison (104)
     à gauche: 106 107, à droite: 212
-rightComparable (104)
+rightComparable (105)
     à gauche: 108 109 110 111 112 113 114 115 116 117 118 119 120
     121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
     137, à droite: 106 107
-operation (105)
+operation (106)
     à gauche: 138 139 140 141 142 143 144 145 146 147 148 149 150
     151 152 153 154 155, à droite: 201
-rightOperand (106)
+rightOperand (107)
     à gauche: 156 157 158 159 160 161 162 163 164 165 166 167 168
     169 170 171 172 173 174 175 176 177 178 179 180 181 182 183, à droite:
     138 139
-listableBegin (107)
+listableBegin (108)
     à gauche: 184 185, à droite: 186 187 188
-listableEnd (108)
+listableEnd (109)
     à gauche: 186 187 188, à droite: 197 198
-variable (109)
+variable (110)
     à gauche: 189 190 191 192 193 194 195 196 197 198 199 200 201
     202 203 204 205 206 207 208 209 210 211 212 213 214, à droite:
     28 53 58 63 105 106 108 111 114 117 120 123 126 129 132 135 138
@@ -660,91 +662,91 @@ variable (109)
     168 170 172 174 176 178 180 182 184 186 189 191 192 193 194 197
     210 213 215 217 219 220 245 247 250 255 257 263 264 265 266 271
     314 321 323 325 344 385
-variableFields (110)
+variableFields (111)
     à gauche: 215 216 217 218 219 220, à droite: 211 215 216
-cell (111)
+cell (112)
     à gauche: 221 222 223 224 225 226 227 228, à droite: 200
-matrix (112)
+matrix (113)
     à gauche: 229 230 231 232 233 234 235 236, à droite: 199
-matrixOrCellLines (113)
+matrixOrCellLines (114)
     à gauche: 237 238, à droite: 221 222 223 224 229 230 231 232
     237
-matrixOrCellLineBreak (114)
+matrixOrCellLineBreak (115)
     à gauche: 239 240 241 242, à droite: 241 242 243 244
-matrixOrCellLine (115)
+matrixOrCellLine (116)
     à gauche: 243 244, à droite: 237 238
-matrixOrCellColumns (116)
+matrixOrCellColumns (117)
     à gauche: 245 246 247 248 249 250 251 252, à droite: 223 224
     225 226 231 232 233 234 243 244 245 246 247 248 249 273
-matrixOrCellColumnsBreak (117)
+matrixOrCellColumnsBreak (118)
     à gauche: 253 254, à droite: 244 245 246 253
-variableDeclaration (118)
+variableDeclaration (119)
     à gauche: 255 256 257 258 259 260 261 262, à droite: 22 56 61
     66
-assignable (119)
+assignable (120)
     à gauche: 263 264 265 266 267 268 269 270 271 272, à droite:
     255 256 259 261
-multipleResults (120)
+multipleResults (121)
     à gauche: 273, à droite: 270
-ifControl (121)
+ifControl (122)
     à gauche: 274 275 276, à droite: 23
-thenBody (122)
+thenBody (123)
     à gauche: 277 278, à droite: 274 275 276 298 299 300
-elseBody (123)
+elseBody (124)
     à gauche: 279 280, à droite: 275 299 302 304
-ifConditionBreak (124)
+ifConditionBreak (125)
     à gauche: 281 282 283 284 285, à droite: 287 288 289 290
-then (125)
+then (126)
     à gauche: 286 287 288 289 290 291, à droite: 274 275 276 298
     299 300
-else (126)
+else (127)
     à gauche: 292 293 294 295 296 297, à droite: 275 299 307
-elseIfControl (127)
+elseIfControl (128)
     à gauche: 298 299 300, à droite: 276 300
-selectControl (128)
+selectControl (129)
     à gauche: 301 302 303 304, à droite: 24
-select (129)
+select (130)
     à gauche: 305 306, à droite: 301 302 303 304
-defaultCase (130)
+defaultCase (131)
     à gauche: 307 308 309 310 311 312 313, à droite: 302 304
-selectable (131)
+selectable (132)
     à gauche: 314 315, à droite: 301 302 303 304
-selectConditionBreak (132)
+selectConditionBreak (133)
     à gauche: 316 317 318 319 320, à droite: 301 302 303 304
-casesControl (133)
+casesControl (134)
     à gauche: 321 322 323 324 325 326, à droite: 301 302 303 304
     325 326
-caseBody (134)
+caseBody (135)
     à gauche: 327 328, à droite: 321 322 323 324 325 326
-caseControlBreak (135)
+caseControlBreak (136)
     à gauche: 329 330 331 332 333 334 335 336 337 338 339 340, à droite:
     321 322 323 324 325 326
-forControl (136)
+forControl (137)
     à gauche: 341 342, à droite: 25
-forIterator (137)
+forIterator (138)
     à gauche: 343 344, à droite: 341 342
-forConditionBreak (138)
+forConditionBreak (139)
     à gauche: 345 346 347 348 349 350 351 352, à droite: 341 342
-forBody (139)
+forBody (140)
     à gauche: 353 354, à droite: 341 342
-whileControl (140)
+whileControl (141)
     à gauche: 355, à droite: 26
-whileBody (141)
+whileBody (142)
     à gauche: 356 357, à droite: 355
-whileConditionBreak (142)
+whileConditionBreak (143)
     à gauche: 358 359 360 361 362 363 364 365 366 367 368 369 370
     371 372 373 374 375, à droite: 355
-tryControl (143)
+tryControl (144)
     à gauche: 376 377, à droite: 27
-catchBody (144)
+catchBody (145)
     à gauche: 378 379 380 381 382 383, à droite: 376 377
-returnControl (145)
+returnControl (146)
     à gauche: 384 385 386, à droite: 32 261 262
-comments (146)
+comments (147)
     à gauche: 387 388, à droite: 323 324 388
-lineEnd (147)
+lineEnd (148)
     à gauche: 389 390, à droite: 97
-keywords (148)
+keywords (149)
     à gauche: 391 392 393 394 395 396 397 398 399 400 401 402 403
     404 405 406 407 408 409 410, à droite: 192 195 264 267
 
index 899c2cf..da52167 100644 (file)
 %token CATCH           "catch"
 %token RETURN          "return"
 
+%token FLEX_ERROR
+
 %token <str>           STR     "string"
 %token <str>           ID      "identifier"
 %token <number>                VARINT  "integer"
@@ -1862,8 +1864,19 @@ IF              { $$ = new ast::SimpleVar(@$, symbol::Symbol(L"if")); }
 ;
 
 %%
+
+bool endsWith(const std::string & str, const std::string & end)
+{
+    if (end.size() > str.size())
+    {
+       return false;
+    }
+    
+    return std::equal(end.rbegin(), end.rend(), str.rbegin());
+}
+
 void yyerror(std::string msg) {
-    if(!ParserSingleInstance::isStrictMode()
+    if (!endsWith(msg, "FLEX_ERROR") && !ParserSingleInstance::isStrictMode()
        || ParserSingleInstance::getExitStatus() == Parser::Succeded)
     {
         wchar_t* pstMsg = to_wide_string(msg.c_str());
index c5ae617..b412723 100644 (file)
@@ -25,12 +25,13 @@ extern "C"
 static int comment_level = 0;
 static int paren_level = 0;
 static int last_token = 0;
-static int exit_status = PARSE_ERROR;
 static std::string current_file;
 static std::string program_name;
 
 static std::string pstBuffer;
 
+extern void yyerror(std::string);
+
 #define YY_USER_ACTION                          \
  yylloc.first_column = yylloc.last_column;yylloc.last_column += yyleng;
 //yylloc.last_column += yyleng;
@@ -367,11 +368,12 @@ assign                    "="
         wchar_t *pwText = to_wide_string(yytext);
         if (yytext != NULL && pwText == NULL)
         {
-            std::string str = "can not convert'";
-            str += yytext;
-            str += "' to UTF-8";
-            exit_status = SCAN_ERROR;
-            scan_error("can not convert string to UTF-8");
+           std::string str = "Can\'t convert \'";
+           str += yytext;
+           str += "\' to UTF-8";
+           BEGIN(INITIAL);
+           yyerror(str);
+           return scan_throw(FLEX_ERROR);
         }
         yylval.str = new std::wstring(pwText);
        FREE(pwText);
@@ -611,11 +613,12 @@ assign                    "="
     wchar_t *pwText = to_wide_string(yytext);
     if (yytext != NULL && pwText == NULL)
     {
-        std::string str = "can not convert'";
-        str += yytext;
-        str += "' to UTF-8";
-        exit_status = SCAN_ERROR;
-        scan_error("can not convert string to UTF-8");
+       std::string str = "Can\'t convert \'";
+       str += yytext;
+       str += "\' to UTF-8";
+       BEGIN(INITIAL);
+       yyerror(str);
+       return scan_throw(FLEX_ERROR);
     }
     yylval.str = new std::wstring(pwText);
     FREE(pwText);
@@ -711,11 +714,12 @@ assign                    "="
   scan_throw(EOL);
 }
 .                                      {
-    std::string str = "unexpected token '";
+    std::string str = "Unexpected token \'";
     str += yytext;
-    str += "'";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    str += "\'";
+    BEGIN(INITIAL);
+    yyerror(str);
+    return scan_throw(FLEX_ERROR);
 }
 
 
@@ -811,11 +815,12 @@ assign                    "="
   }
 
   .                                    {
-    std::string str = "unexpected token '";
+    std::string str = "Unexpected token \'";
     str += yytext;
-    str += "' within a matrix.";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    str += "\' within a matrix.";
+    BEGIN(INITIAL);
+    yyerror(str);
+    return scan_throw(FLEX_ERROR);
   }
 
   {next}{spaces}*{newline}          {
@@ -867,11 +872,12 @@ assign                    "="
       yy_pop_state();
   }
   .                                    {
-    std::string str = "unexpected token '";
+    std::string str = "Unexpected token \'";
     str += yytext;
-    str += "' after line break with .. or ...";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    str += "\' after line break with .. or ...";
+    BEGIN(INITIAL);
+    yyerror(str);
+    return scan_throw(FLEX_ERROR);
   }
 }
 
@@ -901,11 +907,13 @@ assign                    "="
         //std::wcerr << L"pwstBuffer = W{" << pwstBuffer << L"}" << std::endl;
         if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
         {
-            std::string str = "can not convert'";
-            str += pstBuffer.c_str();
-            str += "' to UTF-8";
-            exit_status = SCAN_ERROR;
-            scan_error("can not convert string to UTF-8");
+           pstBuffer.clear();
+           std::string str = "Can\'t convert \'";
+           str += pstBuffer.c_str();
+           str += "\' to UTF-8";
+           BEGIN(INITIAL);
+           yyerror(str);
+           return scan_throw(FLEX_ERROR);
         }
         yylval.comment = new std::wstring(pwstBuffer);
        pstBuffer.clear();
@@ -923,11 +931,13 @@ assign                    "="
     wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
     if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
     {
-        std::string str = "can not convert'";
-        str += pstBuffer.c_str();
-        str += "' to UTF-8";
-        exit_status = SCAN_ERROR;
-        scan_error("can not convert string to UTF-8");
+       pstBuffer.clear();
+       std::string str = "Can\'t convert \'";
+       str += pstBuffer.c_str();
+       str += "\' to UTF-8";
+       BEGIN(INITIAL);
+       yyerror(str);
+       return scan_throw(FLEX_ERROR);
     }
     yylval.comment = new std::wstring(pwstBuffer);
     pstBuffer.clear();
@@ -976,7 +986,6 @@ assign                      "="
  <<EOF>>                                       {
       yy_pop_state();
 //    std::string str = "unexpected end of file in a comment";
-//    exit_status = SCAN_ERROR;
 //    scan_error(str);
   }
 }
@@ -1006,11 +1015,13 @@ assign                  "="
     wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
     if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
     {
-        std::string str = "can not convert'";
+       pstBuffer.clear();
+       std::string str = "Can\'t convert \'";
         str += pstBuffer.c_str();
-        str += "' to UTF-8";
-        exit_status = SCAN_ERROR;
-        scan_error("can not convert string to UTF-8");
+        str += "\' to UTF-8";
+       BEGIN(INITIAL);
+       yyerror(str);
+       return scan_throw(FLEX_ERROR);
     }
     yylval.str = new std::wstring(pwstBuffer);
     pstBuffer.clear();
@@ -1020,9 +1031,9 @@ assign                    "="
 
   {dquote}                  {
     pstBuffer.clear();
-    std::string str = "Heterogeneous string detected, starting with ' and ending with \".";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    BEGIN(INITIAL);
+    yyerror("Heterogeneous string detected, starting with \' and ending with \".");
+    return scan_throw(FLEX_ERROR);
   }
 
   {next}{newline}           {
@@ -1031,18 +1042,18 @@ assign                  "="
 
   {newline}                                    {
     pstBuffer.clear();
-    std::string str = "unexpected end of line in a string.";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
     yylloc.last_line += 1;
     yylloc.last_column = 1;
+    BEGIN(INITIAL);
+    yyerror("Unexpected end of line in a string.");
+    return scan_throw(FLEX_ERROR);
   }
 
   <<EOF>>                                      {
     pstBuffer.clear();
-    std::string str = "unexpected end of file in a string.";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    BEGIN(INITIAL);
+    yyerror("Unexpected end of file in a string.");
+    return scan_throw(FLEX_ERROR);    
   }
 
   {in_string}                                          |
@@ -1077,11 +1088,13 @@ assign                  "="
     wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
     if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
     {
-        std::string str = "can not convert'";
+       pstBuffer.clear();
+        std::string str = "Can\'t convert \'";
         str += pstBuffer.c_str();
-        str += "' to UTF-8";
-        exit_status = SCAN_ERROR;
-        scan_error("can not convert string to UTF-8");
+        str += "\' to UTF-8";
+       BEGIN(INITIAL);
+       yyerror(str);
+       return scan_throw(FLEX_ERROR);
     }
     yylval.str = new std::wstring(pwstBuffer);
     pstBuffer.clear();
@@ -1091,9 +1104,9 @@ assign                    "="
 
   {quote}                  {
     pstBuffer.clear();
-    std::string str = "Heterogeneous string detected, starting with \" and ending with '.";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    BEGIN(INITIAL);
+    yyerror("Heterogeneous string detected, starting with \" and ending with \'.");
+    return scan_throw(FLEX_ERROR);
   }
 
   {next}{newline}           {
@@ -1102,18 +1115,18 @@ assign                  "="
 
   {newline} {
     pstBuffer.clear();
-    std::string str = "unexpected end of line in a string";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
     yylloc.last_line += 1;
     yylloc.last_column = 1;
+    BEGIN(INITIAL);
+    yyerror("Unexpected end of line in a string.");
+    return scan_throw(FLEX_ERROR);
   }
 
   <<EOF>>   {
     pstBuffer.clear();
-    std::string str = "unexpected end of file in a string";
-    exit_status = SCAN_ERROR;
-    scan_error(str);
+    BEGIN(INITIAL);
+    yyerror("Unexpected end of file in a string.");
+    return scan_throw(FLEX_ERROR);    
   }
 
   {in_string}         |
@@ -1262,19 +1275,6 @@ void scan_step() {
   yylloc.first_column = yylloc.last_column;
 }
 
-void scan_error(std::string msg)
-{
-    wchar_t* pstMsg = to_wide_string(msg.c_str());
-
-    //std::wcerr << pstMsg << std::endl;
-    ParserSingleInstance::PrintError(pstMsg);
-    ParserSingleInstance::setExitStatus(Parser::Failed);
-    ParserSingleInstance::resetControlStatus();
-    FREE(pstMsg);
-    last_token = YYEOF;
-    BEGIN(INITIAL);
-}
-
 /*
 ** convert floating numbers to C standard
 ** 1.2d-3 -> 1.2e-3
index 1dbf58c..7fedbc5 100644 (file)
@@ -225,21 +225,22 @@ enum yytokentype
     TRY = 322,
     CATCH = 323,
     RETURN = 324,
-    STR = 325,
-    ID = 326,
-    VARINT = 327,
-    VARFLOAT = 328,
-    NUM = 329,
-    PATH = 330,
-    COMMENT = 331,
-    BLOCKCOMMENT = 332,
-    TOPLEVEL = 333,
-    HIGHLEVEL = 334,
-    UPLEVEL = 335,
-    LISTABLE = 336,
-    CONTROLBREAK = 337,
-    UMINUS = 338,
-    FUNCTIONCALL = 339
+    FLEX_ERROR = 325,
+    STR = 326,
+    ID = 327,
+    VARINT = 328,
+    VARFLOAT = 329,
+    NUM = 330,
+    PATH = 331,
+    COMMENT = 332,
+    BLOCKCOMMENT = 333,
+    TOPLEVEL = 334,
+    HIGHLEVEL = 335,
+    UPLEVEL = 336,
+    LISTABLE = 337,
+    CONTROLBREAK = 338,
+    UMINUS = 339,
+    FUNCTIONCALL = 340
 };
 #endif
 /* Tokens.  */
@@ -311,21 +312,22 @@ enum yytokentype
 #define TRY 322
 #define CATCH 323
 #define RETURN 324
-#define STR 325
-#define ID 326
-#define VARINT 327
-#define VARFLOAT 328
-#define NUM 329
-#define PATH 330
-#define COMMENT 331
-#define BLOCKCOMMENT 332
-#define TOPLEVEL 333
-#define HIGHLEVEL 334
-#define UPLEVEL 335
-#define LISTABLE 336
-#define CONTROLBREAK 337
-#define UMINUS 338
-#define FUNCTIONCALL 339
+#define FLEX_ERROR 325
+#define STR 326
+#define ID 327
+#define VARINT 328
+#define VARFLOAT 329
+#define NUM 330
+#define PATH 331
+#define COMMENT 332
+#define BLOCKCOMMENT 333
+#define TOPLEVEL 334
+#define HIGHLEVEL 335
+#define UPLEVEL 336
+#define LISTABLE 337
+#define CONTROLBREAK 338
+#define UMINUS 339
+#define FUNCTIONCALL 340
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -660,10 +662,10 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  110
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3655
+#define YYLAST   3719
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  85
+#define YYNTOKENS  86
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  64
 /* YYNRULES -- Number of rules.  */
@@ -674,7 +676,7 @@ union yyalloc
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   339
+#define YYMAXUTOK   340
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -716,55 +718,56 @@ static const yytype_uint8 yytranslate[] =
     45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
     55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
     65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85
 };
 
 #if YYDEBUG
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-    0,   339,   339,   340,   341,   349,   363,   366,   371,   377,
-    383,   397,   407,   415,   424,   442,   443,   444,   445,   446,
-    447,   455,   456,   457,   458,   459,   460,   461,   462,   463,
-    464,   465,   466,   467,   468,   469,   482,   487,   502,   503,
-    508,   513,   518,   519,   520,   521,   522,   528,   536,   538,
-    549,   550,   551,   552,   575,   579,   583,   587,   591,   596,
-    601,   606,   611,   616,   620,   624,   628,   632,   651,   662,
-    670,   679,   688,   699,   707,   716,   725,   736,   744,   753,
-    762,   773,   781,   790,   799,   810,   818,   827,   836,   847,
-    855,   864,   880,   888,   889,   890,   898,   903,   915,   916,
-    917,   918,   919,   927,   932,   946,   947,   955,   960,   973,
-    974,   975,   977,   978,   979,   981,   982,   983,   985,   986,
-    987,   989,   990,   991,   993,   994,   995,   997,   998,   999,
-    1001,  1002,  1003,  1005,  1006,  1007,  1009,  1010,  1011,  1019,
-    1025,  1031,  1032,  1033,  1034,  1035,  1036,  1037,  1038,  1039,
-    1040,  1041,  1042,  1043,  1044,  1045,  1046,  1055,  1056,  1058,
-    1059,  1061,  1062,  1063,  1064,  1065,  1066,  1067,  1068,  1070,
-    1071,  1072,  1073,  1074,  1075,  1076,  1077,  1079,  1080,  1081,
-    1082,  1083,  1084,  1085,  1086,  1094,  1095,  1103,  1104,  1105,
-    1113,  1114,  1115,  1116,  1117,  1122,  1123,  1124,  1129,  1133,
-    1137,  1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
-    1147,  1148,  1149,  1150,  1151,  1152,  1160,  1164,  1168,  1173,
-    1178,  1183,  1194,  1195,  1196,  1200,  1204,  1209,  1214,  1215,
-    1224,  1225,  1226,  1230,  1234,  1239,  1244,  1245,  1253,  1257,
-    1270,  1271,  1272,  1273,  1281,  1282,  1290,  1294,  1298,  1302,
-    1306,  1310,  1314,  1318,  1329,  1330,  1338,  1339,  1340,  1341,
-    1343,  1344,  1346,  1347,  1356,  1357,  1358,  1363,  1364,  1365,
-    1370,  1371,  1372,  1373,  1380,  1389,  1390,  1400,  1408,  1413,
-    1427,  1432,  1448,  1449,  1450,  1451,  1452,  1460,  1461,  1462,
-    1463,  1464,  1465,  1473,  1474,  1475,  1476,  1477,  1478,  1486,
-    1491,  1504,  1519,  1520,  1530,  1531,  1549,  1550,  1558,  1559,
-    1560,  1561,  1562,  1563,  1564,  1572,  1573,  1581,  1582,  1583,
-    1584,  1585,  1593,  1597,  1601,  1605,  1609,  1613,  1620,  1625,
-    1639,  1640,  1641,  1642,  1643,  1644,  1645,  1646,  1647,  1648,
-    1649,  1650,  1658,  1659,  1667,  1668,  1677,  1678,  1679,  1680,
-    1681,  1682,  1683,  1684,  1688,  1693,  1707,  1715,  1720,  1734,
-    1735,  1736,  1737,  1738,  1739,  1740,  1741,  1742,  1743,  1744,
-    1745,  1746,  1747,  1748,  1749,  1750,  1751,  1759,  1760,  1774,
-    1779,  1784,  1789,  1794,  1801,  1815,  1816,  1817,  1824,  1825,
-    1833,  1834,  1842,  1843,  1844,  1845,  1846,  1847,  1848,  1849,
-    1850,  1851,  1852,  1853,  1854,  1855,  1856,  1857,  1858,  1859,
-    1860,  1861
+    0,   341,   341,   342,   343,   351,   365,   368,   373,   379,
+    385,   399,   409,   417,   426,   444,   445,   446,   447,   448,
+    449,   457,   458,   459,   460,   461,   462,   463,   464,   465,
+    466,   467,   468,   469,   470,   471,   484,   489,   504,   505,
+    510,   515,   520,   521,   522,   523,   524,   530,   538,   540,
+    551,   552,   553,   554,   577,   581,   585,   589,   593,   598,
+    603,   608,   613,   618,   622,   626,   630,   634,   653,   664,
+    672,   681,   690,   701,   709,   718,   727,   738,   746,   755,
+    764,   775,   783,   792,   801,   812,   820,   829,   838,   849,
+    857,   866,   882,   890,   891,   892,   900,   905,   917,   918,
+    919,   920,   921,   929,   934,   948,   949,   957,   962,   975,
+    976,   977,   979,   980,   981,   983,   984,   985,   987,   988,
+    989,   991,   992,   993,   995,   996,   997,   999,  1000,  1001,
+    1003,  1004,  1005,  1007,  1008,  1009,  1011,  1012,  1013,  1021,
+    1027,  1033,  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,
+    1042,  1043,  1044,  1045,  1046,  1047,  1048,  1057,  1058,  1060,
+    1061,  1063,  1064,  1065,  1066,  1067,  1068,  1069,  1070,  1072,
+    1073,  1074,  1075,  1076,  1077,  1078,  1079,  1081,  1082,  1083,
+    1084,  1085,  1086,  1087,  1088,  1096,  1097,  1105,  1106,  1107,
+    1115,  1116,  1117,  1118,  1119,  1124,  1125,  1126,  1131,  1135,
+    1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,  1147,  1148,
+    1149,  1150,  1151,  1152,  1153,  1154,  1162,  1166,  1170,  1175,
+    1180,  1185,  1196,  1197,  1198,  1202,  1206,  1211,  1216,  1217,
+    1226,  1227,  1228,  1232,  1236,  1241,  1246,  1247,  1255,  1259,
+    1272,  1273,  1274,  1275,  1283,  1284,  1292,  1296,  1300,  1304,
+    1308,  1312,  1316,  1320,  1331,  1332,  1340,  1341,  1342,  1343,
+    1345,  1346,  1348,  1349,  1358,  1359,  1360,  1365,  1366,  1367,
+    1372,  1373,  1374,  1375,  1382,  1391,  1392,  1402,  1410,  1415,
+    1429,  1434,  1450,  1451,  1452,  1453,  1454,  1462,  1463,  1464,
+    1465,  1466,  1467,  1475,  1476,  1477,  1478,  1479,  1480,  1488,
+    1493,  1506,  1521,  1522,  1532,  1533,  1551,  1552,  1560,  1561,
+    1562,  1563,  1564,  1565,  1566,  1574,  1575,  1583,  1584,  1585,
+    1586,  1587,  1595,  1599,  1603,  1607,  1611,  1615,  1622,  1627,
+    1641,  1642,  1643,  1644,  1645,  1646,  1647,  1648,  1649,  1650,
+    1651,  1652,  1660,  1661,  1669,  1670,  1679,  1680,  1681,  1682,
+    1683,  1684,  1685,  1686,  1690,  1695,  1709,  1717,  1722,  1736,
+    1737,  1738,  1739,  1740,  1741,  1742,  1743,  1744,  1745,  1746,
+    1747,  1748,  1749,  1750,  1751,  1752,  1753,  1761,  1762,  1776,
+    1781,  1786,  1791,  1796,  1803,  1817,  1818,  1819,  1826,  1827,
+    1835,  1836,  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,
+    1852,  1853,  1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,
+    1862,  1863
 };
 #endif
 
@@ -785,12 +788,12 @@ static const char *const yytname[] =
     "\"switch\"", "\"case\"", "\"otherwise\"", "\"function\"",
     "\"endfunction\"", "\"#function\"", "\"hidden\"", "\"for\"", "\"while\"",
     "\"do\"", "\"break\"", "\"continue\"", "\"try\"", "\"catch\"",
-    "\"return\"", "\"string\"", "\"identifier\"", "\"integer\"", "\"float\"",
-    "\"number\"", "\"path\"", "\"line comment\"", "\"block comment\"",
-    "TOPLEVEL", "HIGHLEVEL", "UPLEVEL", "LISTABLE", "CONTROLBREAK", "UMINUS",
-    "FUNCTIONCALL", "$accept", "program", "expressions",
-    "recursiveExpression", "expressionLineBreak", "expression",
-    "implicitFunctionCall", "implicitCallable", "functionCall",
+    "\"return\"", "FLEX_ERROR", "\"string\"", "\"identifier\"",
+    "\"integer\"", "\"float\"", "\"number\"", "\"path\"", "\"line comment\"",
+    "\"block comment\"", "TOPLEVEL", "HIGHLEVEL", "UPLEVEL", "LISTABLE",
+    "CONTROLBREAK", "UMINUS", "FUNCTIONCALL", "$accept", "program",
+    "expressions", "recursiveExpression", "expressionLineBreak",
+    "expression", "implicitFunctionCall", "implicitCallable", "functionCall",
     "simpleFunctionCall", "functionArgs", "functionDeclaration",
     "functionDeclarationReturns", "functionDeclarationArguments", "idList",
     "functionDeclarationBreak", "functionBody", "condition", "comparison",
@@ -821,14 +824,14 @@ static const yytype_uint16 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
+    335,   336,   337,   338,   339,   340
 };
 # endif
 
-#define YYPACT_NINF -490
+#define YYPACT_NINF -530
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-490)))
+  (!!((Yystate) == (-530)))
 
 #define YYTABLE_NINF -385
 
@@ -839,69 +842,69 @@ static const yytype_uint16 yytoknum[] =
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    1362,  -490,  1391,  -490,  -490,  3046,  -490,  -490,  -490,  3046,
-    2192,   425,  3046,  3046,  3046,  -490,  -490,    17,    56,   -39,
-    34,  3046,  -490,  -490,  1490,  3046,  -490,   147,  -490,  -490,
-    -490,  -490,    60,  -490,  1020,   222,    23,    71,  3157,  -490,
-    -490,  -490,  -490,  3278,  -490,  -490,  -490,   -10,  -490,  -490,
-    -490,  3046,  -490,  -490,  -490,  -490,  -490,  2192,   281,   183,
-    184,  3198,  3238,   312,  2210,  -490,  -490,  3318,  3358,  2228,
-    -490,  1041,  2299,  -490,  2317,    97,   336,  1645,   266,   299,
-    3318,   179,  3358,    54,    88,   104,   115,    81,    15,    41,
-    19,  1786,   400,   400,  -490,    82,  3318,  3358,  -490,  -490,
-    -490,  2452,  2521,  -490,  -490,  -490,  -490,  -490,  -490,   110,
-    -490,    36,  -490,  -490,  -490,  -490,   255,   222,   110,  -490,
-    3046,  2539,  2434,  -490,  3046,  3046,  3046,  3046,  3046,  3046,
-    3046,  3046,  3046,  3046,  3046,  3046,  3046,  3046,  3046,  3046,
-    2626,  2644,  2662,  2731,  2749,  2767,  2836,  2854,  2872,  2941,
-    669,  -490,  -490,   121,  -490,  -490,  2539,   649,  -490,  3046,
-    3046,  -490,  -490,  -490,  2557,  3318,  3358,    42,  1119,  2539,
-    2434,  2539,  1688,  3046,  -490,  3046,  -490,  3046,  -490,  -490,
-    2335,  1199,  -490,  -490,  1462,  -490,  -490,  -490,   101,  -490,
-    3318,  3358,    12,   901,  -490,  2406,  2010,  -490,  2081,  -490,
-    -490,   156,   172,   285,   108,  1712,   138,  -490,   185,   177,
-    -4,   152,    55,   161,   208,   157,    55,   106,   134,   189,
-    3046,  -490,   249,   277,   301,   305,   289,  1888,  -490,  -490,
-    -490,  -490,  1564,  2959,  -490,  -490,     3,  3157,   314,  3278,
-    -490,  -490,   182,   230,   255,   222,   222,  3546,  3582,   322,
-    -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,
-    -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,  -490,
-    141,   158,   256,   336,  1645,   336,  1645,   266,   299,   266,
-    299,   266,   299,   266,   299,   266,   299,   266,   299,   266,
-    299,   266,   299,   266,   299,   266,   299,   266,   299,   266,
-    299,   266,   299,   266,   299,  -490,   492,  3618,  -490,   492,
-    3618,  -490,   492,  3618,  -490,   492,  3618,  -490,   492,  3618,
-    -490,   492,  3618,  -490,  3474,  3510,  -490,  3474,  3510,  -490,
-    3398,  3436,  -490,  3398,  3436,  -490,  3318,  3358,  -490,  3046,
-    332,    38,   114,   262,   283,   266,   299,   266,   299,  -490,
-    3318,  3358,  -490,  -490,   330,   349,   311,   -41,  -490,   343,
-    341,   363,  -490,   377,   281,  -490,  -490,  3318,  3358,  3318,
-    3358,  3318,  3358,  -490,  2101,  -490,  -490,  -490,  -490,  -490,
-    3318,  3358,    12,  -490,  2121,  -490,  -490,  -490,  -490,  -490,
-    382,  -490,   375,   308,   357,   318,  -490,   393,   380,  -490,
-    407,   408,   411,  1814,  -490,   359,   369,   380,  1814,   388,
-    423,   374,    55,  3046,  3318,  3358,    83,  -490,  -490,  -490,
-    442,   446,  -490,   447,   448,  -490,  -490,   403,   415,  -490,
-    3157,  3278,  -490,  2977,  -490,  -490,  -490,   222,   416,  3546,
-    3582,   427,   281,   462,  -490,  -490,   -41,  3046,   474,   346,
-    -12,  -490,  -490,  -490,  -490,  -490,   335,  3046,  -490,  1916,
-    426,   380,   410,  -490,  -490,    55,  -490,  -490,  -490,  -490,
-    154,   380,   412,    55,   171,   414,   438,   380,  1814,   472,
-    -490,   484,   485,   486,  1990,  -490,  -490,  -490,  -490,  -490,
-    -490,  -490,  3157,  3278,  -490,   368,  3059,  3117,  -490,  -490,
-    3046,   338,  -490,  1916,  3046,   487,  -490,   488,   490,   179,
-    -490,   440,  -490,    55,   380,  1814,  -490,  -490,    55,   380,
-    1814,  -490,  -490,   380,   433,    55,   188,    83,  -490,  -490,
-    -490,  -490,   452,  -490,  1916,  -490,   505,   506,   370,  1638,
-    1638,  3059,  3117,  -490,   507,   526,   478,  3059,  3117,  -490,
-    -490,  -490,  1712,  -490,  1814,    55,   190,  1814,    55,   192,
-    55,   380,  1814,  -490,  -490,  1990,  -490,   480,  -490,  -490,
-    -490,   531,   532,  -490,  -490,  -490,  1638,  1638,  -490,  -490,
-    -490,  1638,  1638,    11,   202,  1814,  -490,  -490,   204,  1814,
-    -490,  -490,  1814,    55,   212,   491,  -490,  -490,  -490,  -490,
-    -490,  -490,  -490,  1916,  -490,  -490,  -490,   216,  -490,  -490,
-    219,   224,  1814,  -490,  -490,  -490,  -490,  -490,  -490,  -490,
-    -490,  -490,  -490,   231,  -490,  -490
+    1362,  -530,  1391,  -530,  -530,  3151,  -530,  -530,  -530,  3151,
+    2225,  2245,  3151,  3151,  3151,  -530,  -530,    -1,    17,   -27,
+    5,  3151,  -530,  -530,  1490,  3151,  -530,   289,  -530,  -530,
+    -530,  -530,    40,  -530,  1020,   171,    23,   295,  3263,  -530,
+    -530,  -530,  -530,  3384,  -530,  -530,  -530,    12,  -530,  -530,
+    -530,  3151,  -530,  -530,  -530,  -530,  -530,  2225,   148,   203,
+    215,  3304,  3344,   205,   418,  -530,  -530,  3424,  3464,  2335,
+    -530,  1041,  2353,  -530,  2425,    97,   882,  3682,   165,   189,
+    3424,   142,  3464,    27,     2,    37,     3,    33,    -9,    34,
+    19,  1793,   400,   400,  -530,    99,  3424,  3464,  -530,  -530,
+    -530,  2551,  2621,  -530,  -530,  -530,  -530,  -530,  -530,    65,
+    -530,    51,  -530,  -530,  -530,  -530,   200,   171,    65,  -530,
+    3151,  2639,  2533,  -530,  3151,  3151,  3151,  3151,  3151,  3151,
+    3151,  3151,  3151,  3151,  3151,  3151,  3151,  3151,  3151,  3151,
+    2727,  2745,  2763,  2833,  2851,  2869,  2939,  2957,  2975,  3045,
+    669,  -530,  -530,   118,  -530,  -530,  2639,   649,  -530,  3151,
+    3151,  -530,  -530,  -530,  2657,  3424,  3464,    55,  1118,  2639,
+    2533,  2639,  1466,  3151,  -530,  3151,  -530,  3151,  -530,  -530,
+    2443,  1199,  -530,  -530,  2021,  -530,  -530,  -530,    96,  -530,
+    3424,  3464,   176,  2317,  -530,  2461,  2093,  -530,  2113,  -530,
+    -530,   145,   157,   211,   126,  1718,   135,  -530,   178,   177,
+    6,   121,    77,   170,   202,   161,    77,    78,    24,   213,
+    3151,  -530,   249,   286,   217,   255,   308,  1897,  -530,  -530,
+    -530,  -530,  1568,  3063,  -530,  -530,   115,  3263,   299,  3384,
+    -530,  -530,   179,   221,   200,   171,   171,  3580,  3616,   309,
+    -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,
+    -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,  -530,
+    109,   129,   275,   882,  3682,   882,  3682,   165,   189,   165,
+    189,   165,   189,   165,   189,   165,   189,   165,   189,   165,
+    189,   165,   189,   165,   189,   165,   189,   165,   189,   165,
+    189,   165,   189,   165,   189,  -530,   490,  3652,  -530,   490,
+    3652,  -530,   490,  3652,  -530,   490,  3652,  -530,   490,  3652,
+    -530,   490,  3652,  -530,  1648,  1723,  -530,  1648,  1723,  -530,
+    3504,  3542,  -530,  3504,  3542,  -530,  3424,  3464,  -530,  3151,
+    335,    15,   117,   277,   288,   165,   189,   165,   189,  -530,
+    3424,  3464,  -530,  -530,   311,   318,   261,   -31,  -530,   340,
+    325,   363,  -530,   342,   148,  -530,  -530,  3424,  3464,  3424,
+    3464,  3424,  3464,  -530,  2133,  -530,  -530,  -530,  -530,  -530,
+    3424,  3464,   176,  -530,  2205,  -530,  -530,  -530,  -530,  -530,
+    352,  -530,   321,   307,   333,   314,  -530,   343,   369,  -530,
+    384,   385,   388,  1822,  -530,   322,   349,   369,  1822,   351,
+    386,   330,    77,  3151,  3424,  3464,   114,  -530,  -530,  -530,
+    401,   404,  -530,   407,   408,  -530,  -530,   362,   364,  -530,
+    3263,  3384,  -530,  3081,  -530,  -530,  -530,   171,   356,  3580,
+    3616,   371,   148,   406,  -530,  -530,   -31,  3151,   422,   278,
+    -21,  -530,  -530,  -530,  -530,  -530,   267,  3151,  -530,  1926,
+    376,   369,   358,  -530,  -530,    77,  -530,  -530,  -530,  -530,
+    184,   369,   359,    77,   188,   367,   395,   369,  1822,   429,
+    -530,   441,   442,   443,  2001,  -530,  -530,  -530,  -530,  -530,
+    -530,  -530,  3263,  3384,  -530,   291,  3164,  3223,  -530,  -530,
+    3151,   273,  -530,  1926,  3151,   444,  -530,   446,   447,   142,
+    -530,   399,  -530,    77,   369,  1822,  -530,  -530,    77,   369,
+    1822,  -530,  -530,   369,   392,    77,   192,   114,  -530,  -530,
+    -530,  -530,   403,  -530,  1926,  -530,   464,   466,   305,  1643,
+    1643,  3164,  3223,  -530,   472,   474,   426,  3164,  3223,  -530,
+    -530,  -530,  1718,  -530,  1822,    77,   196,  1822,    77,   204,
+    77,   369,  1822,  -530,  -530,  2001,  -530,   428,  -530,  -530,
+    -530,   479,   481,  -530,  -530,  -530,  1643,  1643,  -530,  -530,
+    -530,  1643,  1643,   155,   216,  1822,  -530,  -530,   228,  1822,
+    -530,  -530,  1822,    77,   230,   433,  -530,  -530,  -530,  -530,
+    -530,  -530,  -530,  1926,  -530,  -530,  -530,   245,  -530,  -530,
+    260,   274,  1822,  -530,  -530,  -530,  -530,  -530,  -530,  -530,
+    -530,  -530,  -530,   290,  -530,  -530
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -977,13 +980,13 @@ static const yytype_uint16 yydefact[] =
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -490,  -490,     0,  -490,   -32,   503,  -490,   501,   820,  -490,
-    -71,  -490,   -77,   -81,   331,  -173,  -398,   -20,  -490,   -40,
-    -490,   316,  -490,   489,  1163,  -490,  -490,  -490,    18,   350,
-    -56,     1,  -490,   -95,  -490,  -490,  -490,    -7,  -489,   339,
-    37,  -383,   -36,  -490,  -490,    53,  -490,   194,   107,  -366,
-    -363,  -490,   143,    27,    -6,  -490,  -490,  -490,  -490,   326,
-    16,  -490,  -490,  -116
+    -530,  -530,     0,  -530,   -32,   453,  -530,   451,   820,  -530,
+    -35,  -530,   -77,   -81,   284,  -173,  -398,   -20,  -530,   -40,
+    -530,   316,  -530,   489,  1163,  -530,  -530,  -530,    30,   303,
+    -56,     1,  -530,   -95,  -530,  -530,  -530,   -55,  -489,   296,
+    -8,  -383,   -83,  -530,  -530,    10,  -530,   150,    63,  -529,
+    -400,  -530,   116,     4,   -37,  -530,  -530,  -530,  -530,   298,
+    -52,  -530,  -530,   -12
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1004,61 +1007,61 @@ static const yytype_int16 yydefgoto[] =
 static const yytype_int16 yytable[] =
 {
     33,    90,    56,   161,   117,   216,   240,   240,   214,   459,
-    474,   396,    75,   183,   546,   447,   377,   101,   183,    87,
-    161,   102,   161,   221,    94,   378,   240,   115,   161,    74,
-    222,   242,   223,    83,     7,   448,     8,   161,   164,   161,
-    115,   344,   161,   408,   504,   567,   353,     7,    88,     8,
-    249,  -270,   341,   354,   362,   355,   366,   161,   168,   399,
-    110,   240,   456,   457,   505,   181,   400,   207,   401,   224,
-    184,   206,    85,   196,   240,   198,   240,    98,    99,   245,
-    526,   100,   180,   225,   246,   340,   219,   480,    84,   220,
-    195,   228,   229,   230,   481,   226,   482,   217,   359,   116,
-    363,   185,   210,     3,     4,    89,     5,     6,   186,   442,
-    187,     9,   244,    57,   616,    11,   199,   556,   356,    12,
-    13,   213,   559,   409,   183,   207,   161,    86,   101,   210,
-    243,   402,   102,   339,   540,   231,   211,   412,   432,   183,
-    410,   103,   104,   105,   106,   107,   108,   483,   210,  -274,
-    232,   161,   218,    98,    99,   169,   584,   100,   390,   588,
-    387,   101,  -264,   215,   594,   102,   338,    26,    58,    28,
-    29,    30,   171,   189,   575,   207,   388,   207,   576,   577,
-    352,   374,   411,   200,   581,   582,   393,   607,   395,  -269,
-    201,   610,   202,   433,   611,  -270,   384,   169,   171,   161,
-    603,   435,   394,   170,   172,   391,  -267,   516,   161,   405,
-    599,   600,   437,   517,   623,   601,   602,   103,   104,   105,
-    106,   107,   108,   398,   521,   406,   112,   426,   407,   203,
-    522,   161,    94,   113,   161,   114,   161,   413,   161,   478,
-    161,   563,   161,   586,   161,   590,   161,   564,   161,   587,
-    161,   591,   161,   417,   161,   605,   161,   608,   161,   115,
-    161,   606,   161,   609,   161,   613,     7,   161,     8,   617,
-    161,   614,   619,   161,   119,   618,   161,   621,   620,   161,
-    169,   418,   161,   622,   624,   161,   170,   123,   161,   200,
-    625,   161,   515,   425,   161,   101,   201,   161,   202,   102,
-    520,   436,   138,   139,  -268,   419,   161,   155,   161,   422,
-    -266,   161,   420,   171,   421,   353,   423,   465,   424,   172,
-    158,   161,   354,   177,   355,   433,   473,   178,   161,   434,
-    161,  -265,   161,   433,   444,   159,   160,   438,   494,   506,
-    554,   161,   543,   433,   119,   557,   507,   441,   508,   544,
-    169,   545,   562,   445,   433,   169,   170,   123,   451,   162,
-    126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-    136,   137,   138,   139,   570,   161,   162,   171,   162,   461,
-    513,   571,   585,   572,   162,   589,   455,   592,   433,   463,
-    518,   161,   452,   162,   210,   162,   525,   456,   162,   499,
-    161,     1,   500,   501,   395,   462,     3,     4,   464,     5,
-    6,   466,   467,   162,     9,   468,    10,   472,    11,   456,
-    612,   533,    12,    13,   500,   501,   456,   457,   458,    72,
-    471,     3,     4,   555,     5,     6,   475,   509,   558,     9,
-    476,    57,   560,    11,    73,   477,   485,    12,    13,    14,
-    486,   487,   488,   161,    15,    16,   489,   161,    17,   510,
-    18,    19,    20,    21,  -273,    22,    23,    24,   490,    25,
-    26,    27,    28,    29,    30,  -272,    31,   174,   498,   512,
-    593,   514,   162,   519,   531,   523,   524,   527,   528,   529,
-    530,   549,   550,   553,   551,    26,    58,    28,    29,    30,
-    119,    66,   161,   510,   561,   566,   169,   162,   161,   568,
-    569,   578,   170,   123,   124,   125,   126,   127,   128,   129,
-    130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-    579,   580,   163,   596,   510,   597,   598,   111,   118,   573,
-    573,   397,   389,   382,   615,   583,   552,   604,   534,   163,
-    446,   163,   391,   495,   565,   162,   479,   163,   428,   595,
+    474,   575,    75,   183,   546,    83,   210,   210,   183,    88,
+    161,   396,   161,   221,    94,   447,   240,   115,   161,   341,
+    222,    87,   223,    85,     7,   504,     8,   161,   210,   161,
+    110,    74,   161,   408,   206,   567,   448,   599,   600,   217,
+    211,   215,   601,   602,   213,   115,   505,   161,   168,   353,
+    164,   240,     7,   219,     8,   181,   354,   242,   355,   224,
+    184,    84,   411,   196,   240,   198,   240,    89,   207,   245,
+    526,   399,   220,   225,   246,   243,   249,   442,   400,    86,
+    401,   228,   229,   230,   180,   409,   226,   540,   338,   207,
+    116,   185,   195,     3,     4,   218,     5,     6,   186,   207,
+    187,     9,   352,    57,   616,    11,   199,   556,   480,    12,
+    13,   340,   559,   169,   183,   481,   161,   482,   244,   101,
+    339,   101,   356,   102,   359,   102,   363,   412,   432,   183,
+    410,   576,   577,   171,  -274,   344,   200,   581,   582,   387,
+    207,   161,   231,   201,   402,   202,   584,  -269,   362,   588,
+    366,   388,   101,  -270,   594,  -264,   102,   232,    26,    58,
+    28,    29,    30,   119,   189,   112,   390,  -267,   483,   169,
+    377,   374,   113,   393,   114,   170,   123,   607,   395,   378,
+    433,   610,   203,   398,   611,   394,   384,   155,   435,   161,
+    603,   138,   139,   171,   115,   391,   456,   457,   161,   172,
+    158,     7,   437,     8,   623,   200,   177,   169,   405,   406,
+    178,   419,   201,   170,   202,   159,   160,   426,   420,   171,
+    421,   161,    94,   407,   161,   172,   161,   516,   161,   478,
+    161,   521,   161,   517,   161,   563,   161,   522,   161,   586,
+    161,   564,   161,   417,   161,   587,   161,   590,   161,   422,
+    161,   413,   161,   591,   161,   353,   423,   161,   424,   605,
+    161,   506,   354,   161,   355,   606,   161,   543,   507,   161,
+    508,   608,   161,   613,   544,   161,   545,   609,   161,   614,
+    418,   161,   515,   436,   161,    98,    99,   161,   617,   100,
+    520,    98,    99,   101,   618,   100,   161,   102,   161,   570,
+    433,   161,   425,   619,   434,   444,   571,   465,   572,   620,
+    433,   161,   445,  -268,   438,  -266,   473,   621,   161,   456,
+    161,   499,   161,   622,   500,   501,  -265,  -270,   494,   169,
+    554,   161,   456,   624,   533,   557,   433,   500,   501,   625,
+    441,   433,   562,   433,   395,   451,   455,   452,   464,   162,
+    103,   104,   105,   106,   107,   108,   103,   104,   105,   106,
+    107,   108,   456,   457,   458,   161,   162,   171,   162,   461,
+    513,   462,   585,   210,   162,   589,   463,   592,   466,   467,
+    518,   161,   468,   162,   471,   162,   525,   472,   162,   475,
+    161,     1,   477,   476,  -273,   485,     3,     4,   486,     5,
+    6,   487,   488,   162,     9,   489,    10,   490,    11,  -272,
+    612,   174,    12,    13,     3,     4,   498,     5,     6,   512,
+    514,   519,     9,   555,    57,   179,    11,   509,   558,   523,
+    12,    13,   560,   524,   527,   528,   529,   530,   549,    14,
+    550,   551,   553,   161,    15,    16,   566,   161,    17,   510,
+    18,    19,    20,    21,   561,    22,    23,    24,   568,    25,
+    569,    26,    27,    28,    29,    30,   578,    31,   579,   580,
+    593,   596,   162,   597,   531,   598,   615,   111,   118,    26,
+    58,    28,    29,    30,   397,    66,   382,   583,   119,   389,
+    604,   552,   161,   510,   169,   534,   446,   162,   161,   495,
+    170,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+    132,   133,   134,   135,   136,   137,   138,   139,   595,   479,
+    428,   565,   163,     0,   510,     0,     0,     0,     0,   573,
+    573,     0,     0,     0,     0,     0,     0,     0,     0,   163,
+    0,   163,   391,     0,     0,   162,     0,   163,     0,     0,
     0,     0,     0,     0,   162,   531,   163,     0,   163,     0,
     0,   163,     0,     0,     0,     0,   573,   573,     0,     0,
     0,   573,   573,     0,     0,     0,   163,   162,     0,     0,
@@ -1075,9 +1078,9 @@ static const yytype_int16 yytable[] =
     0,    12,    13,     0,     0,     0,     0,   162,   250,   251,
     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
     262,   263,   264,   265,   266,     0,   267,   268,   269,     0,
-    342,     0,     0,     0,     0,     0,     0,     0,   163,     0,
-    0,   162,     0,     0,     0,     0,     0,   163,    25,    26,
-    58,    28,    29,    30,     0,     0,     0,   162,     0,     0,
+    0,   342,     0,     0,     0,     0,     0,     0,   163,     0,
+    0,   162,     0,     0,     0,     0,     0,   163,    25,     0,
+    26,    58,    28,    29,    30,     0,     0,   162,     0,     0,
     0,     0,     0,     0,     0,     0,   162,     0,     0,     0,
     163,     0,     0,   163,     0,   163,     0,   163,     0,   163,
     0,   163,     0,   163,     0,   163,     0,   163,     0,   163,
@@ -1092,15 +1095,15 @@ static const yytype_int16 yytable[] =
     0,   163,     0,     0,   162,     0,     0,     0,     0,     0,
     163,   165,     0,     0,     0,     0,     0,    67,     0,     0,
     0,     0,     0,     0,    67,     0,     0,     0,     0,    67,
-    0,   190,    67,     0,    67,   190,     0,     0,     0,     0,
-    0,     0,     0,     0,   163,   185,     0,     3,     4,     0,
-    5,     6,   379,     0,   187,     9,     0,    57,     0,    11,
-    163,   237,   237,    12,    13,     0,     0,     0,     0,   163,
+    119,   190,    67,     0,    67,   190,   169,     0,     0,     0,
+    0,     0,   170,   123,   163,     0,   126,   127,   128,   129,
+    130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+    163,   237,   237,     0,     0,     0,     0,     0,     0,   163,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     247,   237,   270,     0,   273,   275,   277,   279,   281,   283,
     285,   287,   289,   291,   293,   295,   297,   299,   301,   303,
     306,   309,   312,   315,   318,   321,   324,   327,   330,   333,
-    336,    26,    58,    28,    29,    30,   237,   343,     0,   345,
+    336,     0,     0,     0,     0,     0,   237,   343,     0,   345,
     347,     0,   163,     0,   350,     0,   163,     0,   190,   237,
     360,   237,   365,   367,     0,   369,     0,   371,     0,     0,
     67,   190,     0,     0,   190,     0,     0,     0,     0,     0,
@@ -1112,12 +1115,12 @@ static const yytype_int16 yytable[] =
     0,     0,     0,    12,    13,     0,     0,     0,     0,    14,
     0,    -6,    -6,    -6,    15,    16,    -6,    -6,    17,    -6,
     18,    19,    20,    21,     0,    22,    23,    24,    -6,    25,
-    26,    27,    28,    29,    30,     0,    31,     0,     0,     0,
+    0,    26,    27,    28,    29,    30,     0,    31,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,     0,   189,     0,     0,
-    0,     0,     0,   185,     0,     3,     4,     0,     5,     6,
-    186,     0,   187,     9,     0,    57,   358,    11,     0,     0,
-    0,    12,    13,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,    26,    58,    28,    29,    30,     0,   189,     0,
+    0,     0,   185,     0,     3,     4,     0,     5,     6,   186,
+    0,   187,     9,     0,    57,   358,    11,     0,     0,     0,
+    12,    13,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   439,
     0,   443,     0,     0,     0,     0,     0,     0,    60,     0,
     0,     0,    62,    68,    68,    77,    79,    82,     0,     0,
@@ -1129,8 +1132,8 @@ static const yytype_int16 yytable[] =
     0,     0,    68,   414,   191,    68,     0,    68,   191,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   492,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,   239,   239,     0,   496,     0,    26,
-    58,    28,    29,    30,     0,   189,     0,    80,     0,     0,
+    0,     0,     0,     0,   239,   239,     0,   496,     0,     0,
+    26,    58,    28,    29,    30,     0,   189,    80,     0,     0,
     0,     0,     0,   248,   239,   271,     0,   274,   276,   278,
     280,   282,   284,   286,   288,   290,   292,   294,   296,   298,
     300,   302,   304,   307,   310,   313,   316,   319,   322,   325,
@@ -1146,114 +1149,124 @@ static const yytype_int16 yytable[] =
     5,     6,   -17,     0,   -17,     9,     0,    10,     0,    11,
     0,    14,     0,    12,    13,     0,    15,    16,     0,     0,
     17,     0,    18,    19,    20,    21,     0,    22,    23,    24,
-    0,    25,    26,    27,    28,    29,    30,     0,    31,     0,
+    0,    25,     0,    26,    27,    28,    29,    30,     0,    31,
     14,     0,     0,     0,     0,    15,    16,     0,     0,    17,
     0,    18,    19,    20,    21,     0,    22,    23,    24,     0,
-    25,    26,    27,    28,    29,    30,   185,    31,     3,     4,
-    0,     5,     6,   186,     0,   187,     9,     0,    57,   376,
-    11,     0,     0,     0,    12,    13,     0,     0,     0,     0,
+    25,     0,    26,    27,    28,    29,    30,     0,    31,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    341,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     1,     0,     0,    91,     0,     3,     4,     0,     5,
     6,    92,   440,    93,     9,     0,    10,     0,    11,     0,
-    0,     0,    12,    13,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,     0,    26,    58,    28,    29,    30,   191,   189,    14,
+    0,     0,    12,    13,     0,   250,   251,   252,   253,   254,
+    255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+    265,   266,     0,   267,   268,   269,     0,   191,   364,    14,
     0,     0,     0,  -384,    15,    16,     0,   191,    17,     0,
     18,    19,    20,    21,     0,    22,    23,    24,  -384,    25,
-    26,    27,    28,    29,    30,     1,    31,     0,    91,     0,
-    3,     4,     0,     5,     6,    92,   415,    93,     9,     0,
-    10,     0,    11,     0,     0,     0,    12,    13,     0,     0,
-    0,     0,     0,     0,     0,     0,   493,     0,     0,     0,
+    0,    26,    27,    28,    29,    30,     0,    31,     0,     1,
+    0,     0,    91,     0,     3,     4,   415,     5,     6,    92,
+    0,    93,     9,     0,    10,     0,    11,     0,     0,     0,
+    12,    13,     0,     0,     0,     0,   493,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    497,     0,     0,    14,     0,     0,     0,  -384,    15,    16,
-    82,     0,    17,     0,    18,    19,    20,    21,     0,    22,
-    23,    24,     0,    25,    26,    27,    28,    29,    30,     1,
+    497,     0,     0,     0,     0,     0,     0,    14,     0,     0,
+    82,  -384,    15,    16,     0,     0,    17,     0,    18,    19,
+    20,    21,     0,    22,    23,    24,     0,    25,     0,    26,
+    27,    28,    29,    30,     1,    31,     0,     0,     0,     3,
+    4,     0,     5,     6,     0,     0,   119,     9,     0,    10,
+    120,    11,   169,   542,     0,    12,    13,   548,   170,   123,
+    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+    144,   145,    14,     0,  -329,     0,  -329,    15,    16,  -329,
+    -329,    17,     0,    18,    19,    20,    21,     0,    22,    23,
+    24,     0,    25,     0,    26,    27,    28,    29,    30,     1,
     31,     0,     0,     0,     3,     4,     0,     5,     6,     0,
-    0,     0,     9,   155,    10,     0,    11,     0,     0,   171,
-    12,    13,     0,   542,     0,   172,   158,   548,     0,   126,
-    127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-    137,   159,   160,     0,     0,     0,     0,    14,     0,  -329,
-    0,  -329,    15,    16,  -329,  -329,    17,     0,    18,    19,
-    20,    21,   341,    22,    23,    24,     0,    25,    26,    27,
-    28,    29,    30,     1,    31,     0,     0,     0,     3,     4,
+    0,   155,     9,     0,    10,   120,    11,   171,     0,     0,
+    12,    13,     0,   172,   158,   124,   125,   126,   127,   128,
+    129,   130,   131,   132,   133,   134,   135,   136,   137,   159,
+    160,   140,   141,   142,   143,   144,   145,    14,     0,  -279,
+    -279,  -279,    15,    16,     0,     0,    17,     0,    18,    19,
+    20,    21,     0,    22,    23,    24,     0,    25,     0,    26,
+    27,    28,    29,    30,     1,    31,     0,     0,     0,     3,
+    4,     0,     5,     6,     0,     0,     0,     9,     0,    10,
+    0,    11,     0,     0,     0,    12,    13,     0,     0,     0,
+    0,     0,     0,     1,     0,     0,     0,     0,     3,     4,
     0,     5,     6,     0,     0,     0,     9,     0,    10,     0,
-    11,     0,     0,     0,    12,    13,     0,   250,   251,   252,
-    253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-    263,   264,   265,   266,     0,   267,   268,   269,     0,   364,
-    0,    14,     0,  -279,  -279,  -279,    15,    16,     0,     0,
-    17,     0,    18,    19,    20,    21,     0,    22,    23,    24,
-    0,    25,    26,    27,    28,    29,    30,     1,    31,     0,
-    0,     0,     3,     4,     0,     5,     6,     0,     0,     0,
-    9,     0,    10,     0,    11,     0,     0,     0,    12,    13,
-    0,     0,     0,     0,     0,     1,     0,     0,     0,     0,
-    3,     4,     0,     5,     6,     0,     0,     0,     9,     0,
-    10,     0,    11,     0,     0,    14,    12,    13,     0,  -383,
-    15,    16,     0,     0,    17,     0,    18,    19,    20,    21,
-    0,    22,    23,    24,  -383,    25,    26,    27,    28,    29,
-    30,     0,    31,    14,     0,     0,     0,  -104,    15,    16,
-    0,     0,    17,  -104,    18,    19,    20,    21,     0,    22,
-    23,    24,     0,    25,    26,    27,    28,    29,    30,     1,
-    31,     0,     0,     0,     3,     4,     0,     5,     6,     0,
-    0,     0,     9,     0,    10,     0,    11,     0,     0,     0,
-    12,    13,     0,     0,     0,     0,     0,     1,     0,     0,
+    11,     0,    14,     0,    12,    13,  -383,    15,    16,     0,
+    0,    17,     0,    18,    19,    20,    21,     0,    22,    23,
+    24,  -383,    25,     0,    26,    27,    28,    29,    30,     0,
+    31,    14,     0,     0,     0,  -104,    15,    16,     0,     0,
+    17,  -104,    18,    19,    20,    21,     0,    22,    23,    24,
+    0,    25,     0,    26,    27,    28,    29,    30,     1,    31,
+    0,     0,     0,     3,     4,     0,     5,     6,     0,     0,
+    0,     9,     0,    10,     0,    11,     0,     0,     0,    12,
+    13,     0,     0,     0,     0,     0,     0,     1,     0,     0,
     0,     0,     3,     4,     0,     5,     6,     0,     0,     0,
-    9,     0,    10,     0,    11,     0,     0,    14,    12,    13,
-    0,  -358,    15,    16,     0,     0,    17,     0,    18,    19,
-    20,    21,     0,    22,    23,    24,     0,    25,    26,    27,
+    9,     0,    10,     0,    11,     0,    14,     0,    12,    13,
+    -358,    15,    16,     0,     0,    17,     0,    18,    19,    20,
+    21,     0,    22,    23,    24,     0,    25,     0,    26,    27,
     28,    29,    30,     0,    31,    14,     0,     0,     0,  -281,
     15,    16,     0,     0,    17,     0,    18,    19,    20,    21,
-    0,    22,    23,    24,     0,    25,    26,    27,    28,    29,
-    30,     1,    31,     0,     0,     0,     3,     4,     0,     5,
-    6,     0,     0,     0,     9,     0,    10,     0,    11,     0,
-    0,     0,    12,    13,   185,     0,     3,     4,     0,     5,
-    6,   186,     0,   187,     9,     0,    57,     0,    11,   385,
-    0,     0,    12,    13,     0,     0,     0,     0,     0,    14,
-    0,     0,     0,  -355,    15,    16,     0,     0,    17,     0,
-    18,    19,    20,    21,     0,    22,    23,    24,     0,    25,
-    26,    27,    28,    29,    30,     0,    31,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,    58,    28,    29,    30,   185,   189,     3,     4,     0,
-    5,     6,   186,     0,   187,     9,     0,    57,     0,    11,
-    386,     0,     0,    12,    13,   185,     0,     3,     4,     0,
-    5,     6,   186,     0,   187,     9,     0,    57,   453,    11,
+    0,    22,    23,    24,     0,    25,     0,    26,    27,    28,
+    29,    30,     1,    31,     0,     0,     0,     3,     4,     0,
+    5,     6,     0,     0,     0,     9,     0,    10,     0,    11,
     0,     0,     0,    12,    13,   185,     0,     3,     4,     0,
-    5,     6,   186,     0,   187,     9,     0,    57,     0,    11,
-    454,     0,     0,    12,    13,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,     0,   189,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,     0,   189,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,    64,   189,     3,     4,
-    0,     5,     6,     0,     0,     0,     9,     0,    57,    65,
-    11,     0,     0,     0,    12,    13,     3,     4,     0,     5,
-    6,     0,     0,     0,     9,     0,    57,   179,    11,     0,
-    0,     0,    12,    13,     3,     4,     0,     5,     6,     0,
-    0,     0,     9,     0,    57,   182,    11,     0,     0,     0,
-    12,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,     0,    26,    58,    28,    29,    30,     0,    66,     0,
+    5,     6,   186,     0,   187,     9,     0,    57,   376,    11,
+    0,     0,     0,    12,    13,     0,     0,     0,     0,     0,
+    14,     0,     0,     0,  -355,    15,    16,     0,     0,    17,
+    0,    18,    19,    20,    21,     0,    22,    23,    24,     0,
+    25,     0,    26,    27,    28,    29,    30,     0,    31,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,    58,    28,    29,    30,     0,    66,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,    26,    58,
-    28,    29,    30,     0,    66,     3,     4,     0,     5,     6,
-    0,     0,     0,     9,     0,    57,     0,    11,   194,     0,
-    0,    12,    13,     3,     4,     0,     5,     6,     0,     0,
-    0,     9,     0,    57,     0,    11,   197,     0,     0,    12,
+    0,     0,    26,    58,    28,    29,    30,   185,   189,     3,
+    4,     0,     5,     6,   186,     0,   187,     9,     0,    57,
+    0,    11,   385,     0,     0,    12,    13,   185,     0,     3,
+    4,     0,     5,     6,   186,     0,   187,     9,     0,    57,
+    0,    11,   386,     0,     0,    12,    13,   185,     0,     3,
+    4,     0,     5,     6,   186,     0,   187,     9,     0,    57,
+    453,    11,     0,     0,     0,    12,    13,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
+    189,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
+    189,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,   185,
+    189,     3,     4,     0,     5,     6,   186,     0,   187,     9,
+    0,    57,     0,    11,   454,     0,     0,    12,    13,    64,
+    0,     3,     4,     0,     5,     6,     0,     0,     0,     9,
+    0,    57,    65,    11,     0,     0,     0,    12,    13,    72,
+    0,     3,     4,     0,     5,     6,     0,     0,     0,     9,
+    0,    57,     0,    11,    73,     0,     0,    12,    13,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,     0,   189,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,     0,    66,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,   185,    66,     3,     4,     0,     5,     6,   379,     0,
+    187,     9,     0,    57,     0,    11,     0,     0,     0,    12,
     13,     3,     4,     0,     5,     6,     0,     0,     0,     9,
-    0,    57,   373,    11,     0,     0,     0,    12,    13,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-    58,    28,    29,    30,     0,    66,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,    26,    58,    28,
-    29,    30,     0,    66,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,    26,    58,    28,    29,    30,
-    0,    66,     3,     4,     0,     5,     6,     0,     0,     0,
-    9,     0,    57,     0,    11,   383,     0,     0,    12,    13,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    3,     4,     0,     5,     6,     0,     0,     0,     9,     0,
-    57,     0,    11,     0,     0,     0,    12,    13,     3,     4,
-    0,     5,     6,   233,   234,     0,     9,   235,    10,     0,
-    11,     0,     0,     0,    12,    13,    26,    58,    28,    29,
-    30,     0,    66,   250,   251,   252,   253,   254,   255,   256,
-    257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-    0,   267,   268,   269,    26,    58,    28,    29,    30,     0,
+    0,    57,   182,    11,     0,     0,     0,    12,    13,     3,
+    4,     0,     5,     6,     0,     0,     0,     9,     0,    57,
+    0,    11,   194,     0,     0,    12,    13,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,    26,    58,
+    28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,     0,    66,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
+    66,     3,     4,     0,     5,     6,     0,     0,     0,     9,
+    0,    57,     0,    11,   197,     0,     0,    12,    13,     3,
+    4,     0,     5,     6,     0,     0,     0,     9,     0,    57,
+    373,    11,     0,     0,     0,    12,    13,     3,     4,     0,
+    5,     6,     0,     0,     0,     9,     0,    57,     0,    11,
+    383,     0,     0,    12,    13,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,     0,    66,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
+    66,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,    26,    58,    28,    29,    30,     0,    66,     3,
+    4,     0,     5,     6,     0,     0,     0,     9,     0,    57,
+    0,    11,     0,     0,     0,    12,    13,     3,     4,     0,
+    5,     6,   233,   234,     0,     9,   235,    10,     0,    11,
+    0,     0,     0,    12,    13,     0,     0,     0,     0,     0,
+    0,     0,   250,   251,   252,   253,   254,   255,   256,   257,
+    258,   259,   260,   261,   262,   263,   264,   265,   266,     0,
+    267,   268,   269,     0,    26,    58,    28,    29,    30,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,    26,   236,    28,    29,    30,     3,     4,     0,
     5,     6,   233,   234,     0,     9,     0,    10,     0,    11,
@@ -1262,173 +1275,169 @@ static const yytype_int16 yytable[] =
     0,    12,    13,     3,     4,     0,     5,     6,     0,   349,
     0,     9,     0,    57,     0,    11,     0,     0,     0,    12,
     13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,   236,    28,    29,    30,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-    236,    28,    29,    30,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,    25,    26,    58,    28,
-    29,    30,     3,     4,     0,     5,     6,     0,   305,     0,
-    9,     0,    57,     0,    11,     0,     0,     0,    12,    13,
-    3,     4,     0,     5,     6,     0,   308,     0,     9,     0,
-    57,     0,    11,     0,     0,     0,    12,    13,     3,     4,
-    0,     5,     6,     0,   311,     0,     9,     0,    57,     0,
-    11,     0,     0,     0,    12,    13,     0,     0,     0,     0,
+    0,     0,    26,   236,    28,    29,    30,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,   236,    28,    29,    30,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    25,     0,    26,    58,
+    28,    29,    30,     3,     4,     0,     5,     6,     0,   305,
+    0,     9,     0,    57,     0,    11,     0,     0,     0,    12,
+    13,     3,     4,     0,     5,     6,     0,   308,     0,     9,
+    0,    57,     0,    11,     0,     0,     0,    12,    13,     3,
+    4,     0,     5,     6,     0,   311,     0,     9,     0,    57,
+    0,    11,     0,     0,     0,    12,    13,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,    26,    58,
+    28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
     30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,    26,    58,    28,    29,    30,     3,
+    4,     0,     5,     6,     0,   314,     0,     9,     0,    57,
+    0,    11,     0,     0,     0,    12,    13,     3,     4,     0,
+    5,     6,     0,   317,     0,     9,     0,    57,     0,    11,
+    0,     0,     0,    12,    13,     3,     4,     0,     5,     6,
+    0,   320,     0,     9,     0,    57,     0,    11,     0,     0,
+    0,    12,    13,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,     0,    26,    58,    28,    29,    30,     3,     4,     0,
-    5,     6,     0,   314,     0,     9,     0,    57,     0,    11,
-    0,     0,     0,    12,    13,     3,     4,     0,     5,     6,
-    0,   317,     0,     9,     0,    57,     0,    11,     0,     0,
-    0,    12,    13,     3,     4,     0,     5,     6,     0,   320,
+    0,     0,    26,    58,    28,    29,    30,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,    58,    28,    29,    30,     3,     4,     0,     5,     6,
+    0,   323,     0,     9,     0,    57,     0,    11,     0,     0,
+    0,    12,    13,     3,     4,     0,     5,     6,     0,   326,
     0,     9,     0,    57,     0,    11,     0,     0,     0,    12,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-    58,    28,    29,    30,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,    26,    58,    28,
-    29,    30,     3,     4,     0,     5,     6,     0,   323,     0,
-    9,     0,    57,     0,    11,     0,     0,     0,    12,    13,
-    3,     4,     0,     5,     6,     0,   326,     0,     9,     0,
-    57,     0,    11,     0,     0,     0,    12,    13,     3,     4,
-    0,     5,     6,     0,   329,     0,     9,     0,    57,     0,
-    11,     0,     0,     0,    12,    13,     0,     0,     0,     0,
+    13,     3,     4,     0,     5,     6,     0,   329,     0,     9,
+    0,    57,     0,    11,     0,     0,     0,    12,    13,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,    58,    28,    29,    30,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,     0,     0,    26,    58,
+    28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
+    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
+    30,     3,     4,     0,     5,     6,     0,   332,     0,     9,
+    0,    57,     0,    11,     0,     0,     0,    12,    13,     3,
+    4,     0,     5,     6,     0,   429,     0,     9,     0,    10,
+    0,    11,     0,     0,     0,    12,    13,     3,     4,     0,
+    5,     6,     0,   491,     0,     9,     0,    10,     0,    11,
+    0,     0,     0,    12,    13,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
     30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,    26,    58,    28,    29,    30,     0,
+    0,     0,     0,     0,    26,   236,    28,    29,    30,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,     0,    26,    58,    28,    29,    30,     3,     4,     0,
-    5,     6,     0,   332,     0,     9,     0,    57,     0,    11,
-    0,     0,     0,    12,    13,     3,     4,     0,     5,     6,
-    0,   429,     0,     9,     0,    10,     0,    11,     0,     0,
-    0,    12,    13,     3,     4,     0,     5,     6,     0,   491,
-    0,     9,     0,    10,     0,    11,     0,     0,     0,    12,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    0,    26,    58,    28,    29,    30,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-    236,    28,    29,    30,     0,     0,     0,     0,     0,     0,
-    0,     0,     0,     0,     0,     0,     0,    26,   236,    28,
-    29,    30,     3,     4,     0,     5,     6,     0,     0,     0,
-    9,     0,    57,   535,    11,     0,     0,   119,    12,    13,
-    536,   120,   537,   169,     0,     0,     0,     0,     0,   170,
-    123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-    133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-    143,   144,   145,   146,   147,   148,   149,     0,     0,   538,
-    0,     0,     0,     0,     0,     0,    26,    58,    28,    29,
-    30,   535,     0,     0,     0,   155,     0,     0,   536,   120,
-    537,   171,     0,     0,     0,     0,     0,   172,   158,   124,
-    125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-    135,   136,   137,   159,   160,   140,   141,   142,   143,   144,
-    145,   146,   147,   148,   149,   119,     0,   538,     0,   120,
-    0,   121,     0,     0,     0,     0,     0,   122,   123,   124,
-    125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-    135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-    145,   146,   147,   148,   149,   150,   119,     0,     0,   173,
-    120,     0,   169,   174,     0,     0,     0,     0,   170,   123,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-    144,   145,   146,   147,   148,   149,   155,     0,     0,   175,
-    120,     0,   171,   176,     0,     0,     0,     0,   172,   158,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   159,   160,   140,   141,   142,   143,
-    144,   145,   146,   147,   148,   149,   155,     0,     0,     0,
-    120,     0,   156,     0,     0,     0,     0,     0,   157,   158,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   159,   160,   140,   141,   142,   143,
-    144,   145,   146,   147,   148,   149,   119,     0,     0,     0,
-    120,     0,   169,     0,     0,     0,     0,     0,   170,   123,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-    144,   145,   146,   147,   148,   149,   155,     0,     0,     0,
-    120,     0,   171,     0,     0,     0,     0,     0,   172,   158,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   159,   160,   140,   141,   142,   143,
-    144,   145,   146,   147,   148,   149,   119,     0,     0,     0,
-    120,     0,   169,     0,     0,     0,     0,     0,   170,   123,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-    144,   145,   146,   147,   155,     0,     0,     0,   120,     0,
-    171,     0,     0,     0,     0,     0,   172,   158,   124,   125,
-    126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-    136,   137,   159,   160,   140,   141,   142,   143,   144,   145,
-    146,   147,   119,     0,     0,     0,   120,     0,   169,     0,
+    0,     0,    26,   236,    28,    29,    30,     3,     4,     0,
+    5,     6,     0,     0,     0,     9,     0,    57,   535,    11,
+    0,     0,   119,    12,    13,   536,   120,   537,   169,     0,
+    0,     0,     0,     0,   170,   123,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,     0,     0,   538,     0,     0,     0,     0,     0,
+    0,     0,    26,    58,    28,    29,    30,   535,     0,     0,
+    0,   155,     0,     0,   536,   120,   537,   171,     0,     0,
+    0,     0,     0,   172,   158,   124,   125,   126,   127,   128,
+    129,   130,   131,   132,   133,   134,   135,   136,   137,   159,
+    160,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+    149,   119,     0,   538,     0,   120,     0,   121,     0,     0,
+    0,     0,     0,   122,   123,   124,   125,   126,   127,   128,
+    129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+    139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+    149,   150,   119,     0,     0,   173,   120,     0,   169,   174,
+    0,     0,     0,     0,   170,   123,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,   155,     0,     0,   175,   120,     0,   171,   176,
+    0,     0,     0,     0,   172,   158,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    159,   160,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,   155,     0,     0,     0,   120,     0,   156,     0,
+    0,     0,     0,     0,   157,   158,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    159,   160,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,   119,     0,     0,     0,   120,     0,   169,     0,
     0,     0,     0,     0,   170,   123,   124,   125,   126,   127,
     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-    138,   139,   140,   141,   142,   143,   144,   145,   155,     0,
-    0,     0,   120,     0,   171,     0,     0,     0,     0,     0,
-    172,   158,   124,   125,   126,   127,   128,   129,   130,   131,
-    132,   133,   134,   135,   136,   137,   159,   160,   140,   141,
-    142,   143,   144,   145,   119,     0,     0,     0,     0,     0,
-    169,     0,     0,     0,     0,     0,   170,   123,   124,   125,
+    138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,   155,     0,     0,     0,   120,     0,   171,     0,
+    0,     0,     0,     0,   172,   158,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    159,   160,   140,   141,   142,   143,   144,   145,   146,   147,
+    148,   149,   119,     0,     0,     0,   120,     0,   169,     0,
+    0,     0,     0,     0,   170,   123,   124,   125,   126,   127,
+    128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+    138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+    155,     0,     0,     0,   120,     0,   171,     0,     0,     0,
+    0,     0,   172,   158,   124,   125,   126,   127,   128,   129,
+    130,   131,   132,   133,   134,   135,   136,   137,   159,   160,
+    140,   141,   142,   143,   144,   145,   146,   147,   119,     0,
+    0,     0,     0,     0,   169,     0,     0,     0,     0,     0,
+    170,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+    132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+    142,   143,   144,   145,   155,     0,     0,     0,     0,     0,
+    171,     0,     0,     0,     0,     0,   172,   158,   124,   125,
     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-    136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+    136,   137,   159,   160,   140,   141,   142,   143,   144,   145,
     155,     0,     0,     0,     0,     0,   171,     0,     0,     0,
     0,     0,   172,   158,   124,   125,   126,   127,   128,   129,
     130,   131,   132,   133,   134,   135,   136,   137,   159,   160,
-    140,   141,   142,   143,   144,   145,   155,     0,     0,     0,
-    0,     0,   171,     0,     0,     0,     0,     0,   172,   158,
-    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-    134,   135,   136,   137,   159,   160
+    155,     0,     0,     0,     0,     0,   171,     0,     0,     0,
+    0,     0,   172,   158,     0,     0,   126,   127,   128,   129,
+    130,   131,   132,   133,   134,   135,   136,   137,   159,   160
 };
 
 static const yytype_int16 yycheck[] =
 {
     0,    21,     2,    43,    36,    86,   101,   102,    85,   392,
-    408,    15,    11,    69,   503,    56,     4,    14,    74,    58,
-    60,    18,    62,     4,    24,    13,   121,     4,    68,    11,
-    11,   102,    13,    16,    11,    76,    13,    77,    48,    79,
-    4,   157,    82,   216,    56,   534,     4,    11,    14,    13,
-    121,    48,    14,    11,   170,    13,   172,    97,    57,     4,
-    0,   156,    51,    52,    76,    64,    11,    71,    13,    50,
-    69,    17,    16,    72,   169,    74,   171,     6,     7,   111,
-    478,    10,    64,    64,   116,   156,    71,     4,    71,    48,
-    72,    91,    92,    93,    11,    76,    13,    16,   169,    76,
-    171,     4,    14,     6,     7,    71,     9,    10,    11,    71,
-    13,    14,    76,    16,   603,    18,    19,   515,    76,    22,
-    23,    17,   520,    17,   180,    71,   166,    71,    14,    14,
-    20,    76,    18,    12,   497,    53,    48,   218,   233,   195,
-    217,    70,    71,    72,    73,    74,    75,    64,    14,    48,
-    68,   191,    71,     6,     7,    14,   554,    10,    50,   557,
-    4,    14,    48,    48,   562,    18,   150,    70,    71,    72,
-    73,    74,    14,    76,   540,    71,     4,    71,   541,   542,
-    164,   180,    48,     4,   547,   548,    48,   585,    11,    48,
-    11,   589,    13,    11,   592,    48,   195,    14,    14,   239,
-    583,    19,    17,    20,    20,   205,    48,    53,   248,    48,
-    576,   577,   244,    59,   612,   581,   582,    70,    71,    72,
-    73,    74,    75,    71,    53,    17,     4,   227,    71,    50,
-    59,   271,   232,    11,   274,    13,   276,    48,   278,   412,
-    280,    53,   282,    53,   284,    53,   286,    59,   288,    59,
-    290,    59,   292,     4,   294,    53,   296,    53,   298,     4,
-    300,    59,   302,    59,   304,    53,    11,   307,    13,    53,
-    310,    59,    53,   313,     8,    59,   316,    53,    59,   319,
-    14,     4,   322,    59,    53,   325,    20,    21,   328,     4,
-    59,   331,   465,     4,   334,    14,    11,   337,    13,    18,
-    473,    71,    36,    37,    48,     4,   346,     8,   348,     4,
-    48,   351,    11,    14,    13,     4,    11,   398,    13,    20,
-    21,   361,    11,    11,    13,    11,   407,    15,   368,    15,
-    370,    48,   372,    11,     4,    36,    37,    15,   433,     4,
-    513,   381,     4,    11,     8,   518,    11,    15,    13,    11,
-    14,    13,   525,     4,    11,    14,    20,    21,    15,    43,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,     4,   415,    60,    14,    62,    71,
-    461,    11,   555,    13,    68,   558,     4,   560,    11,    71,
-    471,   431,    15,    77,    14,    79,   477,    51,    82,    53,
-    440,     1,    56,    57,    11,    48,     6,     7,    15,     9,
-    10,     4,     4,    97,    14,     4,    16,    48,    18,    51,
-    593,    53,    22,    23,    56,    57,    51,    52,    53,     4,
-    71,     6,     7,   514,     9,    10,    48,   457,   519,    14,
-    17,    16,   523,    18,    19,    71,     4,    22,    23,    49,
-    4,     4,     4,   493,    54,    55,    53,   497,    58,   459,
-    60,    61,    62,    63,    48,    65,    66,    67,    53,    69,
-    70,    71,    72,    73,    74,    48,    76,    15,     4,    53,
-    561,    71,   166,    71,   484,    71,    48,    15,     4,     4,
-    4,     4,     4,    53,     4,    70,    71,    72,    73,    74,
-    8,    76,   542,   503,    71,    53,    14,   191,   548,     4,
-    4,     4,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    4,    53,    43,    53,   534,     4,     4,    34,    37,   539,
-    540,   210,   203,   193,    53,   552,   509,   583,   495,    60,
-    356,    62,   552,   446,   527,   239,   413,    68,   232,   565,
+    408,   540,    11,    69,   503,    16,    14,    14,    74,    14,
+    60,    15,    62,     4,    24,    56,   121,     4,    68,    14,
+    11,    58,    13,    16,    11,    56,    13,    77,    14,    79,
+    0,    11,    82,   216,    17,   534,    77,   576,   577,    16,
+    48,    48,   581,   582,    17,     4,    77,    97,    57,     4,
+    48,   156,    11,    72,    13,    64,    11,   102,    13,    50,
+    69,    72,    48,    72,   169,    74,   171,    72,    72,   111,
+    478,     4,    48,    64,   116,    20,   121,    72,    11,    72,
+    13,    91,    92,    93,    64,    17,    77,   497,   150,    72,
+    77,     4,    72,     6,     7,    72,     9,    10,    11,    72,
+    13,    14,   164,    16,   603,    18,    19,   515,     4,    22,
+    23,   156,   520,    14,   180,    11,   166,    13,    77,    14,
+    12,    14,    77,    18,   169,    18,   171,   218,   233,   195,
+    217,   541,   542,    14,    48,   157,     4,   547,   548,     4,
+    72,   191,    53,    11,    77,    13,   554,    48,   170,   557,
+    172,     4,    14,    48,   562,    48,    18,    68,    71,    72,
+    73,    74,    75,     8,    77,     4,    50,    48,    64,    14,
+    4,   180,    11,    48,    13,    20,    21,   585,    11,    13,
+    11,   589,    50,    72,   592,    17,   195,     8,    19,   239,
+    583,    36,    37,    14,     4,   205,    51,    52,   248,    20,
+    21,    11,   244,    13,   612,     4,    11,    14,    48,    17,
+    15,     4,    11,    20,    13,    36,    37,   227,    11,    14,
+    13,   271,   232,    72,   274,    20,   276,    53,   278,   412,
+    280,    53,   282,    59,   284,    53,   286,    59,   288,    53,
+    290,    59,   292,     4,   294,    59,   296,    53,   298,     4,
+    300,    48,   302,    59,   304,     4,    11,   307,    13,    53,
+    310,     4,    11,   313,    13,    59,   316,     4,    11,   319,
+    13,    53,   322,    53,    11,   325,    13,    59,   328,    59,
+    4,   331,   465,    72,   334,     6,     7,   337,    53,    10,
+    473,     6,     7,    14,    59,    10,   346,    18,   348,     4,
+    11,   351,     4,    53,    15,     4,    11,   398,    13,    59,
+    11,   361,     4,    48,    15,    48,   407,    53,   368,    51,
+    370,    53,   372,    59,    56,    57,    48,    48,   433,    14,
+    513,   381,    51,    53,    53,   518,    11,    56,    57,    59,
+    15,    11,   525,    11,    11,    15,     4,    15,    15,    43,
+    71,    72,    73,    74,    75,    76,    71,    72,    73,    74,
+    75,    76,    51,    52,    53,   415,    60,    14,    62,    72,
+    461,    48,   555,    14,    68,   558,    72,   560,     4,     4,
+    471,   431,     4,    77,    72,    79,   477,    48,    82,    48,
+    440,     1,    72,    17,    48,     4,     6,     7,     4,     9,
+    10,     4,     4,    97,    14,    53,    16,    53,    18,    48,
+    593,    15,    22,    23,     6,     7,     4,     9,    10,    53,
+    72,    72,    14,   514,    16,    17,    18,   457,   519,    72,
+    22,    23,   523,    48,    15,     4,     4,     4,     4,    49,
+    4,     4,    53,   493,    54,    55,    53,   497,    58,   459,
+    60,    61,    62,    63,    72,    65,    66,    67,     4,    69,
+    4,    71,    72,    73,    74,    75,     4,    77,     4,    53,
+    561,    53,   166,     4,   484,     4,    53,    34,    37,    71,
+    72,    73,    74,    75,   210,    77,   193,   552,     8,   203,
+    583,   509,   542,   503,    14,   495,   356,   191,   548,   446,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,    33,    34,    35,    36,    37,   565,   413,
+    232,   527,    43,    -1,   534,    -1,    -1,    -1,    -1,   539,
+    540,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
+    -1,    62,   552,    -1,    -1,   239,    -1,    68,    -1,    -1,
     -1,    -1,    -1,    -1,   248,   565,    77,    -1,    79,    -1,
     -1,    82,    -1,    -1,    -1,    -1,   576,   577,    -1,    -1,
     -1,   581,   582,    -1,    -1,    -1,    97,   271,    -1,    -1,
@@ -1445,9 +1454,9 @@ static const yytype_int16 yycheck[] =
     -1,    22,    23,    -1,    -1,    -1,    -1,   381,    49,    50,
     51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
     61,    62,    63,    64,    65,    -1,    67,    68,    69,    -1,
-    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   239,    -1,
-    -1,   415,    -1,    -1,    -1,    -1,    -1,   248,    69,    70,
-    71,    72,    73,    74,    -1,    -1,    -1,   431,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,   239,    -1,
+    -1,   415,    -1,    -1,    -1,    -1,    -1,   248,    69,    -1,
+    71,    72,    73,    74,    75,    -1,    -1,   431,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,   440,    -1,    -1,    -1,
     271,    -1,    -1,   274,    -1,   276,    -1,   278,    -1,   280,
     -1,   282,    -1,   284,    -1,   286,    -1,   288,    -1,   290,
@@ -1462,15 +1471,15 @@ static const yytype_int16 yycheck[] =
     -1,   372,    -1,    -1,   548,    -1,    -1,    -1,    -1,    -1,
     381,    51,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
     -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    69,
-    -1,    71,    72,    -1,    74,    75,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   415,     4,    -1,     6,     7,    -1,
-    9,    10,    11,    -1,    13,    14,    -1,    16,    -1,    18,
-    431,   101,   102,    22,    23,    -1,    -1,    -1,    -1,   440,
+    8,    71,    72,    -1,    74,    75,    14,    -1,    -1,    -1,
+    -1,    -1,    20,    21,   415,    -1,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+    431,   101,   102,    -1,    -1,    -1,    -1,    -1,    -1,   440,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     120,   121,   122,    -1,   124,   125,   126,   127,   128,   129,
     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-    150,    70,    71,    72,    73,    74,   156,   157,    -1,   159,
+    150,    -1,    -1,    -1,    -1,    -1,   156,   157,    -1,   159,
     160,    -1,   493,    -1,   164,    -1,   497,    -1,   168,   169,
     170,   171,   172,   173,    -1,   175,    -1,   177,    -1,    -1,
     180,   181,    -1,    -1,   184,    -1,    -1,    -1,    -1,    -1,
@@ -1482,25 +1491,25 @@ static const yytype_int16 yycheck[] =
     -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    49,
     -1,    51,    52,    53,    54,    55,    56,    57,    58,    59,
     60,    61,    62,    63,    -1,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,    -1,
+    -1,    71,    72,    73,    74,    75,    -1,    77,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,     4,    -1,     6,     7,    -1,     9,    10,
-    11,    -1,    13,    14,    -1,    16,    17,    18,    -1,    -1,
-    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,    -1,    77,    -1,
+    -1,    -1,     4,    -1,     6,     7,    -1,     9,    10,    11,
+    -1,    13,    14,    -1,    16,    17,    18,    -1,    -1,    -1,
+    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   339,
     -1,   341,    -1,    -1,    -1,    -1,    -1,    -1,     5,    -1,
     -1,    -1,     9,    10,    11,    12,    13,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    21,    -1,    -1,    -1,    25,    70,
-    71,    72,    73,    74,   374,    76,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    21,    -1,    -1,    -1,    25,    71,
+    72,    73,    74,    75,   374,    77,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,     4,   384,     6,     7,    -1,     9,    10,
     11,    -1,    13,    14,    51,    16,    17,    18,    -1,    -1,
     57,    22,    23,    -1,    -1,    -1,    -1,    64,    -1,    -1,
     -1,    -1,    69,   413,    71,    72,    -1,    74,    75,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   101,   102,    -1,   447,    -1,    70,
-    71,    72,    73,    74,    -1,    76,    -1,   457,    -1,    -1,
+    -1,    -1,    -1,    -1,   101,   102,    -1,   447,    -1,    -1,
+    71,    72,    73,    74,    75,    -1,    77,   457,    -1,    -1,
     -1,    -1,    -1,   120,   121,   122,    -1,   124,   125,   126,
     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
@@ -1516,216 +1525,223 @@ static const yytype_int16 yycheck[] =
     9,    10,    11,    -1,    13,    14,    -1,    16,    -1,    18,
     -1,    49,    -1,    22,    23,    -1,    54,    55,    -1,    -1,
     58,    -1,    60,    61,    62,    63,    -1,    65,    66,    67,
-    -1,    69,    70,    71,    72,    73,    74,    -1,    76,    -1,
+    -1,    69,    -1,    71,    72,    73,    74,    75,    -1,    77,
     49,    -1,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,
     -1,    60,    61,    62,    63,    -1,    65,    66,    67,    -1,
-    69,    70,    71,    72,    73,    74,     4,    76,     6,     7,
-    -1,     9,    10,    11,    -1,    13,    14,    -1,    16,    17,
-    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,
+    69,    -1,    71,    72,    73,    74,    75,    -1,    77,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,     1,    -1,    -1,     4,    -1,     6,     7,    -1,     9,
     10,    11,   339,    13,    14,    -1,    16,    -1,    18,    -1,
-    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    72,    73,    74,   374,    76,    49,
+    -1,    -1,    22,    23,    -1,    49,    50,    51,    52,    53,
+    54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    -1,    67,    68,    69,    -1,   374,    72,    49,
     -1,    -1,    -1,    53,    54,    55,    -1,   384,    58,    -1,
     60,    61,    62,    63,    -1,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,     1,    76,    -1,     4,    -1,
-    6,     7,    -1,     9,    10,    11,   413,    13,    14,    -1,
-    16,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
+    -1,    71,    72,    73,    74,    75,    -1,    77,    -1,     1,
+    -1,    -1,     4,    -1,     6,     7,   413,     9,    10,    11,
+    -1,    13,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,
+    22,    23,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    447,    -1,    -1,    49,    -1,    -1,    -1,    53,    54,    55,
-    457,    -1,    58,    -1,    60,    61,    62,    63,    -1,    65,
-    66,    67,    -1,    69,    70,    71,    72,    73,    74,     1,
-    76,    -1,    -1,    -1,     6,     7,    -1,     9,    10,    -1,
-    -1,    -1,    14,     8,    16,    -1,    18,    -1,    -1,    14,
-    22,    23,    -1,   500,    -1,    20,    21,   504,    -1,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-    35,    36,    37,    -1,    -1,    -1,    -1,    49,    -1,    51,
-    -1,    53,    54,    55,    56,    57,    58,    -1,    60,    61,
-    62,    63,    14,    65,    66,    67,    -1,    69,    70,    71,
-    72,    73,    74,     1,    76,    -1,    -1,    -1,     6,     7,
+    447,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
+    457,    53,    54,    55,    -1,    -1,    58,    -1,    60,    61,
+    62,    63,    -1,    65,    66,    67,    -1,    69,    -1,    71,
+    72,    73,    74,    75,     1,    77,    -1,    -1,    -1,     6,
+    7,    -1,     9,    10,    -1,    -1,     8,    14,    -1,    16,
+    12,    18,    14,   500,    -1,    22,    23,   504,    20,    21,
+    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+    42,    43,    49,    -1,    51,    -1,    53,    54,    55,    56,
+    57,    58,    -1,    60,    61,    62,    63,    -1,    65,    66,
+    67,    -1,    69,    -1,    71,    72,    73,    74,    75,     1,
+    77,    -1,    -1,    -1,     6,     7,    -1,     9,    10,    -1,
+    -1,     8,    14,    -1,    16,    12,    18,    14,    -1,    -1,
+    22,    23,    -1,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    49,    -1,    51,
+    52,    53,    54,    55,    -1,    -1,    58,    -1,    60,    61,
+    62,    63,    -1,    65,    66,    67,    -1,    69,    -1,    71,
+    72,    73,    74,    75,     1,    77,    -1,    -1,    -1,     6,
+    7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,
+    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
+    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,     6,     7,
     -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,    -1,
-    18,    -1,    -1,    -1,    22,    23,    -1,    49,    50,    51,
-    52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-    62,    63,    64,    65,    -1,    67,    68,    69,    -1,    71,
-    -1,    49,    -1,    51,    52,    53,    54,    55,    -1,    -1,
-    58,    -1,    60,    61,    62,    63,    -1,    65,    66,    67,
-    -1,    69,    70,    71,    72,    73,    74,     1,    76,    -1,
-    -1,    -1,     6,     7,    -1,     9,    10,    -1,    -1,    -1,
-    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,
-    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,
-    6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,
-    16,    -1,    18,    -1,    -1,    49,    22,    23,    -1,    53,
-    54,    55,    -1,    -1,    58,    -1,    60,    61,    62,    63,
-    -1,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    -1,    76,    49,    -1,    -1,    -1,    53,    54,    55,
-    -1,    -1,    58,    59,    60,    61,    62,    63,    -1,    65,
-    66,    67,    -1,    69,    70,    71,    72,    73,    74,     1,
-    76,    -1,    -1,    -1,     6,     7,    -1,     9,    10,    -1,
-    -1,    -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,
-    22,    23,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+    18,    -1,    49,    -1,    22,    23,    53,    54,    55,    -1,
+    -1,    58,    -1,    60,    61,    62,    63,    -1,    65,    66,
+    67,    68,    69,    -1,    71,    72,    73,    74,    75,    -1,
+    77,    49,    -1,    -1,    -1,    53,    54,    55,    -1,    -1,
+    58,    59,    60,    61,    62,    63,    -1,    65,    66,    67,
+    -1,    69,    -1,    71,    72,    73,    74,    75,     1,    77,
+    -1,    -1,    -1,     6,     7,    -1,     9,    10,    -1,    -1,
+    -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
+    23,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,
     -1,    -1,     6,     7,    -1,     9,    10,    -1,    -1,    -1,
-    14,    -1,    16,    -1,    18,    -1,    -1,    49,    22,    23,
-    -1,    53,    54,    55,    -1,    -1,    58,    -1,    60,    61,
-    62,    63,    -1,    65,    66,    67,    -1,    69,    70,    71,
-    72,    73,    74,    -1,    76,    49,    -1,    -1,    -1,    53,
+    14,    -1,    16,    -1,    18,    -1,    49,    -1,    22,    23,
+    53,    54,    55,    -1,    -1,    58,    -1,    60,    61,    62,
+    63,    -1,    65,    66,    67,    -1,    69,    -1,    71,    72,
+    73,    74,    75,    -1,    77,    49,    -1,    -1,    -1,    53,
     54,    55,    -1,    -1,    58,    -1,    60,    61,    62,    63,
-    -1,    65,    66,    67,    -1,    69,    70,    71,    72,    73,
-    74,     1,    76,    -1,    -1,    -1,     6,     7,    -1,     9,
-    10,    -1,    -1,    -1,    14,    -1,    16,    -1,    18,    -1,
-    -1,    -1,    22,    23,     4,    -1,     6,     7,    -1,     9,
-    10,    11,    -1,    13,    14,    -1,    16,    -1,    18,    19,
-    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,    49,
-    -1,    -1,    -1,    53,    54,    55,    -1,    -1,    58,    -1,
-    60,    61,    62,    63,    -1,    65,    66,    67,    -1,    69,
-    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    71,    72,    73,    74,     4,    76,     6,     7,    -1,
-    9,    10,    11,    -1,    13,    14,    -1,    16,    -1,    18,
-    19,    -1,    -1,    22,    23,     4,    -1,     6,     7,    -1,
-    9,    10,    11,    -1,    13,    14,    -1,    16,    17,    18,
+    -1,    65,    66,    67,    -1,    69,    -1,    71,    72,    73,
+    74,    75,     1,    77,    -1,    -1,    -1,     6,     7,    -1,
+    9,    10,    -1,    -1,    -1,    14,    -1,    16,    -1,    18,
     -1,    -1,    -1,    22,    23,     4,    -1,     6,     7,    -1,
-    9,    10,    11,    -1,    13,    14,    -1,    16,    -1,    18,
-    19,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,     4,    76,     6,     7,
-    -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,    17,
-    18,    -1,    -1,    -1,    22,    23,     6,     7,    -1,     9,
-    10,    -1,    -1,    -1,    14,    -1,    16,    17,    18,    -1,
-    -1,    -1,    22,    23,     6,     7,    -1,     9,    10,    -1,
-    -1,    -1,    14,    -1,    16,    17,    18,    -1,    -1,    -1,
-    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    72,    73,    74,    -1,    76,    -1,
+    9,    10,    11,    -1,    13,    14,    -1,    16,    17,    18,
+    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,
+    49,    -1,    -1,    -1,    53,    54,    55,    -1,    -1,    58,
+    -1,    60,    61,    62,    63,    -1,    65,    66,    67,    -1,
+    69,    -1,    71,    72,    73,    74,    75,    -1,    77,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    71,    72,    73,    74,    -1,    76,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
-    72,    73,    74,    -1,    76,     6,     7,    -1,     9,    10,
-    -1,    -1,    -1,    14,    -1,    16,    -1,    18,    19,    -1,
-    -1,    22,    23,     6,     7,    -1,     9,    10,    -1,    -1,
-    -1,    14,    -1,    16,    -1,    18,    19,    -1,    -1,    22,
+    -1,    -1,    71,    72,    73,    74,    75,     4,    77,     6,
+    7,    -1,     9,    10,    11,    -1,    13,    14,    -1,    16,
+    -1,    18,    19,    -1,    -1,    22,    23,     4,    -1,     6,
+    7,    -1,     9,    10,    11,    -1,    13,    14,    -1,    16,
+    -1,    18,    19,    -1,    -1,    22,    23,     4,    -1,     6,
+    7,    -1,     9,    10,    11,    -1,    13,    14,    -1,    16,
+    17,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
+    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
+    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,     4,
+    77,     6,     7,    -1,     9,    10,    11,    -1,    13,    14,
+    -1,    16,    -1,    18,    19,    -1,    -1,    22,    23,     4,
+    -1,     6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,
+    -1,    16,    17,    18,    -1,    -1,    -1,    22,    23,     4,
+    -1,     6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,
+    -1,    16,    -1,    18,    19,    -1,    -1,    22,    23,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,     4,    77,     6,     7,    -1,     9,    10,    11,    -1,
+    13,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
     23,     6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,
-    -1,    16,    17,    18,    -1,    -1,    -1,    22,    23,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    71,    72,    73,    74,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-    73,    74,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,
-    -1,    76,     6,     7,    -1,     9,    10,    -1,    -1,    -1,
-    14,    -1,    16,    -1,    18,    19,    -1,    -1,    22,    23,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,
-    16,    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,
-    -1,     9,    10,    11,    12,    -1,    14,    15,    16,    -1,
-    18,    -1,    -1,    -1,    22,    23,    70,    71,    72,    73,
-    74,    -1,    76,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-    -1,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
+    -1,    16,    17,    18,    -1,    -1,    -1,    22,    23,     6,
+    7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,
+    -1,    18,    19,    -1,    -1,    22,    23,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,
+    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
+    77,     6,     7,    -1,     9,    10,    -1,    -1,    -1,    14,
+    -1,    16,    -1,    18,    19,    -1,    -1,    22,    23,     6,
+    7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,
+    17,    18,    -1,    -1,    -1,    22,    23,     6,     7,    -1,
+    9,    10,    -1,    -1,    -1,    14,    -1,    16,    -1,    18,
+    19,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
+    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,    -1,    77,     6,
+    7,    -1,     9,    10,    -1,    -1,    -1,    14,    -1,    16,
+    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,    -1,
+    9,    10,    11,    12,    -1,    14,    15,    16,    -1,    18,
+    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
+    67,    68,    69,    -1,    71,    72,    73,    74,    75,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    72,    73,    74,     6,     7,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,     6,     7,    -1,
     9,    10,    11,    12,    -1,    14,    -1,    16,    -1,    18,
     19,    -1,    -1,    22,    23,     6,     7,    -1,     9,    10,
     11,    12,    -1,    14,    -1,    16,    -1,    18,    -1,    -1,
     -1,    22,    23,     6,     7,    -1,     9,    10,    -1,    12,
     -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
     23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    71,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    72,
-    73,    74,     6,     7,    -1,     9,    10,    -1,    12,    -1,
-    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,
-    6,     7,    -1,     9,    10,    -1,    12,    -1,    14,    -1,
-    16,    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,
-    -1,     9,    10,    -1,    12,    -1,    14,    -1,    16,    -1,
-    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
-    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    72,    73,    74,     6,     7,    -1,
+    71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    72,
+    73,    74,    75,     6,     7,    -1,     9,    10,    -1,    12,
+    -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
+    23,     6,     7,    -1,     9,    10,    -1,    12,    -1,    14,
+    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,     6,
+    7,    -1,     9,    10,    -1,    12,    -1,    14,    -1,    16,
+    -1,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,
+    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,     6,
+    7,    -1,     9,    10,    -1,    12,    -1,    14,    -1,    16,
+    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,    -1,
     9,    10,    -1,    12,    -1,    14,    -1,    16,    -1,    18,
     -1,    -1,    -1,    22,    23,     6,     7,    -1,     9,    10,
     -1,    12,    -1,    14,    -1,    16,    -1,    18,    -1,    -1,
-    -1,    22,    23,     6,     7,    -1,     9,    10,    -1,    12,
-    -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
-    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    71,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-    73,    74,     6,     7,    -1,     9,    10,    -1,    12,    -1,
-    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,
-    6,     7,    -1,     9,    10,    -1,    12,    -1,    14,    -1,
-    16,    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,
-    -1,     9,    10,    -1,    12,    -1,    14,    -1,    16,    -1,
-    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
-    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    -1,
+    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    71,    72,    73,    74,     6,     7,    -1,
-    9,    10,    -1,    12,    -1,    14,    -1,    16,    -1,    18,
-    -1,    -1,    -1,    22,    23,     6,     7,    -1,     9,    10,
+    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    71,    72,    73,    74,    75,     6,     7,    -1,     9,    10,
     -1,    12,    -1,    14,    -1,    16,    -1,    18,    -1,    -1,
     -1,    22,    23,     6,     7,    -1,     9,    10,    -1,    12,
     -1,    14,    -1,    16,    -1,    18,    -1,    -1,    -1,    22,
-    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    71,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
-    73,    74,     6,     7,    -1,     9,    10,    -1,    -1,    -1,
-    14,    -1,    16,     4,    18,    -1,    -1,     8,    22,    23,
-    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-    41,    42,    43,    44,    45,    46,    47,    -1,    -1,    50,
-    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
-    74,     4,    -1,    -1,    -1,     8,    -1,    -1,    11,    12,
-    13,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,     8,    -1,    50,    -1,    12,
-    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,     8,    -1,    -1,    11,
-    12,    -1,    14,    15,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,     8,    -1,    -1,    11,
-    12,    -1,    14,    15,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,     8,    -1,    -1,    -1,
-    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,     8,    -1,    -1,    -1,
-    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,     8,    -1,    -1,    -1,
-    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,    46,    47,     8,    -1,    -1,    -1,
-    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-    42,    43,    44,    45,     8,    -1,    -1,    -1,    12,    -1,
-    14,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-    44,    45,     8,    -1,    -1,    -1,    12,    -1,    14,    -1,
+    23,     6,     7,    -1,     9,    10,    -1,    12,    -1,    14,
+    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,
+    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,     6,     7,    -1,     9,    10,    -1,    12,    -1,    14,
+    -1,    16,    -1,    18,    -1,    -1,    -1,    22,    23,     6,
+    7,    -1,     9,    10,    -1,    12,    -1,    14,    -1,    16,
+    -1,    18,    -1,    -1,    -1,    22,    23,     6,     7,    -1,
+    9,    10,    -1,    12,    -1,    14,    -1,    16,    -1,    18,
+    -1,    -1,    -1,    22,    23,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,     6,     7,    -1,
+    9,    10,    -1,    -1,    -1,    14,    -1,    16,     4,    18,
+    -1,    -1,     8,    22,    23,    11,    12,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    71,    72,    73,    74,    75,     4,    -1,    -1,
+    -1,     8,    -1,    -1,    11,    12,    13,    14,    -1,    -1,
+    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,     8,    -1,    50,    -1,    12,    -1,    14,    -1,    -1,
+    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,     8,    -1,    -1,    11,    12,    -1,    14,    15,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     8,    -1,    -1,    11,    12,    -1,    14,    15,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     8,    -1,    -1,    -1,    12,    -1,    14,    -1,
     -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-    36,    37,    38,    39,    40,    41,    42,    43,     8,    -1,
-    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     8,    -1,    -1,    -1,    12,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     8,    -1,    -1,    -1,    12,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     8,    -1,    -1,    -1,    12,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+    8,    -1,    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,
+    -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+    38,    39,    40,    41,    42,    43,    44,    45,     8,    -1,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
     20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
     30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
     40,    41,    42,    43,     8,    -1,    -1,    -1,    -1,    -1,
@@ -1735,10 +1751,9 @@ static const yytype_int16 yycheck[] =
     8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,
     -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
     28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,     8,    -1,    -1,    -1,
-    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37
+    8,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,
+    -1,    -1,    20,    21,    -1,    -1,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    36,    37
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1747,114 +1762,114 @@ static const yytype_uint8 yystos[] =
 {
     0,     1,     4,     6,     7,     9,    10,    11,    13,    14,
     16,    18,    22,    23,    49,    54,    55,    58,    60,    61,
-    62,    63,    65,    66,    67,    69,    70,    71,    72,    73,
-    74,    76,    86,    87,    88,    89,    90,    91,    93,    94,
-    96,   103,   105,   109,   111,   112,   118,   119,   120,   121,
-    128,   129,   136,   140,   143,   145,    87,    16,    71,    93,
-    109,    93,   109,   110,     4,    17,    76,    93,   109,   113,
-    115,   116,     4,    19,   113,   116,    93,   109,    93,   109,
-    93,   102,   109,    16,    71,    16,    71,    58,    14,    71,
-    102,     4,    11,    13,    87,   144,    93,   109,     6,     7,
-    10,    14,    18,    70,    71,    72,    73,    74,    75,    92,
-    0,    90,     4,    11,    13,     4,    76,    89,    92,     8,
+    62,    63,    65,    66,    67,    69,    71,    72,    73,    74,
+    75,    77,    87,    88,    89,    90,    91,    92,    94,    95,
+    97,   104,   106,   110,   112,   113,   119,   120,   121,   122,
+    129,   130,   137,   141,   144,   146,    88,    16,    72,    94,
+    110,    94,   110,   111,     4,    17,    77,    94,   110,   114,
+    116,   117,     4,    19,   114,   117,    94,   110,    94,   110,
+    94,   103,   110,    16,    72,    16,    72,    58,    14,    72,
+    103,     4,    11,    13,    88,   145,    94,   110,     6,     7,
+    10,    14,    18,    71,    72,    73,    74,    75,    76,    93,
+    0,    91,     4,    11,    13,     4,    77,    90,    93,     8,
     12,    14,    20,    21,    22,    23,    24,    25,    26,    27,
     28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
     38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,   104,   106,   107,   108,     8,    14,    20,    21,    36,
-    37,   104,   106,   108,    48,    93,   109,   131,   116,    14,
+    48,   105,   107,   108,   109,     8,    14,    20,    21,    36,
+    37,   105,   107,   109,    48,    94,   110,   132,   117,    14,
     20,    14,    20,    11,    15,    11,    15,    11,    15,    17,
-    113,   116,    17,   115,   116,     4,    11,    13,    17,    76,
-    93,   109,   114,   117,    19,   113,   116,    19,   116,    19,
-    4,    11,    13,    50,   124,   125,    17,    71,    97,    99,
-    14,    48,    98,    17,    97,    48,    98,    16,    71,    71,
-    48,     4,    11,    13,    50,    64,    76,   142,    87,    87,
-    87,    53,    68,    11,    12,    15,    71,    93,    95,   109,
-    118,    19,    95,    20,    76,    89,    89,    93,   109,    95,
+    114,   117,    17,   116,   117,     4,    11,    13,    17,    77,
+    94,   110,   115,   118,    19,   114,   117,    19,   117,    19,
+    4,    11,    13,    50,   125,   126,    17,    72,    98,   100,
+    14,    48,    99,    17,    98,    48,    99,    16,    72,    72,
+    48,     4,    11,    13,    50,    64,    77,   143,    88,    88,
+    88,    53,    68,    11,    12,    15,    72,    94,    96,   110,
+    119,    19,    96,    20,    77,    90,    90,    94,   110,    96,
     49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
     59,    60,    61,    62,    63,    64,    65,    67,    68,    69,
-    93,   109,   148,    93,   109,    93,   109,    93,   109,    93,
-    109,    93,   109,    93,   109,    93,   109,    93,   109,    93,
-    109,    93,   109,    93,   109,    93,   109,    93,   109,    93,
-    109,    93,   109,    93,   109,    12,    93,   109,    12,    93,
-    109,    12,    93,   109,    12,    93,   109,    12,    93,   109,
-    12,    93,   109,    12,    93,   109,    12,    93,   109,    12,
-    93,   109,    12,    93,   109,    12,    93,   109,   145,    12,
-    95,    14,    71,    93,   148,    93,   109,    93,   109,    12,
-    93,   109,   145,     4,    11,    13,    76,   132,    17,    95,
-    93,   109,   148,    95,    71,    93,   148,    93,   109,    93,
-    109,    93,   109,    17,   116,    17,    17,     4,    13,    11,
-    93,   109,   114,    19,   116,    19,    19,     4,     4,   124,
-    50,    87,   122,    48,    17,    11,    15,    99,    71,     4,
-    11,    13,    76,   100,   147,    48,    17,    71,   100,    17,
-    97,    48,    98,    48,    93,   109,   137,     4,     4,     4,
-    11,    13,     4,    11,    13,     4,    87,   141,   144,    12,
-    93,   109,   118,    11,    15,    19,    71,    89,    15,    93,
-    109,    15,    71,    93,     4,     4,   132,    56,    76,   133,
-    146,    15,    15,    17,    19,     4,    51,    52,    53,   126,
-    127,    71,    48,    71,    15,    98,     4,     4,     4,    87,
-    101,    71,    48,    98,   101,    48,    17,    71,   100,   137,
-    4,    11,    13,    64,   138,     4,     4,     4,     4,    53,
-    53,    12,    93,   109,   118,   133,    93,   109,     4,    53,
-    56,    57,   126,   130,    56,    76,     4,    11,    13,   102,
-    87,   123,    53,    98,    71,   100,    53,    59,    98,    71,
-    100,    53,    59,    71,    48,    98,   101,    15,     4,     4,
-    4,    87,   139,    53,   130,     4,    11,    13,    50,   135,
-    135,    93,   109,     4,    11,    13,   123,    93,   109,     4,
-    4,     4,   125,    53,   100,    98,   101,   100,    98,   101,
-    98,    71,   100,    53,    59,   138,    53,   123,     4,     4,
-    4,    11,    13,    87,   134,   134,   135,   135,     4,     4,
-    53,   135,   135,   122,   101,   100,    53,    59,   101,   100,
-    53,    59,   100,    98,   101,   139,    53,     4,     4,   134,
-    134,   134,   134,   126,   127,    53,    59,   101,    53,    59,
-    101,   101,   100,    53,    59,    53,   123,    53,    59,    53,
-    59,    53,    59,   101,    53,    59
+    94,   110,   149,    94,   110,    94,   110,    94,   110,    94,
+    110,    94,   110,    94,   110,    94,   110,    94,   110,    94,
+    110,    94,   110,    94,   110,    94,   110,    94,   110,    94,
+    110,    94,   110,    94,   110,    12,    94,   110,    12,    94,
+    110,    12,    94,   110,    12,    94,   110,    12,    94,   110,
+    12,    94,   110,    12,    94,   110,    12,    94,   110,    12,
+    94,   110,    12,    94,   110,    12,    94,   110,   146,    12,
+    96,    14,    72,    94,   149,    94,   110,    94,   110,    12,
+    94,   110,   146,     4,    11,    13,    77,   133,    17,    96,
+    94,   110,   149,    96,    72,    94,   149,    94,   110,    94,
+    110,    94,   110,    17,   117,    17,    17,     4,    13,    11,
+    94,   110,   115,    19,   117,    19,    19,     4,     4,   125,
+    50,    88,   123,    48,    17,    11,    15,   100,    72,     4,
+    11,    13,    77,   101,   148,    48,    17,    72,   101,    17,
+    98,    48,    99,    48,    94,   110,   138,     4,     4,     4,
+    11,    13,     4,    11,    13,     4,    88,   142,   145,    12,
+    94,   110,   119,    11,    15,    19,    72,    90,    15,    94,
+    110,    15,    72,    94,     4,     4,   133,    56,    77,   134,
+    147,    15,    15,    17,    19,     4,    51,    52,    53,   127,
+    128,    72,    48,    72,    15,    99,     4,     4,     4,    88,
+    102,    72,    48,    99,   102,    48,    17,    72,   101,   138,
+    4,    11,    13,    64,   139,     4,     4,     4,     4,    53,
+    53,    12,    94,   110,   119,   134,    94,   110,     4,    53,
+    56,    57,   127,   131,    56,    77,     4,    11,    13,   103,
+    88,   124,    53,    99,    72,   101,    53,    59,    99,    72,
+    101,    53,    59,    72,    48,    99,   102,    15,     4,     4,
+    4,    88,   140,    53,   131,     4,    11,    13,    50,   136,
+    136,    94,   110,     4,    11,    13,   124,    94,   110,     4,
+    4,     4,   126,    53,   101,    99,   102,   101,    99,   102,
+    99,    72,   101,    53,    59,   139,    53,   124,     4,     4,
+    4,    11,    13,    88,   135,   135,   136,   136,     4,     4,
+    53,   136,   136,   123,   102,   101,    53,    59,   102,   101,
+    53,    59,   101,    99,   102,   140,    53,     4,     4,   135,
+    135,   135,   135,   127,   128,    53,    59,   102,    53,    59,
+    102,   102,   101,    53,    59,    53,   124,    53,    59,    53,
+    59,    53,    59,   102,    53,    59
 };
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-    0,    85,    86,    86,    86,    86,    87,    87,    87,    87,
-    87,    88,    88,    88,    88,    89,    89,    89,    89,    89,
-    89,    90,    90,    90,    90,    90,    90,    90,    90,    90,
-    90,    90,    90,    90,    90,    90,    91,    91,    92,    92,
-    92,    92,    92,    92,    92,    92,    92,    92,    93,    93,
-    94,    94,    94,    94,    95,    95,    95,    95,    95,    95,
-    95,    95,    95,    95,    95,    95,    95,    95,    96,    96,
-    96,    96,    96,    96,    96,    96,    96,    96,    96,    96,
-    96,    96,    96,    96,    96,    96,    96,    96,    96,    96,
-    96,    96,    97,    98,    98,    98,    99,    99,   100,   100,
-    100,   100,   100,   101,   101,   102,   102,   103,   103,   104,
-    104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
-    104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
-    104,   104,   104,   104,   104,   104,   104,   104,   104,   105,
+    0,    86,    87,    87,    87,    87,    88,    88,    88,    88,
+    88,    89,    89,    89,    89,    90,    90,    90,    90,    90,
+    90,    91,    91,    91,    91,    91,    91,    91,    91,    91,
+    91,    91,    91,    91,    91,    91,    92,    92,    93,    93,
+    93,    93,    93,    93,    93,    93,    93,    93,    94,    94,
+    95,    95,    95,    95,    96,    96,    96,    96,    96,    96,
+    96,    96,    96,    96,    96,    96,    96,    96,    97,    97,
+    97,    97,    97,    97,    97,    97,    97,    97,    97,    97,
+    97,    97,    97,    97,    97,    97,    97,    97,    97,    97,
+    97,    97,    98,    99,    99,    99,   100,   100,   101,   101,
+    101,   101,   101,   102,   102,   103,   103,   104,   104,   105,
     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
-    105,   105,   105,   105,   105,   105,   105,   106,   106,   106,
-    106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+    105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+    105,   105,   105,   105,   105,   105,   105,   105,   105,   106,
     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-    106,   106,   106,   106,   106,   107,   107,   108,   108,   108,
-    109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
-    109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
-    109,   109,   109,   109,   109,   109,   110,   110,   110,   110,
-    110,   110,   111,   111,   111,   111,   111,   111,   111,   111,
-    112,   112,   112,   112,   112,   112,   112,   112,   113,   113,
-    114,   114,   114,   114,   115,   115,   116,   116,   116,   116,
-    116,   116,   116,   116,   117,   117,   118,   118,   118,   118,
-    118,   118,   118,   118,   119,   119,   119,   119,   119,   119,
-    119,   119,   119,   119,   120,   121,   121,   121,   122,   122,
-    123,   123,   124,   124,   124,   124,   124,   125,   125,   125,
-    125,   125,   125,   126,   126,   126,   126,   126,   126,   127,
-    127,   127,   128,   128,   128,   128,   129,   129,   130,   130,
-    130,   130,   130,   130,   130,   131,   131,   132,   132,   132,
-    132,   132,   133,   133,   133,   133,   133,   133,   134,   134,
-    135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
-    135,   135,   136,   136,   137,   137,   138,   138,   138,   138,
-    138,   138,   138,   138,   139,   139,   140,   141,   141,   142,
-    142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
-    142,   142,   142,   142,   142,   142,   142,   143,   143,   144,
-    144,   144,   144,   144,   144,   145,   145,   145,   146,   146,
-    147,   147,   148,   148,   148,   148,   148,   148,   148,   148,
-    148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-    148,   148
+    106,   106,   106,   106,   106,   106,   106,   107,   107,   107,
+    107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
+    107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
+    107,   107,   107,   107,   107,   108,   108,   109,   109,   109,
+    110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+    110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+    110,   110,   110,   110,   110,   110,   111,   111,   111,   111,
+    111,   111,   112,   112,   112,   112,   112,   112,   112,   112,
+    113,   113,   113,   113,   113,   113,   113,   113,   114,   114,
+    115,   115,   115,   115,   116,   116,   117,   117,   117,   117,
+    117,   117,   117,   117,   118,   118,   119,   119,   119,   119,
+    119,   119,   119,   119,   120,   120,   120,   120,   120,   120,
+    120,   120,   120,   120,   121,   122,   122,   122,   123,   123,
+    124,   124,   125,   125,   125,   125,   125,   126,   126,   126,
+    126,   126,   126,   127,   127,   127,   127,   127,   127,   128,
+    128,   128,   129,   129,   129,   129,   130,   130,   131,   131,
+    131,   131,   131,   131,   131,   132,   132,   133,   133,   133,
+    133,   133,   134,   134,   134,   134,   134,   134,   135,   135,
+    136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+    136,   136,   137,   137,   138,   138,   139,   139,   139,   139,
+    139,   139,   139,   139,   140,   140,   141,   142,   142,   143,
+    143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+    143,   143,   143,   143,   143,   143,   143,   144,   144,   145,
+    145,   145,   145,   145,   145,   146,   146,   146,   147,   147,
+    148,   148,   149,   149,   149,   149,   149,   149,   149,   149,
+    149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+    149,   149
 };
 
 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -2235,7 +2250,7 @@ yytnamerr (char *yyres, const char *yystr)
                     {
                         goto do_not_strip_quotes;
                     }
-                    /* Fall through.  */
+                /* Fall through.  */
                 default:
                     if (yyres)
                     {
@@ -2424,7 +2439,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
     YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     switch (yytype)
     {
-        case 70: /* "string"  */
+        case 71: /* "string"  */
 
         {
             delete ((*yyvaluep).str);
@@ -2432,7 +2447,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 71: /* "identifier"  */
+        case 72: /* "identifier"  */
 
         {
             delete ((*yyvaluep).str);
@@ -2440,25 +2455,25 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 72: /* "integer"  */
+        case 73: /* "integer"  */
 
         { }
 
         break;
 
-        case 73: /* "float"  */
+        case 74: /* "float"  */
 
         { }
 
         break;
 
-        case 74: /* "number"  */
+        case 75: /* "number"  */
 
         { }
 
         break;
 
-        case 75: /* "path"  */
+        case 76: /* "path"  */
 
         {
             delete ((*yyvaluep).path);
@@ -2466,7 +2481,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 76: /* "line comment"  */
+        case 77: /* "line comment"  */
 
         {
             delete ((*yyvaluep).comment);
@@ -2474,7 +2489,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 77: /* "block comment"  */
+        case 78: /* "block comment"  */
 
         {
             delete ((*yyvaluep).comment);
@@ -2482,7 +2497,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 87: /* expressions  */
+        case 88: /* expressions  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2490,7 +2505,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 88: /* recursiveExpression  */
+        case 89: /* recursiveExpression  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_exp))
@@ -2502,7 +2517,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 89: /* expressionLineBreak  */
+        case 90: /* expressionLineBreak  */
 
         {
             delete ((*yyvaluep).mute);
@@ -2510,7 +2525,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 90: /* expression  */
+        case 91: /* expression  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2518,7 +2533,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 91: /* implicitFunctionCall  */
+        case 92: /* implicitFunctionCall  */
 
         {
             delete ((*yyvaluep).t_call_exp);
@@ -2526,7 +2541,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 92: /* implicitCallable  */
+        case 93: /* implicitCallable  */
 
         {
             delete ((*yyvaluep).t_string_exp);
@@ -2534,7 +2549,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 93: /* functionCall  */
+        case 94: /* functionCall  */
 
         {
             delete ((*yyvaluep).t_call_exp);
@@ -2542,7 +2557,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 94: /* simpleFunctionCall  */
+        case 95: /* simpleFunctionCall  */
 
         {
             delete ((*yyvaluep).t_call_exp);
@@ -2550,7 +2565,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 95: /* functionArgs  */
+        case 96: /* functionArgs  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_exp))
@@ -2562,7 +2577,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 96: /* functionDeclaration  */
+        case 97: /* functionDeclaration  */
 
         {
             delete ((*yyvaluep).t_function_dec);
@@ -2570,7 +2585,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 97: /* functionDeclarationReturns  */
+        case 98: /* functionDeclarationReturns  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_var))
@@ -2582,7 +2597,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 98: /* functionDeclarationArguments  */
+        case 99: /* functionDeclarationArguments  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_var))
@@ -2594,7 +2609,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 99: /* idList  */
+        case 100: /* idList  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_var))
@@ -2606,7 +2621,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 101: /* functionBody  */
+        case 102: /* functionBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2614,7 +2629,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 102: /* condition  */
+        case 103: /* condition  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2622,7 +2637,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 103: /* comparison  */
+        case 104: /* comparison  */
 
         {
             delete ((*yyvaluep).t_op_exp);
@@ -2630,7 +2645,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 104: /* rightComparable  */
+        case 105: /* rightComparable  */
 
         {
             delete ((*yyvaluep).t_op_exp);
@@ -2638,7 +2653,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 105: /* operation  */
+        case 106: /* operation  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2646,7 +2661,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 106: /* rightOperand  */
+        case 107: /* rightOperand  */
 
         {
             delete ((*yyvaluep).t_op_exp);
@@ -2654,7 +2669,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 107: /* listableBegin  */
+        case 108: /* listableBegin  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2662,7 +2677,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 108: /* listableEnd  */
+        case 109: /* listableEnd  */
 
         {
             delete ((*yyvaluep).t_implicit_list);
@@ -2670,7 +2685,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 109: /* variable  */
+        case 110: /* variable  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2678,7 +2693,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 110: /* variableFields  */
+        case 111: /* variableFields  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_exp))
@@ -2690,7 +2705,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 111: /* cell  */
+        case 112: /* cell  */
 
         {
             delete ((*yyvaluep).t_cell_exp);
@@ -2698,7 +2713,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 112: /* matrix  */
+        case 113: /* matrix  */
 
         {
             delete ((*yyvaluep).t_matrix_exp);
@@ -2706,7 +2721,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 113: /* matrixOrCellLines  */
+        case 114: /* matrixOrCellLines  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_mline))
@@ -2718,7 +2733,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 115: /* matrixOrCellLine  */
+        case 116: /* matrixOrCellLine  */
 
         {
             delete ((*yyvaluep).t_matrixline_exp);
@@ -2726,7 +2741,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 116: /* matrixOrCellColumns  */
+        case 117: /* matrixOrCellColumns  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_exp))
@@ -2738,7 +2753,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 118: /* variableDeclaration  */
+        case 119: /* variableDeclaration  */
 
         {
             delete ((*yyvaluep).t_assign_exp);
@@ -2746,7 +2761,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 119: /* assignable  */
+        case 120: /* assignable  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2754,7 +2769,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 120: /* multipleResults  */
+        case 121: /* multipleResults  */
 
         {
             delete ((*yyvaluep).t_assignlist_exp);
@@ -2762,7 +2777,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 121: /* ifControl  */
+        case 122: /* ifControl  */
 
         {
             delete ((*yyvaluep).t_if_exp);
@@ -2770,7 +2785,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 122: /* thenBody  */
+        case 123: /* thenBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2778,7 +2793,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 123: /* elseBody  */
+        case 124: /* elseBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2786,7 +2801,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 127: /* elseIfControl  */
+        case 128: /* elseIfControl  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2794,7 +2809,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 128: /* selectControl  */
+        case 129: /* selectControl  */
 
         {
             delete ((*yyvaluep).t_select_exp);
@@ -2802,7 +2817,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 131: /* selectable  */
+        case 132: /* selectable  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2810,7 +2825,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 133: /* casesControl  */
+        case 134: /* casesControl  */
 
         {
             for (auto e : * ((*yyvaluep).t_list_case))
@@ -2822,7 +2837,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 134: /* caseBody  */
+        case 135: /* caseBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2830,7 +2845,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 136: /* forControl  */
+        case 137: /* forControl  */
 
         {
             delete ((*yyvaluep).t_for_exp);
@@ -2838,7 +2853,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 137: /* forIterator  */
+        case 138: /* forIterator  */
 
         {
             delete ((*yyvaluep).t_exp);
@@ -2846,7 +2861,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 139: /* forBody  */
+        case 140: /* forBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2854,7 +2869,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 140: /* whileControl  */
+        case 141: /* whileControl  */
 
         {
             delete ((*yyvaluep).t_while_exp);
@@ -2862,7 +2877,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 141: /* whileBody  */
+        case 142: /* whileBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2870,7 +2885,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 143: /* tryControl  */
+        case 144: /* tryControl  */
 
         {
             delete ((*yyvaluep).t_try_exp);
@@ -2878,7 +2893,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 144: /* catchBody  */
+        case 145: /* catchBody  */
 
         {
             delete ((*yyvaluep).t_seq_exp);
@@ -2886,7 +2901,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 145: /* returnControl  */
+        case 146: /* returnControl  */
 
         {
             delete ((*yyvaluep).t_return_exp);
@@ -2894,7 +2909,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
 
         break;
 
-        case 148: /* keywords  */
+        case 149: /* keywords  */
 
         {
             delete ((*yyvaluep).t_simple_var);
@@ -7161,9 +7176,20 @@ yyreturn:
 }
 
 
+
+bool endsWith(const std::string & str, const std::string & end)
+{
+    if (end.size() > str.size())
+    {
+        return false;
+    }
+
+    return std::equal(end.rbegin(), end.rend(), str.rbegin());
+}
+
 void yyerror(std::string msg)
 {
-    if (!ParserSingleInstance::isStrictMode()
+    if (!endsWith(msg, "FLEX_ERROR") && !ParserSingleInstance::isStrictMode()
             || ParserSingleInstance::getExitStatus() == Parser::Succeded)
     {
         wchar_t* pstMsg = to_wide_string(msg.c_str());
index 88d9ec2..6050077 100644 (file)
@@ -1889,12 +1889,13 @@ extern "C"
 static int comment_level = 0;
 static int paren_level = 0;
 static int last_token = 0;
-static int exit_status = PARSE_ERROR;
 static std::string current_file;
 static std::string program_name;
 
 static std::string pstBuffer;
 
+extern void yyerror(std::string);
+
 #define YY_USER_ACTION                          \
  yylloc.first_column = yylloc.last_column;yylloc.last_column += yyleng;
 //yylloc.last_column += yyleng;
@@ -2499,11 +2500,12 @@ do_action:      /* This label is used only to access EOF actions. */
                         wchar_t *pwText = to_wide_string(yytext);
                         if (yytext != NULL && pwText == NULL)
                         {
-                            std::string str = "can not convert'";
+                            std::string str = "Can\'t convert \'";
                             str += yytext;
-                            str += "' to UTF-8";
-                            exit_status = SCAN_ERROR;
-                            scan_error("can not convert string to UTF-8");
+                            str += "\' to UTF-8";
+                            BEGIN(INITIAL);
+                            yyerror(str);
+                            return scan_throw(FLEX_ERROR);
                         }
                         yylval.str = new std::wstring(pwText);
                         FREE(pwText);
@@ -2855,11 +2857,12 @@ do_action:      /* This label is used only to access EOF actions. */
                         wchar_t *pwText = to_wide_string(yytext);
                         if (yytext != NULL && pwText == NULL)
                         {
-                            std::string str = "can not convert'";
+                            std::string str = "Can\'t convert \'";
                             str += yytext;
-                            str += "' to UTF-8";
-                            exit_status = SCAN_ERROR;
-                            scan_error("can not convert string to UTF-8");
+                            str += "\' to UTF-8";
+                            BEGIN(INITIAL);
+                            yyerror(str);
+                            return scan_throw(FLEX_ERROR);
                         }
                         yylval.str = new std::wstring(pwText);
                         FREE(pwText);
@@ -2971,11 +2974,12 @@ do_action:      /* This label is used only to access EOF actions. */
                 case 85:
                     YY_RULE_SETUP
                     {
-                        std::string str = "unexpected token '";
+                        std::string str = "Unexpected token \'";
                         str += yytext;
-                        str += "'";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
+                        str += "\'";
+                        BEGIN(INITIAL);
+                        yyerror(str);
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
 
@@ -3093,11 +3097,12 @@ do_action:      /* This label is used only to access EOF actions. */
                 case 99:
                     YY_RULE_SETUP
                     {
-                        std::string str = "unexpected token '";
+                        std::string str = "Unexpected token \'";
                         str += yytext;
-                        str += "' within a matrix.";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
+                        str += "\' within a matrix.";
+                        BEGIN(INITIAL);
+                        yyerror(str);
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
                 case 100:
@@ -3166,11 +3171,12 @@ do_action:      /* This label is used only to access EOF actions. */
                 case 106:
                     YY_RULE_SETUP
                     {
-                        std::string str = "unexpected token '";
+                        std::string str = "Unexpected token \'";
                         str += yytext;
-                        str += "' after line break with .. or ...";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
+                        str += "\' after line break with .. or ...";
+                        BEGIN(INITIAL);
+                        yyerror(str);
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
 
@@ -3200,11 +3206,13 @@ do_action:      /* This label is used only to access EOF actions. */
                             //std::wcerr << L"pwstBuffer = W{" << pwstBuffer << L"}" << std::endl;
                             if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
                             {
-                                std::string str = "can not convert'";
+                                pstBuffer.clear();
+                                std::string str = "Can\'t convert \'";
                                 str += pstBuffer.c_str();
-                                str += "' to UTF-8";
-                                exit_status = SCAN_ERROR;
-                                scan_error("can not convert string to UTF-8");
+                                str += "\' to UTF-8";
+                                BEGIN(INITIAL);
+                                yyerror(str);
+                                return scan_throw(FLEX_ERROR);
                             }
                             yylval.comment = new std::wstring(pwstBuffer);
                             pstBuffer.clear();
@@ -3223,11 +3231,13 @@ do_action:      /* This label is used only to access EOF actions. */
                     wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
                     if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
                     {
-                        std::string str = "can not convert'";
+                        pstBuffer.clear();
+                        std::string str = "Can\'t convert \'";
                         str += pstBuffer.c_str();
-                        str += "' to UTF-8";
-                        exit_status = SCAN_ERROR;
-                        scan_error("can not convert string to UTF-8");
+                        str += "\' to UTF-8";
+                        BEGIN(INITIAL);
+                        yyerror(str);
+                        return scan_throw(FLEX_ERROR);
                     }
                     yylval.comment = new std::wstring(pwstBuffer);
                     pstBuffer.clear();
@@ -3286,7 +3296,6 @@ do_action:        /* This label is used only to access EOF actions. */
                 {
                     yy_pop_state();
                     //    std::string str = "unexpected end of file in a comment";
-                    //    exit_status = SCAN_ERROR;
                     //    scan_error(str);
                 }
                 YY_BREAK
@@ -3323,11 +3332,13 @@ do_action:      /* This label is used only to access EOF actions. */
                         wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
                         if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
                         {
-                            std::string str = "can not convert'";
+                            pstBuffer.clear();
+                            std::string str = "Can\'t convert \'";
                             str += pstBuffer.c_str();
-                            str += "' to UTF-8";
-                            exit_status = SCAN_ERROR;
-                            scan_error("can not convert string to UTF-8");
+                            str += "\' to UTF-8";
+                            BEGIN(INITIAL);
+                            yyerror(str);
+                            return scan_throw(FLEX_ERROR);
                         }
                         yylval.str = new std::wstring(pwstBuffer);
                         pstBuffer.clear();
@@ -3339,9 +3350,9 @@ do_action:        /* This label is used only to access EOF actions. */
                     YY_RULE_SETUP
                     {
                         pstBuffer.clear();
-                        std::string str = "Heterogeneous string detected, starting with ' and ending with \".";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
+                        BEGIN(INITIAL);
+                        yyerror("Heterogeneous string detected, starting with \' and ending with \".");
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
                 case 120:
@@ -3356,19 +3367,19 @@ do_action:      /* This label is used only to access EOF actions. */
                     YY_RULE_SETUP
                     {
                         pstBuffer.clear();
-                        std::string str = "unexpected end of line in a string.";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
                         yylloc.last_line += 1;
                         yylloc.last_column = 1;
+                        BEGIN(INITIAL);
+                        yyerror("Unexpected end of line in a string.");
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
                 case YY_STATE_EOF(SIMPLESTRING):
                 {
                     pstBuffer.clear();
-                    std::string str = "unexpected end of file in a string.";
-                    exit_status = SCAN_ERROR;
-                    scan_error(str);
+                    BEGIN(INITIAL);
+                    yyerror("Unexpected end of file in a string.");
+                    return scan_throw(FLEX_ERROR);
                 }
                 YY_BREAK
                 case 122:
@@ -3412,11 +3423,13 @@ do_action:      /* This label is used only to access EOF actions. */
                         wchar_t *pwstBuffer = to_wide_string(pstBuffer.c_str());
                         if (pstBuffer.c_str() != NULL && pwstBuffer == NULL)
                         {
-                            std::string str = "can not convert'";
+                            pstBuffer.clear();
+                            std::string str = "Can\'t convert \'";
                             str += pstBuffer.c_str();
-                            str += "' to UTF-8";
-                            exit_status = SCAN_ERROR;
-                            scan_error("can not convert string to UTF-8");
+                            str += "\' to UTF-8";
+                            BEGIN(INITIAL);
+                            yyerror(str);
+                            return scan_throw(FLEX_ERROR);
                         }
                         yylval.str = new std::wstring(pwstBuffer);
                         pstBuffer.clear();
@@ -3428,9 +3441,9 @@ do_action:        /* This label is used only to access EOF actions. */
                     YY_RULE_SETUP
                     {
                         pstBuffer.clear();
-                        std::string str = "Heterogeneous string detected, starting with \" and ending with '.";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
+                        BEGIN(INITIAL);
+                        yyerror("Heterogeneous string detected, starting with \" and ending with \'.");
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
                 case 130:
@@ -3445,19 +3458,19 @@ do_action:      /* This label is used only to access EOF actions. */
                     YY_RULE_SETUP
                     {
                         pstBuffer.clear();
-                        std::string str = "unexpected end of line in a string";
-                        exit_status = SCAN_ERROR;
-                        scan_error(str);
                         yylloc.last_line += 1;
                         yylloc.last_column = 1;
+                        BEGIN(INITIAL);
+                        yyerror("Unexpected end of line in a string.");
+                        return scan_throw(FLEX_ERROR);
                     }
                     YY_BREAK
                 case YY_STATE_EOF(DOUBLESTRING):
                 {
                     pstBuffer.clear();
-                    std::string str = "unexpected end of file in a string";
-                    exit_status = SCAN_ERROR;
-                    scan_error(str);
+                    BEGIN(INITIAL);
+                    yyerror("Unexpected end of file in a string.");
+                    return scan_throw(FLEX_ERROR);
                 }
                 YY_BREAK
                 case 132:
@@ -4735,19 +4748,6 @@ void scan_step()
     yylloc.first_column = yylloc.last_column;
 }
 
-void scan_error(std::string msg)
-{
-    wchar_t* pstMsg = to_wide_string(msg.c_str());
-
-    //std::wcerr << pstMsg << std::endl;
-    ParserSingleInstance::PrintError(pstMsg);
-    ParserSingleInstance::setExitStatus(Parser::Failed);
-    ParserSingleInstance::resetControlStatus();
-    FREE(pstMsg);
-    last_token = YYEOF;
-    BEGIN(INITIAL);
-}
-
 /*
 ** convert floating numbers to C standard
 ** 1.2d-3 -> 1.2e-3