compiler/libec: Added grammar rule for __builtin_offset
[sdk] / compiler / libec / src / lexer.ec
index 338ef42..f520ef6 100644 (file)
@@ -283,100 +283,108 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 166
-#define YY_END_OF_BUFFER 167
-static yyconst short int yy_accept[661] =
+#define YY_NUM_RULES 178
+#define YY_END_OF_BUFFER 179
+static yyconst short int yy_accept[729] =
     {   0,
-      106,  106,  167,  165,  164,  163,  162,  149,  165,    1,
-      161,  155,  148,  165,  143,  144,  153,  152,  140,  151,
-      147,  154,  109,  109,  141,  137,  156,  142,  157,  160,
-      106,  106,  145,  146,  158,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  138,  159,  139,  150,  136,    0,  114,
-        0,  122,  139,  131,  123,    0,    0,  120,  128,  118,
-      129,  119,  130,    0,  112,    2,    3,  121,  113,  108,
-        0,  109,    0,  109,  106,  146,  138,  145,  127,  133,
-      135,  134,  126,    0,  106,    0,    0,    0,  124,  106,
-
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,   11,  106,  106,  106,  106,
-      106,  106,  106,  106,   19,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  125,  132,
-      110,  115,    0,  112,  112,    0,  113,  108,    0,  111,
-      107,  106,  117,  116,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,   86,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,   17,
-
-       44,  106,  106,  106,  106,   20,  106,  106,  106,   50,
-      106,  106,  106,  106,  106,  106,   43,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,    0,  112,    0,  112,
-        0,  113,  111,  107,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,    4,  106,    6,    7,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,   13,   14,  106,  106,  106,   18,  106,  106,  106,
-      106,  106,   22,  106,   51,  106,  106,  106,  106,  106,
-
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,   21,  106,  106,  106,   37,  106,  106,  106,
-        0,  112,  106,   87,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,    5,   46,    8,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,   16,  106,  106,
-      106,   57,   45,  106,  106,  106,  106,  106,   52,  106,
-       25,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,   35,  106,  106,  106,   89,   41,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,   55,   49,  106,  106,   12,   15,  106,
-       54,   82,   66,  106,  106,  106,   78,  106,   53,   24,
-       26,   29,   31,  106,  106,   32,  106,   33,  106,  106,
-      106,  106,  106,  106,  106,  106,   85,  106,  106,   70,
-       76,  106,  106,  106,   56,  106,  106,  106,  106,  106,
-      106,   64,  106,  106,  106,  106,  106,  106,  106,  106,
-      103,  104,  102,   10,  106,  106,  106,  106,   79,  106,
-      106,   74,  106,  106,  106,  106,   34,  106,   48,  106,
-      106,  106,  106,  106,  106,  106,   65,  106,   27,  106,
-
-       88,  106,  106,   73,  106,  106,  106,  106,  106,  106,
-        9,  106,  106,  106,  106,  106,   42,   23,  106,  100,
-      106,  106,   36,   38,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,   71,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,   68,   69,  106,  101,  106,  106,
-       47,  106,   92,  106,  106,  106,  106,  106,   63,   75,
-       28,  106,   40,  106,   81,   98,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,   30,   62,  106,    0,
-      106,  106,   72,  106,   84,  106,  106,   95,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,   67,    0,  106,
-
-       77,   39,  106,  106,  106,  106,  106,   91,  106,   90,
-       80,   61,  106,  106,   83,  106,  106,  106,  106,  105,
-      106,  106,  106,  106,  106,   93,  106,   99,  106,  106,
-      106,  106,  106,  106,  106,  106,   59,  106,  106,  106,
-      106,  106,   58,  106,  106,   97,  106,  106,   94,  106,
-      106,  106,  106,  106,  106,  106,   96,  106,   60,    0
+      113,  113,  179,  177,  175,  174,  173,  176,  160,  177,
+        1,  172,  166,  159,  177,  154,  155,  164,  163,  151,
+      162,  158,  165,  119,  119,  152,  148,  167,  153,  168,
+      171,  113,  113,  113,  156,  157,  169,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  149,  170,  150,  161,  147,
+        0,  124,    0,  133,  150,  142,  134,    0,    0,  131,
+      139,  129,  140,  130,  141,    0,  122,    2,    3,  132,
+      123,  118,    0,  119,    0,  119,  113,  157,  149,  156,
+      138,  144,  146,  145,  137,    0,  113,    0,  113,    0,
+
+        0,  135,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,   11,  113,  113,  113,  113,  113,  113,  113,  113,
+       19,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  136,  143,  120,  126,    0,  122,
+      122,    0,  123,  118,    0,  121,    0,  114,  113,  128,
+      127,  113,  113,    0,  125,    0,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,   93,  113,  113,  113,  113,  113,  113,
+
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,   17,   46,  113,  113,  113,  113,   20,
+      113,  113,  113,   52,  113,  113,  113,  113,  113,  113,
+      113,   45,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,    0,  122,    0,  122,    0,  123,  121,  116,  117,
+      114,    0,   62,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,    4,  113,    6,    7,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+
+      113,  113,   13,   14,  113,  113,  113,   18,  113,  113,
+      113,  113,  113,   22,  113,   53,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,   21,  113,  113,  113,   39,  113,
+      113,  113,    0,  122,  116,  116,    0,  116,  116,  117,
+        0,    0,  115,   63,  113,  113,  113,   94,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,    5,   48,    8,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,   16,  113,  113,  113,   59,   47,  113,  113,
+
+      113,  113,  113,   54,  113,  113,   25,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,   37,  113,  113,
+      113,   96,   43,    0,  116,  116,  116,    0,    0,  117,
+      115,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+       57,   51,  113,  113,   12,   15,  113,   56,   89,   73,
+      113,  113,  113,   85,  113,   55,  113,   24,   26,   29,
+       32,  113,  113,   34,  113,   35,  113,  113,  113,  113,
+      113,  113,  113,    0,  116,  113,  113,  113,   92,  113,
+
+      113,   77,   83,  113,  113,  113,   58,  113,  113,  113,
+      113,  113,  113,  113,   71,  113,  113,  113,  113,  113,
+      113,  113,  113,  110,  111,  109,   10,  113,  113,  113,
+      113,   86,  113,  113,  113,   81,  113,  113,  113,  113,
+       36,  113,   50,  113,  113,   64,  113,  113,  113,  113,
+      113,  113,   72,  113,   27,  113,   33,   95,  113,  113,
+       80,  113,  113,  113,  113,  113,  113,    9,  113,  113,
+      113,  113,  113,   44,   23,   66,  113,  107,  113,  113,
+       38,   40,  113,  113,  113,  113,  113,  113,  113,  113,
+      113,  113,   78,  113,  113,  113,  113,  113,  113,  113,
+
+      113,  113,  113,   75,   76,  113,  108,  113,  113,   49,
+      113,   99,   65,  113,  113,  113,  113,  113,   70,   82,
+       28,  113,   42,  113,   88,  105,  113,  113,  113,  113,
+      113,  113,  113,  113,  113,  113,   30,   69,  113,  113,
+        0,  113,  113,   79,  113,   91,  113,  113,  102,  113,
+      113,  113,  113,  113,  113,  113,  113,  113,  113,   74,
+        0,  113,   84,   41,  113,  113,  113,  113,  113,   98,
+      113,   97,   87,   68,  113,  113,  113,   90,  113,  113,
+      113,  113,  112,  113,  113,  113,  113,  113,  113,  100,
+      113,  106,  113,  113,  113,  113,  113,  113,  113,  113,
+
+      113,  113,   61,  113,  113,  113,  113,  113,  113,   60,
+      113,  113,  104,  113,   31,  113,  101,  113,  113,  113,
+      113,  113,  113,  113,  103,  113,   67,    0
     } ;
 
 static yyconst int yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        4,    4,    1,    1,    1,    1,    1,    1,    1,    1,
+        4,    4,    5,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    4,    5,    6,    7,    8,    9,   10,   11,   12,
-       13,   14,   15,   16,   17,   18,   19,   20,   21,   21,
-       21,   22,   21,   23,   21,   21,   21,   24,   25,   26,
-       27,   28,   29,    1,   30,   30,   30,   30,   31,   32,
-       33,   33,   33,   33,   33,   34,   33,   33,   33,   33,
-       33,   33,   33,   33,   35,   33,   33,   36,   33,   33,
-       37,   38,   39,   40,   41,    1,   42,   43,   44,   45,
-
-       46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
-       56,   57,   33,   58,   59,   60,   61,   62,   63,   64,
-       65,   66,   67,   68,   69,   70,    1,    1,    1,    1,
+        1,    4,    6,    7,    8,    9,   10,   11,   12,   13,
+       14,   15,   16,   17,   18,   19,   20,   21,   22,   22,
+       22,   23,   22,   24,   22,   22,   22,   25,   26,   27,
+       28,   29,   30,    1,   31,   32,   33,   31,   34,   35,
+       36,   36,   37,   38,   36,   39,   36,   36,   36,   40,
+       36,   36,   36,   36,   41,   36,   36,   42,   36,   36,
+       43,   44,   45,   46,   47,    1,   48,   49,   50,   51,
+
+       52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
+       62,   63,   36,   64,   65,   66,   67,   68,   69,   70,
+       71,   72,   73,   74,   75,   76,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -393,425 +401,487 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[71] =
+static yyconst int yy_meta[77] =
     {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
-        3,    1,    4,    1,    1,    1,    1,    1,    1,    5,
-        5,    5,    5,    2,    1,    1,    1,    1,    1,    6,
-        6,    6,    7,    7,    7,    7,    1,    1,    1,    1,
-        7,    6,    6,    6,    6,    6,    6,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    1,    1,    1,    1
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        2,    3,    1,    4,    1,    1,    1,    1,    5,    1,
+        6,    6,    6,    6,    2,    1,    1,    1,    1,    1,
+        7,    7,    7,    7,    7,    8,    8,    8,    8,    8,
+        8,    8,    1,    1,    1,    1,    8,    7,    7,    7,
+        7,    7,    7,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    1,    1,    1,    1
     } ;
 
-static yyconst short int yy_base[669] =
+static yyconst short int yy_base[737] =
     {   0,
-        0,    0,  216, 2195, 2195, 2195, 2195,  178,   65, 2195,
-     2195,   45,   64,  158, 2195, 2195,  160,   60, 2195,   61,
-       59,   71,   86,  133,   68, 2195,   75,  156,   66, 2195,
-       73,  104, 2195, 2195,  150,  102,   76,  101,  120,  139,
-      136,  148,  147,  160,  109,  164,  117,  156,  187,  189,
-      202,  199,  211, 2195,   68, 2195, 2195, 2195,  107, 2195,
-      139, 2195, 2195, 2195, 2195,  179,  113, 2195, 2195, 2195,
-     2195, 2195, 2195,  122,  241, 2195, 2195, 2195,  245,  281,
-      207,  236,    0,    0,    0, 2195, 2195, 2195,  111, 2195,
-     2195, 2195,  107,  105,  208,   99,  202,   80, 2195,  333,
-
-      210,  235,  259,  215,  232,  271,  272,  234,  290,  296,
-      297,  298,  299,  300,  301,  320,  326,  327,  338,  316,
-      331,  346,  356,  358,  362,  379,  384,  386,  387,  389,
-      390,  391,  395,  402,  396,  399,  411,  407,  415,  422,
-      424,  430,  451,  454,  456,  457,  458,  459, 2195, 2195,
-     2195, 2195,  469, 2195,  499,  478, 2195,  462,  504,  515,
-      505,    0, 2195, 2195,    0,  518,  492,  519,  524,  493,
-      531,  541,  549,  550,  557,  484,  559,  566,  569,  461,
-      570,  572,  574,  578,  579,  581,  582,  594,  597,  606,
-      607,  609,  613,  615,  618,  619,  622,  637,  643,  598,
-
-      641,  646,  650,  652,  662,  656,  665,  667,  668,  674,
-      671,  672,  677,  689,  680,  683,  693,  695,  699,  710,
-      698,  708,  711,  714,  717,  718,  721,  726,  727,  733,
-      736,  738,  739,  749,  755,  757,  772,  780,  796, 2195,
-      784,  800, 2195,  735,    0,  761,  805,  814,  766,  815,
-      818,  820,  825,  821,  826,  830,  836,  827,  833,  838,
-      842,  846,  849,  853,  773,  861,  868,  870,  873,  877,
-      888,  890,  893,  895,  892,  894,  896,  897,  898,  900,
-      905,  901,  917,  918,  920,  921,  924,  926,  936,  937,
-      942,  939,  943,  946,  949,  955,  961,  962,  964,  965,
-
-      967,  970,  980,  977,  985,  990,  986,  992,  993,  996,
-      998, 1003, 1005, 1014, 1027, 1021, 1029, 1031, 1034, 1033,
-     1039, 1064, 1040, 1053, 1042, 1044, 1046, 1057, 1068, 1079,
-     1083, 1085, 1089, 1091, 1094, 1095, 1100, 1096, 1102, 1112,
-     1104, 1113, 1119, 1120, 1121, 1124, 1129, 1140, 1145, 1146,
-     1148, 1149, 1151, 1153, 1155, 1157, 1161, 1164, 1168, 1173,
-     1180, 1181, 1183, 1190, 1192, 1199, 1201, 1203, 1209, 1207,
-     1208, 1211, 1212, 1214, 1220, 1224, 1227, 1229, 1230, 1231,
-     1236, 1240, 1251, 1257, 1259, 1262, 1264, 1266, 1270, 1268,
-     1279, 1281, 1283, 1286, 1291, 1292, 1290, 1298, 1303, 1309,
-
-     1307, 1313, 1316, 1314, 1318, 1326, 1331, 1320, 1338, 1342,
-     1343, 1344, 1348, 1355, 1359, 1360, 1370, 1372, 1375, 1379,
-     1381, 1382, 1385, 1388, 1390, 1391, 1394, 1400, 1401, 1403,
-     1407, 1409, 1410, 1411, 1413, 1418, 1419, 1428, 1430, 1431,
-     1434, 1437, 1435, 1438, 1439, 1443, 1446, 1447, 1450, 1455,
-     1456, 1465, 1474, 1482, 1483, 1484, 1485, 1486, 1491, 1487,
-     1492, 1493, 1494, 1495, 1502, 1503, 1511, 1519, 1522, 1526,
-     1521, 1530, 1539, 1541, 1542, 1545, 1546, 1547, 1549, 1550,
-     1551, 1552, 1554, 1569, 1570, 1571, 1572, 1573, 1575, 1577,
-     1578, 1595, 1582, 1597, 1598, 1600, 1606, 1601, 1610, 1602,
-
-     1603, 1622, 1625, 1629, 1630, 1638, 1646, 1647, 1648, 1653,
-     1649, 1654, 1655, 1656, 1658, 1666, 1659, 1675, 1677, 1678,
-     1682, 1684, 1686, 1693, 1694, 1703, 1704, 1709, 1710, 1712,
-     1714, 1713, 1715, 1719, 1721, 1722, 1737, 1738, 1739, 1741,
-     1742, 1747, 1748, 1759, 1760, 1765, 1766, 1768, 1772, 1775,
-     1776, 1777, 1784, 1785, 1793, 1794, 1809, 1796, 1800, 1803,
-     1804, 1812, 1819, 1821, 1822, 1824, 1825, 1828, 1830, 1831,
-     1837, 1840, 1847, 1848, 1849, 1855, 1853, 1857, 1858,   92,
-     1860, 1868, 1856, 1878, 1879, 1883, 1884, 1886, 1896, 1901,
-     1902, 1903, 1904, 1906, 1905, 1911, 1908, 2195,   63, 1914,
-
-     1907, 1913, 1923, 1933, 1934, 1936, 1951, 1953, 1956, 1957,
-     1958, 1960, 1961, 1962, 1963, 1964, 1968, 1979, 1984, 1985,
-     1987, 1988, 1989, 1990, 2000, 2006, 2007, 2008, 2009, 2012,
-     2013, 2015, 2017, 2018, 2019, 2034, 2028, 2036, 2038, 2043,
-     2040, 2045, 2049, 2061, 2062, 2066, 2068, 2069, 2071, 2073,
-     2074, 2077, 2078, 2090, 2096, 2098, 2097, 2101, 2102, 2195,
-     2161, 2168, 2174, 2177, 2178, 2181, 2183, 2187
+        0,    0,  254, 2603, 2603, 2603, 2603, 2603,  219,   70,
+     2603, 2603,   50,   69,  201, 2603, 2603,  199,   65, 2603,
+       66,   64,   76,   96,   79,   80, 2603,   97,  194,   61,
+     2603,   81,   88,  116, 2603, 2603,  183,  132,  115,   87,
+      143,  147,  131,  148,  156,  160,  121,  164,  136,  203,
+      204,  206,  208,  212,  224, 2603,   88, 2603, 2603, 2603,
+      101, 2603,  184, 2603, 2603, 2603, 2603,  182,  174, 2603,
+     2603, 2603, 2603, 2603, 2603,  159,  259, 2603, 2603, 2603,
+      298,  339,  218,  247,  151,    0,    0, 2603, 2603, 2603,
+      116, 2603, 2603, 2603,  111,  111,  149,  106,  213,  186,
+
+       85, 2603,  233,  237,  232,  396,  221,  240,  241,  242,
+      265,  298,  313,  306,  318,  319,  323,  315,  316,  334,
+      331,  363,  364,  372,  328,  374,  375,  390,  391,  392,
+      393,  400,  409,  401,  394,  411,  398,  416,  424,  431,
+      399,  458,  459,  463,  466,  465,  468,  469,  475,  470,
+      476,  478,  487,  491, 2603, 2603, 2603, 2603,  527,  517,
+      556,  541,  546,  530,  483,  595,    0,  601,  403, 2603,
+     2603,    0,  533,  243, 2603,  108,  498,  550,  589,  596,
+      600,  618,  571,  611,  624,  620,  645,  517,  648,  652,
+      654,  663,  665,  497,  664,  667,  671,  672,  673,  675,
+
+      680,  683,  682,  684,  705,  692,  695,  708,  710,  720,
+      723,  731,  738,  508,  735,  739,  741,  743,  744,  747,
+      754,  748,  756,  763,  765,  766,  767,  771,  784,  774,
+      786,  787,  793,  794,  799,  803,  806,  805,  809,  810,
+      812,  814,  821,  827,  833,  834,  836,  837,  838,  839,
+      855,  860,  875,  889,  880,  899,  907,  905,  910,  953,
+      941,  997,  860,  866,  883,  881,  876,  970,  945,  927,
+     1003,  946, 1006, 1011, 1012, 1014,  940, 1013, 1016, 1018,
+     1015, 1021,  943, 1022, 1023, 1024, 1033, 1034, 1040, 1041,
+     1042, 1043, 1051, 1050, 1058, 1071, 1059, 1076, 1078, 1079,
+
+     1082, 1086, 1087, 1094, 1099, 1102, 1103, 1104, 1106, 1105,
+     1107, 1110, 1111, 1114, 1123, 1127, 1130, 1129, 1135, 1136,
+     1139, 1140, 1142, 1147, 1148, 1155, 1151, 1164, 1168, 1171,
+     1172, 1173, 1174, 1184, 1191, 1194, 1200, 1203, 1204, 1207,
+     1209, 1211, 1217, 1222,    0, 1212, 1259, 1249,    0, 1257,
+     1299, 1236, 1303, 1237, 1241, 1242, 1265, 1282, 1286, 1274,
+     1293, 1319, 1320, 1321, 1324, 1323, 1326, 1328, 1341, 1343,
+     1344, 1346, 1347, 1350, 1352, 1353, 1356, 1363, 1365, 1372,
+     1374, 1376, 1382, 1387, 1392, 1393, 1395, 1394, 1398, 1402,
+     1403, 1404, 1405, 1413, 1414, 1425, 1415, 1430, 1431, 1433,
+
+     1437, 1438, 1448, 1449, 1455, 1457, 1458, 1461, 1460, 1465,
+     1464, 1473, 1467, 1480, 1470, 1482, 1485, 1491, 1492, 1495,
+     1511, 1513, 1515, 1523, 1547,    0, 1519, 1571, 1527, 1586,
+     1576, 1549, 1541, 1566, 1572, 1601, 1554, 1605, 1606, 1611,
+     1623, 1626, 1627, 1629, 1630, 1548, 1633, 1635, 1636, 1638,
+     1642, 1645, 1648, 1655, 1654, 1658, 1660, 1663, 1667, 1664,
+     1666, 1675, 1684, 1685, 1687, 1688, 1690, 1703, 1706, 1709,
+     1711, 1713, 1714, 1715, 1716, 1718, 1724, 1726, 1733, 1737,
+     1739, 1741, 1742, 1744, 1746, 1750, 1759, 1752, 1762, 1761,
+     1765, 1767, 1768, 1773, 1806, 1777, 1774, 1778, 1780, 1787,
+
+     1793, 1795, 1798, 1808, 1810, 1814, 1821, 1823, 1826, 1827,
+     1831, 1839, 1842, 1843, 1844, 1847, 1849, 1859, 1862, 1865,
+     1869, 1870, 1872, 1877, 1878, 1880, 1885, 1889, 1898, 1901,
+     1904, 1905, 1906, 1909, 1910, 1914, 1917, 1921, 1925, 1930,
+     1927, 1932, 1933, 1936, 1934, 1938, 1945, 1949, 1953, 1955,
+     1960, 1957, 1964, 1973, 1970, 1976, 1980, 1981, 1983, 1985,
+     1989, 1993, 1996, 2004, 2008, 2011, 2013, 2014, 2016, 2015,
+     2019, 2021, 2020, 2023, 2026, 2039, 2041, 2042, 2043, 2048,
+     2049, 2054, 2066, 2069, 2072, 2073, 2075, 2076, 2079, 2077,
+     2078, 2081, 2082, 2084, 2088, 2100, 2105, 2106, 2109, 2110,
+
+     2112, 2121, 2127, 2122, 2131, 2134, 2132, 2144, 2147, 2149,
+     2150, 2152, 2156, 2157, 2160, 2162, 2165, 2168, 2172, 2180,
+     2181, 2184, 2185, 2188, 2189, 2190, 2196, 2197, 2208, 2200,
+     2209, 2212, 2215, 2217, 2225, 2227, 2228, 2233, 2230, 2237,
+       96, 2235, 2243, 2232, 2253, 2256, 2262, 2263, 2273, 2278,
+     2280, 2281, 2282, 2283, 2284, 2285, 2288, 2290, 2293, 2603,
+       68, 2301, 2286, 2291, 2303, 2306, 2309, 2311, 2312, 2321,
+     2331, 2334, 2339, 2341, 2342, 2343, 2350, 2349, 2354, 2351,
+     2359, 2360, 2361, 2367, 2370, 2371, 2377, 2378, 2379, 2380,
+     2382, 2386, 2388, 2389, 2399, 2401, 2405, 2407, 2411, 2414,
+
+     2424, 2418, 2426, 2427, 2429, 2433, 2434, 2435, 2437, 2450,
+     2452, 2457, 2458, 2461, 2462, 2473, 2463, 2478, 2481, 2483,
+     2485, 2486, 2488, 2489, 2491, 2496, 2501, 2603, 2559, 2567,
+     2574, 2578, 2579, 2587, 2590, 2594
     } ;
 
-static yyconst short int yy_def[669] =
+static yyconst short int yy_def[737] =
     {   0,
-      660,    1,  660,  660,  660,  660,  660,  660,  661,  660,
-      660,  660,  660,  662,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      663,  663,  660,  660,  660,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  660,  660,  660,  660,  660,  661,  660,
-      661,  660,  660,  660,  660,  662,  662,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  664,   24,  665,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  663,  660,  661,  662,  660,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      664,  666,  660,  660,  667,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  660,  660,  660,  660,
-      660,  660,  660,  660,  666,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      660,  660,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  668,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  660,  668,  663,
-
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,    0,
-      660,  660,  660,  660,  660,  660,  660,  660
+      728,    1,  728,  728,  728,  728,  728,  728,  728,  729,
+      728,  728,  728,  728,  730,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,   24,  728,  728,  728,  728,  728,
+      728,  731,  731,  731,  728,  728,  728,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  728,  728,  728,  728,  728,
+      729,  728,  729,  728,  728,  728,  728,  730,  730,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  732,   25,  733,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  731,  728,  731,  734,
+
+      730,  728,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  735,  732,  731,  728,
+      728,  733,  731,  734,  728,  734,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  728,   77,  728,  728,  728,   81,  728,  735,  728,
+      728,  728,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  728,  161,  259,  728,  728,  260,  348,  728,
+      728,  728,  728,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  728,  728,  348,  728,  728,  728,  728,
+      728,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  728,  728,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      736,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  728,
+      736,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
+      731,  731,  731,  731,  731,  731,  731,    0,  728,  728,
+      728,  728,  728,  728,  728,  728
     } ;
 
-static yyconst short int yy_nxt[2266] =
+static yyconst short int yy_nxt[2680] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
-       24,   24,   24,   25,   26,   27,   28,   29,   30,   31,
-       31,   31,   31,   32,   31,   31,   33,    4,   34,   35,
-       36,   37,   38,   39,   40,   41,   42,   43,   31,   44,
-       31,   31,   45,   31,   46,   31,   47,   48,   49,   50,
-       51,   52,   53,   31,   31,   31,   54,   55,   56,   57,
-       60,   62,   63,   64,   69,  598,   74,   71,   75,   75,
-       75,   75,   94,   87,   76,   94,   70,   72,   73,   77,
-       65,   85,   92,   93,  149,   86,   96,   78,   88,   96,
-
-       89,   90,   61,   79,  598,   80,   80,   80,   80,   97,
-       94,   94,   60,   94,   98,  660,   81,   67,   94,   82,
-       82,   83,  165,   66,   96,   96,   94,   96,   96,   94,
-      104,   81,   96,  164,  105,  150,  106,  163,   82,  152,
-       96,  660,  100,   96,   61,   94,   82,  101,   94,   83,
-       79,  102,   84,   84,   84,   84,   94,   94,  107,   96,
-      103,  108,   96,   81,  129,   94,   82,   82,  109,   94,
-       96,   96,  110,   94,  132,  111,   99,  133,   81,   96,
-      112,  113,   91,   96,  114,   82,   68,   96,  117,  151,
-      118,  115,  123,   82,  116,   67,   94,  120,   94,  119,
-
-      121,  134,  124,  122,   58,  130,  125,   60,   94,  131,
-       96,   94,   96,  126,  127,  660,   67,   94,  128,   94,
-       94,  159,   96,  159,   94,   96,  160,  160,  160,  160,
-      660,   96,  135,   96,   96,  136,  137,  141,   96,   61,
-      660,   94,  660,   94,   94,  660,  138,  139,  145,  140,
-      660,  143,  147,  142,  146,   96,  144,   96,   96,  148,
-       75,   75,   75,   75,  155,  155,  155,  155,   94,   82,
-       82,  153,  154,  176,  154,  156,  157,  660,  157,  179,
-       94,   94,   96,  660,  660,  180,  153,  154,   82,  177,
-      156,  157,  183,  154,   96,   96,   82,  157,   79,   94,
-
-       80,   80,   80,   80,  660,   94,   94,   94,   94,   94,
-       94,   81,  660,   96,  158,  158,  660,  182,  178,   96,
-       96,   96,   96,   96,   96,   94,   81,  660,  660,   94,
-      181,  184,  660,  158,  660,   94,   94,  185,  660,   96,
-       94,  158,   94,   96,  660,  188,  191,   94,  189,   96,
-       96,  186,  192,  193,   96,   94,   96,  187,  190,  660,
-      660,   96,  660,  660,  660,   94,  660,   94,  660,   96,
-      660,   94,  660,  198,  166,  167,  168,  169,  170,   96,
-      194,   96,  171,  660,  195,   96,  199,  196,   94,  660,
-      172,  173,  174,   94,  175,   94,   94,  197,   94,   94,
-
-       94,  660,   96,  200,   94,   94,  660,   96,   94,   96,
-       96,   94,   96,   96,   96,  201,   94,  202,   96,   96,
-       94,  660,   96,  660,   94,   96,  660,  204,  660,  660,
-       96,   94,  660,   94,   96,  203,  205,  213,   96,   94,
-      211,  208,  209,  206,  207,   96,  212,   96,  221,  214,
-      660,  222,  210,   96,  218,  217,  215,  225,  219,  660,
-       94,  216,  223,   94,  224,   94,   94,   94,   94,  660,
-       94,  226,  660,  227,   96,  660,  220,   96,  660,   96,
-       96,   96,   96,  237,   96,  237,  228,  660,  238,  238,
-      238,  238,  241,   94,  241,  158,  158,  242,  242,  242,
-
-      242,   94,   94,  230,  660,  229,  233,   96,  236,  234,
-      660,  660,  231,  232,  158,   96,   96,  235,  155,  155,
-      155,  155,  158,  160,  160,  160,  160,   94,   94,  239,
-      240,  660,  240,   94,  160,  160,  160,  160,  244,  244,
-       94,   96,   96,  261,  239,  240,  243,   96,  243,  660,
-       94,  240,  250,  660,   96,  660,  254,  244,   94,   94,
-      660,  243,  660,  251,   96,  244,   94,  243,   94,  253,
-      247,  660,   96,   96,  252,   94,  248,  249,   94,   94,
-       96,   94,   96,   94,  660,  255,  256,   94,   94,   96,
-       94,   94,   96,   96,  660,   96,  660,   96,  257,  660,
-
-      660,   96,   96,   94,   96,   96,   94,   94,  258,  264,
-      263,  262,  260,  266,  259,   94,   94,   96,   94,  267,
-       96,   96,   94,  272,   94,  265,  660,   94,   94,   96,
-       96,   94,   96,  660,  660,  268,   96,  269,   96,  270,
-      271,   96,   96,  273,  660,   96,   94,  275,  276,  660,
-       94,  274,   94,  660,  278,   94,  277,  281,  279,   94,
-       96,   94,  280,  282,   96,   94,   96,  284,  660,   96,
-      660,   94,  283,   96,   94,   96,   94,   94,  291,   96,
-       94,   94,  285,   94,  286,   96,   94,  660,   96,   94,
-       96,   96,   94,  295,   96,   96,  660,   96,   94,  660,
-
-       96,  287,   94,   96,   94,  288,   96,   94,   94,  289,
-      292,  290,   96,  294,  293,  660,   96,   94,   96,   94,
-       94,   96,   96,   94,  660,  300,   94,   94,  297,  298,
-       94,   96,  296,   96,   96,   94,   94,   96,  299,  660,
-       96,   96,   94,  301,   96,   94,  660,   94,   94,   96,
-       96,  306,  302,  303,  660,  304,   96,  305,   94,   96,
-      309,   96,   96,  660,   94,  660,   94,  307,  244,  244,
-       94,  312,   96,  660,  308,   94,  660,  310,   96,  311,
-       96,  660,   94,  317,   96,  315,  313,  244,  314,   96,
-      318,  238,  238,  238,  238,  244,   96,  316,  319,  238,
-
-      238,  238,  238,  242,  242,  242,  242,  660,  660,  320,
-      321,  154,  321,  154,   94,  322,  322,  322,  322,  242,
-      242,  242,  242,   94,   94,  325,  154,   94,   96,   94,
-       94,  157,  154,  157,   94,   94,   94,   96,   96,   94,
-      660,   96,   94,   96,   96,   94,  157,   94,   96,   96,
-       96,   94,  157,   96,  323,   94,   96,  660,   94,   96,
-      660,   96,   94,  327,  326,   96,  660,  324,  329,   96,
-       94,  335,   96,  660,  328,  660,   96,   94,  331,   94,
-      330,  660,   94,  334,   96,  332,   94,  338,  333,  336,
-      337,   96,  340,   96,  660,  339,   96,   94,  660,   94,
-
-       96,   94,   94,   94,   94,   94,   94,   94,  341,   94,
-       94,   96,  342,   96,   94,   96,   96,   96,   96,   96,
-       96,   96,  660,   96,   96,  660,   94,   94,   96,   94,
-       94,  343,  346,   94,  349,   94,  344,  345,  347,  348,
-       96,   96,  660,   96,   96,   94,   94,   96,   94,   96,
-      351,   94,   94,  354,  350,   94,  352,  355,   94,   96,
-       96,  353,   96,  362,   94,   96,   96,  660,  660,   96,
-       94,   94,   96,   94,   94,  356,   94,  660,   96,   94,
-      358,  360,  357,  359,   96,   96,   94,   96,   96,   94,
-       96,  361,  660,   96,   94,   94,  365,  660,  363,   94,
-
-       96,   94,   94,   96,  364,   94,  366,   94,   96,   96,
-      660,  367,   94,   96,   94,   96,   96,  660,  660,   96,
-      660,   96,  368,   94,  370,  372,   96,  369,   96,  371,
-       94,  375,  373,  660,  374,  377,   94,   96,   94,  379,
-       94,  380,   94,   94,   96,  378,  660,  381,  376,   94,
-       96,   94,   96,   94,   96,   94,   96,   96,  322,  322,
-      322,  322,   94,   96,  660,   96,   94,   96,  382,   96,
-      660,  660,  660,  660,  383,  660,   96,   94,  387,  660,
-       96,  384,  386,  322,  322,  322,  322,  388,   94,  392,
-      385,   96,   94,  389,   94,  240,  391,  240,   94,  390,
-
-       94,  660,   96,   94,   94,   94,   96,  397,   96,   94,
-      240,   94,   96,   94,   96,  393,  240,   96,   96,   96,
-      394,   94,   94,   96,  395,   96,  660,   96,   94,   94,
-       94,  660,  396,   94,  660,   96,   96,  400,   94,  660,
-      401,  402,   96,   96,   96,  399,  406,   96,  398,   94,
-      403,  660,   96,  405,   94,   94,  404,   94,   94,  407,
-       94,  660,   94,   96,   94,  409,   94,  660,   96,   96,
-       94,   96,   96,   94,   96,  408,   96,   94,   96,  660,
-       96,  410,   94,  660,   96,  411,  660,   96,  660,   94,
-       94,   96,   94,  414,  415,  660,   96,  412,  413,   94,
-
-      418,   94,  420,   96,   96,  660,   96,  416,   94,  417,
-       94,  419,   94,   96,  660,   96,   94,   94,   94,  422,
-       94,   94,   96,   94,   96,  423,   96,  421,  429,   94,
-       96,   96,   96,   94,   96,   96,   94,   96,   94,   94,
-       94,  660,  660,   96,  427,   94,  424,   96,  660,   94,
-       96,  425,   96,   96,   96,  431,  426,  433,  432,   96,
-       94,  430,  428,   96,  660,  435,   94,  660,   94,  660,
-      437,   94,  434,   94,   96,   94,  440,   94,  438,   94,
-       96,  441,   96,  439,  660,   96,  436,   96,   94,   96,
-       94,   96,   94,   96,  660,   94,  660,  660,  443,   94,
-
-       94,   94,   96,  445,   96,  442,   96,   94,  444,   96,
-      447,  455,   94,   96,   96,   96,   94,  448,   94,  660,
-      446,   96,   94,   94,  660,   94,   96,   94,  660,   94,
-       96,  660,   96,  450,  660,   94,   96,   96,  449,   96,
-       94,   96,  451,   96,  452,  453,  454,   94,  457,   96,
-      458,   94,   94,   94,   96,  456,  660,   94,  660,  462,
-      660,   96,  459,  660,   94,   96,   96,   96,   94,   94,
-      463,   96,  460,  660,  461,  465,  464,  466,   96,   94,
-      469,   94,   96,   96,   94,  467,  471,  468,   94,  473,
-       94,   94,  660,   96,   94,   96,  470,   94,   96,   94,
-
-       94,  660,   96,   94,   96,   96,  472,  474,   96,   94,
-       94,   96,   94,   96,   96,  475,   94,   96,   94,   94,
-       94,  660,   94,   96,   96,  476,   96,   94,   94,  478,
-       96,  660,   96,   96,   96,  479,   96,   94,  477,   94,
-       94,   96,   96,   94,   94,  481,   94,   94,   94,  660,
-      480,   96,   94,   96,   96,   94,   94,   96,   96,   94,
-       96,   96,   96,  482,   94,   94,   96,  660,  660,   96,
-       96,  485,  483,   96,   94,  660,  660,  484,   96,   96,
-      487,  491,  488,   94,  660,  660,  486,  489,   96,  493,
-      490,   94,   94,   94,   94,   94,   94,   96,  492,  494,
-
-       94,   94,   94,   94,   94,   96,   96,   96,   96,   96,
-       96,   94,   94,  660,   96,   96,   96,   96,   96,  660,
-       94,  495,  660,  660,  660,   96,   96,  497,   94,  499,
-       94,   94,  496,  498,   96,   94,  502,  501,  500,   94,
-      505,  503,   96,  506,   96,   96,  504,  507,   94,   96,
-       94,   94,  508,   96,   94,   94,   94,  660,   94,   94,
-       94,   94,   96,   94,   96,   96,  509,  511,   96,   96,
-       96,  512,   96,   96,   96,   96,  510,   96,   94,   94,
-       94,   94,   94,  660,   94,  660,   94,   94,  660,  515,
-      516,   94,   96,   96,   96,   96,   96,  519,   96,  513,
-
-       96,   96,  514,  660,   94,   96,   94,   94,  518,   94,
-       94,   94,   94,  522,  517,   94,  660,  523,   96,   94,
-       96,   96,  524,   96,   96,   96,   96,  520,  521,   96,
-      525,   94,  660,   96,   94,  660,  660,  660,   94,   94,
-      660,  526,  527,  529,  532,   96,  531,   94,   96,  530,
-      533,  528,   96,   96,  534,   94,   94,   94,   94,  660,
-      660,   96,   94,   94,   94,   94,  660,   94,   94,   96,
-       96,   96,   96,  537,  535,   94,   96,   96,   96,   96,
-      536,   96,   96,  660,   94,  660,   94,   94,  542,   96,
-      660,   94,  539,   94,  544,   94,  660,  538,   96,  549,
-
-       96,   96,   94,   94,  540,   96,  547,   96,  543,   96,
-      541,  548,   94,   94,  545,  546,   96,   96,   94,   94,
-      660,   94,   94,   94,   94,  550,   96,   96,   94,  660,
-       94,   94,   96,   96,  552,   96,   96,   96,   96,  553,
-      551,  660,   96,  554,   96,   96,   94,   94,   94,  556,
-       94,   94,  660,  557,  559,  561,   94,   94,  660,  562,
-       96,   96,   96,  555,   96,   96,  563,  558,   94,   94,
-       96,   96,  560,  660,   94,   94,  564,   94,  660,  566,
-      567,   94,   96,   96,   94,   94,   94,  569,   96,   96,
-      568,   96,  570,   94,   94,   96,  565,  660,   96,   96,
-
-       96,  660,   94,   94,  571,   94,  660,   96,   96,   94,
-      660,  573,   94,   94,  572,  574,   96,   96,   94,   96,
-      580,   94,  576,   96,  575,  577,   96,   96,   94,  660,
-       94,   94,   96,   94,   94,   96,  660,   94,  578,   94,
-       94,  660,   96,  582,   96,   96,   94,   96,   96,   94,
-      581,   96,  583,   96,   96,  579,   94,   94,   94,  584,
-       96,  585,   94,   96,   94,   94,   94,   94,  660,   94,
-       96,   96,   96,  660,  588,  587,   96,   94,   96,   96,
-       96,   96,  590,   96,  660,  586,  660,   94,   94,  593,
-      660,   96,   94,   94,  589,   94,  591,  596,  595,  597,
-
-      600,   96,   96,  594,  592,   94,   96,   96,  601,   96,
-       94,   94,   94,   94,   94,   94,   94,   94,  602,   96,
-       94,  660,   94,   94,   96,   96,   96,   96,   96,   96,
-       96,   96,   94,  660,   96,  603,   96,   96,  604,  660,
-      660,  660,   94,   94,  660,   94,   96,  607,  614,  660,
-      660,  612,  605,  610,  615,  613,   96,   96,  606,   96,
-       94,  608,   94,  609,  611,   94,   94,   94,  660,   94,
-       94,   94,   94,   94,   96,  618,   96,   94,  617,   96,
-       96,   96,  616,   96,   96,   96,   96,   96,   94,  660,
-      660,   96,  660,   94,   94,  619,   94,   94,   94,   94,
-
-      660,  621,   96,  623,  625,  620,  622,   96,   96,   94,
-       96,   96,   96,   96,  624,   94,   94,   94,   94,  660,
-      660,   94,   94,   96,   94,  626,   94,   94,   94,   96,
-       96,   96,   96,  627,  629,   96,   96,   94,   96,  632,
-       96,   96,   96,   94,  630,   94,  631,   94,  628,   94,
-      660,   96,   94,  660,   94,  660,  633,   96,   94,   96,
-      637,   96,  660,   96,  635,  634,   96,  640,   96,  636,
-       94,   94,   96,  638,  639,   94,  641,   94,   94,  642,
-       94,  660,   94,   94,   96,   96,   94,   94,  647,   96,
-      660,   96,   96,  644,   96,  643,   96,   96,  645,   94,
-
-       96,   96,  660,  660,  646,   94,   94,   94,  660,  650,
-       94,   94,  660,   96,  651,  660,  649,  648,  660,   96,
-       96,   96,  654,  660,   96,   96,  660,  660,  660,  660,
-      660,  653,  652,  660,  656,  660,  660,  655,  658,  660,
-      660,  659,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      657,   59,   59,   59,   59,   59,   59,   59,   66,   66,
-      660,   66,   66,   66,   66,   95,  660,  660,   95,   95,
-       95,  161,  161,  162,  162,  245,  245,  245,  246,  246,
-      599,  599,  599,  599,    3,  660,  660,  660,  660,  660,
-
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660
+       24,   25,   25,   25,   26,   27,   28,   29,   30,   31,
+       32,   33,   32,   32,   32,   32,   32,   32,   34,   32,
+       32,   32,   35,    4,   36,   37,   38,   39,   40,   41,
+       42,   43,   44,   45,   32,   46,   32,   32,   47,   32,
+       48,   32,   49,   50,   51,   52,   53,   54,   55,   32,
+       32,   32,   56,   57,   58,   59,   62,   64,   65,   66,
+       71,  660,   76,   73,   77,   77,   77,   77,   94,   95,
+       78,   96,   72,   74,   75,   79,   67,   96,   96,   86,
+
+       86,   86,   86,   80,   87,   98,   89,   62,   88,  660,
+      728,   98,   98,   63,   81,  155,   82,   82,   82,   82,
+      728,   90,  100,   91,   92,   96,   96,  101,   69,   83,
+      172,   96,   84,   84,   84,   98,   84,   85,  171,   98,
+       98,   96,   96,  170,   63,   98,   96,   83,  728,   99,
+      113,   84,   84,   96,   84,   98,   98,   96,   96,   96,
+       98,  156,   84,  103,  104,   85,   96,   98,  105,  167,
+       96,   98,   98,   98,   96,  110,  728,  158,  106,  111,
+       98,  112,  135,  107,   98,   68,  728,  108,   98,  123,
+      114,  124,  175,  157,  118,  119,  109,  115,  120,  138,
+
+      125,  116,  139,  126,  117,  121,  127,  129,  122,  128,
+      102,  136,  131,   96,   96,  137,   96,  130,   96,  132,
+      133,   93,   96,   96,  134,   69,   70,   98,   98,  176,
+       98,   96,   98,  165,   96,  165,   98,   98,  166,  166,
+      166,  166,   96,   96,   69,   98,   60,   96,   98,  175,
+       96,   96,   96,  728,  140,  141,   98,   98,  142,  143,
+      147,   98,  728,  149,   98,   98,   98,  151,  150,  144,
+      145,  153,  146,  152,  173,   96,  148,  728,  154,   77,
+       77,   77,   77,   84,   84,   84,  176,   84,  728,   98,
+      190,  179,  159,  160,  177,  160,  160,  160,  178,  728,
+
+      191,  728,   84,   84,  728,   84,  192,  728,   96,  728,
+      159,  160,  193,   84,  160,  160,   96,  160,  161,  161,
+      161,  161,   98,   96,  194,   96,   96,  728,   96,   96,
+       98,  162,  163,   96,  163,  163,  163,   98,   96,   98,
+       98,   96,   98,   98,   96,  728,  728,   98,  728,  162,
+      163,  728,   98,  163,  163,   98,  163,   81,   98,   82,
+       82,   82,   82,  195,  196,  198,  199,  728,  202,  728,
+      197,  203,   83,   96,   96,  164,  164,  164,  728,  164,
+      201,  204,   96,  200,   96,   96,  205,   98,   98,  207,
+       83,  728,  206,  211,  164,  164,   98,  164,   98,   98,
+
+       96,   96,   96,   96,   96,  164,   96,  728,   96,   96,
+       96,   96,  728,   96,   98,   98,   98,   98,   98,   96,
+       98,   96,   98,   98,   98,   98,   96,   98,  209,  208,
+      728,  728,  728,   98,   96,   98,  213,  212,  210,  728,
+       98,   96,  728,  180,  181,  182,  183,  184,   98,  728,
+      728,  185,  728,  214,  222,   98,  215,  216,  218,  186,
+      187,  188,  217,  189,  232,  221,  224,  219,   96,   96,
+      223,  225,  227,   96,  220,   96,   96,  226,   96,   96,
+       96,  728,   98,   98,  228,   96,   96,   98,   96,   98,
+       98,  229,   98,   98,   98,  230,  231,   96,  728,   98,
+
+       98,   96,   98,  166,  166,  166,  166,   96,   96,  728,
+      236,   98,  234,  237,  240,   98,  728,  728,   96,  233,
+      241,   98,   98,  242,  238,  245,  239,   96,  728,  728,
+      235,  243,   98,  248,  246,  244,  249,  728,  728,  247,
+      728,   98,  252,   96,  252,  728,  251,  253,  253,  253,
+      253,  160,  250,  160,  160,  160,  256,   98,  256,  264,
+       96,  257,  257,  257,  257,  728,  164,  164,  164,  160,
+      164,  279,  160,  160,   98,  160,  161,  161,  161,  161,
+      163,   96,  163,  163,  163,  164,  164,  280,  164,  254,
+      255,  263,  255,  255,  255,   98,  164,  728,  163,   96,
+
+      728,  163,  163,  728,  163,  728,   96,  254,  255,  265,
+       96,  255,  255,   98,  255,  166,  166,  166,  166,  260,
+       98,   96,  273,  728,   98,  728,  728,  728,   96,  258,
+       96,  258,  258,  258,   96,   98,  266,  261,  261,  261,
+      262,  261,   98,  728,   98,  728,  728,  258,   98,  728,
+      258,  258,  728,  258,  267,   96,  261,  261,   96,  261,
+      268,  269,   96,  262,   96,  728,  270,  261,  271,   98,
+      728,  276,   98,   96,   96,   96,   98,   96,   98,  272,
+      274,   96,   96,   96,  275,   96,  728,   98,   98,   98,
+       96,   98,   96,   96,   96,   98,   98,   98,  728,   98,
+
+      277,  728,   96,  728,   98,   96,   98,   98,   98,  281,
+      278,  285,  283,  284,  287,   96,   98,  282,   96,   98,
+       96,  728,  288,  728,  728,  286,  728,  293,  728,   98,
+       96,  296,   98,   96,   98,  289,  728,  290,  294,  291,
+      292,   96,  295,  299,   98,   96,  300,   98,   96,   96,
+      301,   96,  297,   96,   96,   98,  302,   96,   96,   98,
+      298,  303,   98,   98,   96,   98,   96,   98,   98,  728,
+      312,   98,   98,   96,  305,   96,   96,   96,   98,  304,
+       98,   96,  306,  316,   96,  307,  728,   98,  728,   98,
+       98,   98,  728,  728,   96,   98,   96,   96,   98,  311,
+
+      308,  314,  309,   96,   96,  313,  310,  315,   98,   96,
+       98,   98,  728,   96,  728,   96,   96,   98,   98,   96,
+       96,  728,   96,   98,   96,  319,  320,   98,  318,   98,
+       98,   96,  317,   98,   98,  321,   98,   96,   98,  322,
+      728,  728,  728,   96,   96,   98,   96,   96,   96,   96,
+      326,   98,  323,  728,  325,  328,  324,   98,   98,  331,
+       98,   98,   98,   98,  728,   96,  728,  329,  327,  728,
+       96,  728,  334,  728,  728,  330,   96,  332,  333,   98,
+      253,  253,  253,  253,   98,  340,   96,  339,  341,  337,
+       98,   96,  335,   96,  336,  253,  253,  253,  253,  728,
+
+       98,  338,  728,  728,  343,   98,  343,   98,  728,  344,
+      344,  344,  344,  342,  255,  728,  255,  255,  255,  257,
+      257,  257,  257,  728,  354,  728,  728,  257,  257,  257,
+      257,  357,  255,  728,  356,  255,  255,   96,  255,  258,
+      728,  258,  258,  258,  345,  355,  346,  346,  346,  347,
+       96,   98,  728,   96,  728,   96,   96,  258,  728,  728,
+      258,  258,  345,  258,   98,  346,  346,   98,  346,   98,
+       98,  728,  347,  348,  348,  348,  348,  261,  261,  261,
+       96,  261,  360,  348,  348,  348,  348,  349,  728,  350,
+      350,  350,  351,  368,   98,  728,  261,  261,  374,  261,
+
+      348,  348,  348,  348,  348,  349,  362,  261,  350,  350,
+      359,  350,  352,   96,  352,  351,   96,  353,  353,  353,
+      353,   96,   96,   96,   96,   96,   96,   98,   96,  358,
+       98,   96,   96,   96,   96,   98,   98,   98,   98,   98,
+       98,  728,   98,   96,   96,   98,   98,   98,   98,  728,
+       96,   96,   96,   96,  361,  363,  728,   98,   98,  728,
+       96,   96,  728,  369,   98,   98,   98,   98,   96,   96,
+      365,  375,  373,  372,   98,   98,  364,  366,  367,  370,
+      371,   96,   98,   98,  376,  728,   96,  728,   96,   96,
+      377,  728,   96,  728,  728,   98,   96,   96,  380,  381,
+
+       98,  382,   98,   98,   96,  378,   98,  379,  383,   96,
+       98,   98,   96,   96,   96,   96,   96,   96,   98,  384,
+       96,   96,  728,   98,   96,  385,   98,   98,   98,   98,
+       98,   98,  397,   96,   98,   98,  386,   96,   98,   96,
+       96,  389,  728,  387,  390,   96,   96,   98,  388,   96,
+       96,   98,   96,   98,   98,  728,  395,   96,   96,   98,
+       98,   96,  391,   98,   98,   96,   98,  396,  393,  394,
+      392,   98,   98,  728,   96,   98,  398,  400,   96,   98,
+      401,   96,   96,   96,   96,  728,  728,  399,   98,  728,
+      402,  728,   98,  728,   96,   98,   98,   98,   98,  408,
+
+      403,   96,  728,  405,   96,  406,  410,  404,   98,  728,
+       96,  411,  407,   96,   96,   98,  409,   96,   98,   96,
+      413,   96,  415,  416,   98,  728,  728,   98,   98,  728,
+      414,   98,  728,   98,  417,   98,  412,  344,  344,  344,
+      344,  728,  344,  344,  344,  344,  346,   96,  346,  346,
+      346,   96,   96,  419,  418,  728,  353,  353,  353,  353,
+      728,   98,  423,  422,  346,   98,   98,  346,  346,  420,
+      346,  728,  421,  728,  424,   96,  424,  728,  728,  425,
+      425,  425,  425,  426,   96,  427,  427,  427,  428,   98,
+      728,  350,   96,  350,  350,  350,   96,  433,   98,  432,
+
+      728,  426,  728,   96,  427,  427,   98,  427,  728,  350,
+       98,  428,  350,  350,  429,  350,  429,   98,  434,  430,
+      430,  430,  430,  353,  353,  353,  353,  728,  435,   96,
+       96,   96,  437,   96,   96,  728,   96,  431,   96,  431,
+      431,  431,  438,   98,   98,   98,  443,   98,   98,  436,
+       98,   96,   98,   96,   96,  431,   96,   96,  431,  431,
+       96,  431,   96,   96,  728,   98,   96,   98,   98,  728,
+       98,   98,  441,   96,   98,   96,   98,   98,  440,  442,
+       98,  728,   96,  439,   96,  728,   96,   98,  445,   98,
+      446,  444,   96,  449,  447,  448,   98,   96,   98,  452,
+
+       98,  453,   96,   96,   96,   96,   98,  450,   96,  454,
+      451,   98,   96,   96,   96,   96,   98,   98,   98,   98,
+      728,  456,   98,   96,   96,   96,   98,   98,   98,   98,
+      728,  728,  455,  458,  457,   96,  728,   98,   98,   98,
+       96,   96,  728,   96,  461,  459,  462,   96,   96,   98,
+      460,  467,  728,  465,   98,   98,  463,   98,   96,   96,
+      464,   98,   98,  466,  728,   96,  469,   96,   96,  476,
+       96,   96,   98,   98,   96,   96,  470,   96,  468,   98,
+       96,   98,   98,   96,   98,   98,  728,  474,   98,   98,
+       96,   98,   96,  471,   98,   96,  728,   98,  472,  728,
+
+      473,   96,   96,  728,   98,   96,   98,  728,  728,   98,
+      477,  479,  480,  475,  481,   98,   98,  478,  728,   98,
+      483,   96,  482,   96,  486,   96,  728,  485,  728,  728,
+      728,  488,  484,  728,  728,   98,  489,   98,  728,   98,
+      487,  728,  491,  425,  425,  425,  425,  430,  430,  430,
+      430,   96,  490,  427,  728,  427,  427,  427,   96,   96,
+      493,  728,  728,  728,   96,   98,  492,  425,  425,  425,
+      425,  427,   98,   98,  427,  427,   96,  427,   98,  728,
+      728,  346,   96,  346,  346,  346,  494,  728,  494,  728,
+       98,  495,  495,  495,  495,  510,   98,  728,  728,  346,
+
+      496,  497,  346,  346,  728,  346,  430,  430,  430,  430,
+      431,   96,  431,  431,  431,   96,   96,  728,  499,  501,
+      350,   96,  350,  350,  350,   98,  498,  728,  431,   98,
+       98,  431,  431,   96,  431,   98,   96,   96,  350,   96,
+       96,  350,  350,   96,  350,   96,   96,   98,   96,  507,
+       98,   98,   96,   98,   98,   96,  500,   98,   96,   98,
+       98,  728,   98,  502,   96,   96,   98,  728,   96,   98,
+       96,  503,   98,   96,   96,  504,   96,   96,   98,   98,
+      511,  509,   98,  505,   98,   96,  506,   98,   98,  728,
+       98,   98,  508,  515,   96,   96,  512,   96,   96,   98,
+
+       96,  513,  514,  516,  517,  518,  728,  519,   98,   98,
+      524,   98,   98,   96,   98,  520,   96,  521,  526,   96,
+      522,   96,  523,   96,   96,   96,   96,   98,   96,  527,
+       98,  728,  525,   98,   96,   98,   96,   98,   98,   98,
+       98,  728,   98,   96,  728,  528,  529,   96,   98,   96,
+       98,   96,   96,  728,   96,  530,   96,   98,  531,  728,
+       96,   98,   96,   98,  532,   98,   98,  534,   98,   96,
+       98,   96,   96,  535,   98,   96,   98,   96,   96,  533,
+      728,  728,  728,   98,   96,   98,   98,   96,   96,   98,
+       96,   98,   98,  495,  495,  495,  495,   96,   98,  536,
+
+      728,   98,   98,   96,   98,   96,  539,  537,   96,  728,
+      538,   98,  542,  540,  541,  728,  545,   98,   96,   98,
+       96,  547,   98,  543,   96,  544,  495,  495,  495,  495,
+      728,   96,   98,   96,   98,  549,   96,   96,   98,  548,
+      427,   96,  427,  427,  427,   98,  546,   98,  550,   96,
+       98,   98,   96,   96,   96,   98,  728,   96,  427,   96,
+      728,  427,  427,   98,  427,  553,   98,   98,   98,   96,
+      551,   98,   96,   98,  552,   96,  555,  728,  554,   96,
+       96,  557,   96,   98,  728,  556,   98,   96,   96,   98,
+       96,  558,  728,   98,   98,   96,   98,  559,  560,   96,
+
+      562,   98,   98,  728,   98,  561,  563,  728,   96,   98,
+      564,   96,  728,   98,   96,   96,   96,  565,  728,   96,
+       96,  568,   98,  569,   96,   98,  566,   96,   98,   98,
+       98,   96,  567,   98,   98,   96,  728,   96,   98,  728,
+       96,   98,   96,   96,   96,   98,   96,  728,   96,   98,
+      572,   98,  570,  573,   98,   96,   98,   98,   98,   96,
+       98,  571,   98,   96,  728,   96,  577,   96,  728,   98,
+       96,  728,  575,   98,   96,  576,  574,   98,  580,   98,
+       96,   98,  581,   96,   98,  578,   96,  582,   98,  579,
+       96,   96,  583,   96,   98,   96,  728,   98,  728,   96,
+
+       98,  585,  728,   96,   98,   98,   96,   98,  584,   98,
+      590,  588,  589,   98,   96,  587,  592,   98,   96,  586,
+       98,   96,  591,   96,   96,   96,   96,  728,   98,   96,
+       96,   96,   98,   96,  593,   98,   96,   98,   98,   98,
+       98,  594,  596,   98,   98,   98,  595,   98,  728,   96,
+       98,   96,   96,   96,  728,  728,  598,  601,   96,   96,
+      728,  597,  603,   98,   96,   98,   98,   98,  599,  608,
+      728,  607,   98,   98,  602,  606,   96,  600,   98,   96,
+      604,  728,   96,   96,  605,   96,   96,   96,   96,   96,
+       98,   96,   96,   98,   96,  609,   98,   98,   96,   98,
+
+       98,   98,   98,   98,  611,   98,   98,  610,   98,  728,
+       96,  728,   98,  728,  728,   96,   96,  612,  614,   96,
+       96,  616,   96,  619,   98,  617,  728,  621,  622,   98,
+       98,   96,   96,   98,   98,  623,   98,   96,  615,  613,
+      618,   96,   96,  620,   96,   98,   98,  728,  624,  728,
+      728,   98,  626,  627,   96,   98,   98,   96,   98,   96,
+       96,  629,   96,  630,  628,  625,   96,   96,   98,  728,
+       96,   98,   96,   98,   98,   96,   98,  641,   96,  728,
+       98,   98,   96,  631,   98,  633,   98,  728,  632,   98,
+       96,   96,   98,  634,   96,   96,   98,  728,   96,   96,
+
+       96,  636,  635,  637,   98,   98,   96,   96,   98,   98,
+       96,  638,   98,   98,   98,  728,  728,  728,   96,   96,
+       98,   98,   96,  639,   98,   96,  643,   96,  642,  640,
+      644,  645,   98,   98,  646,   96,   98,   96,   96,   98,
+       96,   98,   96,   96,  728,   96,  728,   96,  728,   98,
+      648,   98,   98,   96,   98,  728,   98,   98,  649,   98,
+      651,   98,  647,   96,  654,  728,   96,   98,  728,  650,
+      728,  728,   96,   96,  652,  728,  656,   98,  653,  657,
+       98,  662,  658,   96,  659,  655,   98,   98,   96,  663,
+       96,   96,   96,   96,   96,   96,   96,   98,   96,  664,
+
+       96,   96,   98,   96,   98,   98,   98,   98,   98,   98,
+       98,   96,   98,   96,   98,   98,   96,   98,  728,   96,
+      665,   96,   96,  666,  728,   98,  728,   98,  728,  728,
+       98,   96,  669,   98,  674,   98,   98,  672,  675,  677,
+      667,   96,  676,  668,   96,   98,  670,  678,  671,   96,
+      673,   96,   96,   96,  728,   98,  681,  680,   98,   96,
+       96,   96,  728,   98,   96,   98,   98,   98,  679,   96,
+       96,   96,  683,   98,   98,   98,  682,   96,   98,  728,
+       96,   96,  684,   98,   98,   98,  728,   96,   96,   96,
+       96,   98,   96,  685,   98,   98,   96,  687,   96,   96,
+
+      689,   98,   98,   98,   98,  728,   98,  686,  688,   96,
+       98,   96,   98,   98,  690,   96,  728,   96,  728,  691,
+      693,   96,  695,   98,   96,   98,  728,  728,   96,   98,
+      692,   98,  694,  697,   96,   98,   96,   96,   98,   96,
+      696,  698,   98,   96,   96,   96,  699,   96,   98,  700,
+       98,   98,  701,   98,  703,  728,  728,   98,   98,   98,
+       96,   98,   96,  728,  702,  728,  706,   96,   96,  704,
+      705,   96,   96,   96,   98,  708,   98,  707,  728,  709,
+      728,   98,   98,   96,  714,   98,   98,   98,   96,  715,
+      711,   96,  710,   96,  712,   96,   96,   98,   96,   96,
+
+      728,   96,   98,  728,  713,   98,   96,   98,  718,   98,
+       98,   96,   98,   98,  716,   98,  728,  717,  728,  728,
+       98,  728,  728,  728,  719,   98,  728,  728,  728,  728,
+      728,  728,  728,  728,  722,  726,  724,  728,  728,  728,
+      728,  728,  727,  720,  721,  728,  728,  728,  728,  728,
+      723,  728,  728,  728,  728,  728,  728,  728,  725,   61,
+       61,   61,   61,   61,   61,   61,   61,   68,   68,  728,
+       68,   68,   68,   68,   68,   97,  728,  728,  728,   97,
+       97,   97,  168,  168,  168,  169,  169,  174,  174,  174,
+      174,  174,  174,  174,  174,  259,  259,  661,  728,  661,
+
+      661,  661,    3,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728
     } ;
 
-static yyconst short int yy_chk[2266] =
+static yyconst short int yy_chk[2680] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -820,248 +890,293 @@ static yyconst short int yy_chk[2266] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        9,   12,   12,   13,   18,  599,   21,   20,   21,   21,
-       21,   21,   31,   27,   22,   37,   18,   20,   20,   22,
-       13,   25,   29,   29,   55,   25,   31,   22,   27,   37,
-
-       27,   27,    9,   23,  580,   23,   23,   23,   23,   32,
-       38,   36,   59,   32,   32,   67,   23,   98,   45,   23,
-       23,   23,   96,   67,   38,   36,   47,   32,   94,   39,
-       37,   23,   45,   93,   37,   55,   37,   89,   23,   74,
-       47,   61,   36,   39,   59,   41,   23,   36,   40,   23,
-       24,   36,   24,   24,   24,   24,   43,   42,   38,   41,
-       36,   39,   40,   24,   45,   48,   24,   24,   39,   44,
-       43,   42,   39,   46,   47,   39,   35,   47,   24,   48,
-       40,   40,   28,   44,   40,   24,   17,   46,   41,   66,
-       41,   40,   43,   24,   40,   14,   49,   42,   50,   41,
-
-       42,   48,   43,   42,    8,   46,   44,   97,   52,   46,
-       49,   51,   50,   44,   44,    3,   66,   95,   44,  101,
-       53,   81,   52,   81,  104,   51,   81,   81,   81,   81,
-        0,   95,   49,  101,   53,   49,   49,   50,  104,   97,
-        0,  105,    0,  108,  102,    0,   49,   49,   52,   49,
-        0,   51,   53,   50,   52,  105,   51,  108,  102,   53,
-       75,   75,   75,   75,   79,   79,   79,   79,  103,   82,
-       82,   75,   75,  101,   75,   79,   79,    0,   79,  104,
-      106,  107,  103,    0,    0,  105,   75,   75,   82,  102,
-       79,   79,  108,   75,  106,  107,   82,   79,   80,  109,
-
-       80,   80,   80,   80,    0,  110,  111,  112,  113,  114,
-      115,   80,    0,  109,   80,   80,    0,  107,  103,  110,
-      111,  112,  113,  114,  115,  120,   80,    0,    0,  116,
-      106,  109,    0,   80,    0,  117,  118,  110,    0,  120,
-      121,   80,  100,  116,    0,  113,  114,  119,  113,  117,
-      118,  111,  114,  115,  121,  122,  100,  112,  113,    0,
-        0,  119,    0,    0,    0,  123,    0,  124,    0,  122,
-        0,  125,    0,  120,  100,  100,  100,  100,  100,  123,
-      116,  124,  100,    0,  117,  125,  121,  118,  126,    0,
-      100,  100,  100,  127,  100,  128,  129,  119,  130,  131,
-
-      132,    0,  126,  122,  133,  135,    0,  127,  136,  128,
-      129,  134,  130,  131,  132,  123,  138,  124,  133,  135,
-      137,    0,  136,    0,  139,  134,    0,  127,    0,    0,
-      138,  140,    0,  141,  137,  126,  127,  133,  139,  142,
-      132,  129,  130,  127,  128,  140,  132,  141,  138,  134,
-        0,  138,  131,  142,  136,  135,  134,  139,  137,    0,
-      143,  134,  138,  144,  138,  145,  146,  147,  148,    0,
-      180,  140,    0,  141,  143,    0,  137,  144,    0,  145,
-      146,  147,  148,  153,  180,  153,  142,    0,  153,  153,
-      153,  153,  156,  176,  156,  158,  158,  156,  156,  156,
-
-      156,  167,  170,  144,    0,  143,  146,  176,  148,  146,
-        0,    0,  144,  145,  158,  167,  170,  147,  155,  155,
-      155,  155,  158,  159,  159,  159,  159,  166,  168,  155,
-      155,    0,  155,  169,  160,  160,  160,  160,  161,  161,
-      171,  166,  168,  176,  155,  155,  160,  169,  160,    0,
-      172,  155,  167,    0,  171,    0,  170,  161,  173,  174,
-        0,  160,    0,  168,  172,  161,  175,  160,  177,  169,
-      166,    0,  173,  174,  168,  178,  166,  166,  179,  181,
-      175,  182,  177,  183,    0,  171,  172,  184,  185,  178,
-      186,  187,  179,  181,    0,  182,    0,  183,  173,    0,
-
-        0,  184,  185,  188,  186,  187,  189,  200,  173,  179,
-      178,  177,  175,  182,  174,  190,  191,  188,  192,  183,
-      189,  200,  193,  187,  194,  181,    0,  195,  196,  190,
-      191,  197,  192,    0,    0,  184,  193,  185,  194,  186,
-      186,  195,  196,  188,    0,  197,  198,  190,  191,    0,
-      201,  189,  199,    0,  192,  202,  191,  194,  193,  203,
-      198,  204,  193,  195,  201,  206,  199,  197,    0,  202,
-        0,  205,  196,  203,  207,  204,  208,  209,  206,  206,
-      211,  212,  198,  210,  199,  205,  213,    0,  207,  215,
-      208,  209,  216,  210,  211,  212,    0,  210,  214,    0,
-
-      213,  202,  217,  215,  218,  203,  216,  221,  219,  204,
-      207,  205,  214,  209,  208,    0,  217,  222,  218,  220,
-      223,  221,  219,  224,    0,  215,  225,  226,  212,  213,
-      227,  222,  211,  220,  223,  228,  229,  224,  214,    0,
-      225,  226,  230,  216,  227,  231,    0,  232,  233,  228,
-      229,  222,  218,  219,    0,  220,  230,  221,  234,  231,
-      225,  232,  233,    0,  235,    0,  236,  223,  244,  244,
-      246,  228,  234,    0,  224,  249,    0,  226,  235,  227,
-      236,    0,  265,  233,  246,  231,  229,  244,  230,  249,
-      234,  237,  237,  237,  237,  244,  265,  232,  235,  238,
-
-      238,  238,  238,  241,  241,  241,  241,    0,    0,  236,
-      239,  238,  239,  238,  247,  239,  239,  239,  239,  242,
-      242,  242,  242,  248,  250,  249,  238,  251,  247,  252,
-      254,  242,  238,  242,  253,  255,  258,  248,  250,  256,
-        0,  251,  259,  252,  254,  257,  242,  260,  253,  255,
-      258,  261,  242,  256,  247,  262,  259,    0,  263,  257,
-        0,  260,  264,  251,  250,  261,    0,  248,  253,  262,
-      266,  258,  263,    0,  252,    0,  264,  267,  255,  268,
-      254,    0,  269,  257,  266,  255,  270,  261,  256,  259,
-      260,  267,  263,  268,    0,  262,  269,  271,    0,  272,
-
-      270,  275,  273,  276,  274,  277,  278,  279,  264,  280,
-      282,  271,  266,  272,  281,  275,  273,  276,  274,  277,
-      278,  279,    0,  280,  282,    0,  283,  284,  281,  285,
-      286,  269,  272,  287,  275,  288,  270,  271,  273,  274,
-      283,  284,    0,  285,  286,  289,  290,  287,  292,  288,
-      277,  291,  293,  280,  276,  294,  278,  281,  295,  289,
-      290,  279,  292,  291,  296,  291,  293,    0,    0,  294,
-      297,  298,  295,  299,  300,  284,  301,    0,  296,  302,
-      286,  289,  285,  288,  297,  298,  304,  299,  300,  303,
-      301,  290,    0,  302,  305,  307,  296,    0,  292,  306,
-
-      304,  308,  309,  303,  294,  310,  297,  311,  305,  307,
-        0,  298,  312,  306,  313,  308,  309,    0,    0,  310,
-        0,  311,  299,  314,  301,  303,  312,  300,  313,  302,
-      316,  306,  304,    0,  305,  308,  315,  314,  317,  310,
-      318,  311,  320,  319,  316,  309,    0,  312,  307,  323,
-      315,  325,  317,  326,  318,  327,  320,  319,  321,  321,
-      321,  321,  324,  323,    0,  325,  328,  326,  314,  327,
-        0,    0,    0,    0,  315,    0,  324,  329,  320,    0,
-      328,  316,  319,  322,  322,  322,  322,  323,  330,  327,
-      318,  329,  331,  324,  332,  322,  326,  322,  333,  325,
-
-      334,    0,  330,  335,  336,  338,  331,  332,  332,  337,
-      322,  339,  333,  341,  334,  328,  322,  335,  336,  338,
-      329,  340,  342,  337,  330,  339,    0,  341,  343,  344,
-      345,    0,  331,  346,    0,  340,  342,  335,  347,    0,
-      336,  337,  343,  344,  345,  334,  341,  346,  333,  348,
-      338,    0,  347,  340,  349,  350,  339,  351,  352,  343,
-      353,    0,  354,  348,  355,  346,  356,    0,  349,  350,
-      357,  351,  352,  358,  353,  345,  354,  359,  355,    0,
-      356,  347,  360,    0,  357,  348,    0,  358,    0,  361,
-      362,  359,  363,  351,  352,    0,  360,  349,  350,  364,
-
-      355,  365,  357,  361,  362,    0,  363,  353,  366,  354,
-      367,  356,  368,  364,    0,  365,  370,  371,  369,  360,
-      372,  373,  366,  374,  367,  361,  368,  359,  369,  375,
-      370,  371,  369,  376,  372,  373,  377,  374,  378,  379,
-      380,    0,    0,  375,  367,  381,  364,  376,    0,  382,
-      377,  365,  378,  379,  380,  372,  366,  374,  373,  381,
-      383,  370,  368,  382,    0,  376,  384,    0,  385,    0,
-      378,  386,  375,  387,  383,  388,  381,  390,  379,  389,
-      384,  381,  385,  380,    0,  386,  377,  387,  391,  388,
-      392,  390,  393,  389,    0,  394,    0,    0,  384,  397,
-
-      395,  396,  391,  386,  392,  383,  393,  398,  385,  394,
-      389,  397,  399,  397,  395,  396,  401,  390,  400,    0,
-      388,  398,  402,  404,    0,  403,  399,  405,    0,  408,
-      401,    0,  400,  392,    0,  406,  402,  404,  391,  403,
-      407,  405,  393,  408,  394,  395,  396,  409,  399,  406,
-      400,  410,  411,  412,  407,  398,    0,  413,    0,  404,
-        0,  409,  401,    0,  414,  410,  411,  412,  415,  416,
-      405,  413,  402,    0,  403,  407,  406,  407,  414,  417,
-      408,  418,  415,  416,  419,  407,  410,  407,  420,  412,
-      421,  422,    0,  417,  423,  418,  409,  424,  419,  425,
-
-      426,    0,  420,  427,  421,  422,  411,  413,  423,  428,
-      429,  424,  430,  425,  426,  416,  431,  427,  432,  433,
-      434,    0,  435,  428,  429,  417,  430,  436,  437,  424,
-      431,    0,  432,  433,  434,  425,  435,  438,  420,  439,
-      440,  436,  437,  441,  443,  428,  442,  444,  445,    0,
-      426,  438,  446,  439,  440,  447,  448,  441,  443,  449,
-      442,  444,  445,  434,  450,  451,  446,    0,    0,  447,
-      448,  439,  435,  449,  452,    0,    0,  437,  450,  451,
-      441,  445,  442,  453,    0,    0,  440,  443,  452,  448,
-      444,  454,  455,  456,  457,  458,  460,  453,  446,  449,
-
-      459,  461,  462,  463,  464,  454,  455,  456,  457,  458,
-      460,  465,  466,    0,  459,  461,  462,  463,  464,    0,
-      467,  452,    0,    0,    0,  465,  466,  454,  468,  457,
-      471,  469,  453,  456,  467,  470,  460,  459,  458,  472,
-      464,  461,  468,  465,  471,  469,  463,  465,  473,  470,
-      474,  475,  466,  472,  476,  477,  478,    0,  479,  480,
-      481,  482,  473,  483,  474,  475,  467,  469,  476,  477,
-      478,  470,  479,  480,  481,  482,  468,  483,  484,  485,
-      486,  487,  488,    0,  489,    0,  490,  491,    0,  477,
-      478,  493,  484,  485,  486,  487,  488,  483,  489,  475,
-
-      490,  491,  476,    0,  492,  493,  494,  495,  481,  496,
-      498,  500,  501,  486,  480,  497,    0,  488,  492,  499,
-      494,  495,  490,  496,  498,  500,  501,  484,  485,  497,
-      491,  502,    0,  499,  503,    0,    0,    0,  504,  505,
-        0,  492,  493,  495,  498,  502,  497,  506,  503,  496,
-      499,  494,  504,  505,  500,  507,  508,  509,  511,    0,
-        0,  506,  510,  512,  513,  514,    0,  515,  517,  507,
-      508,  509,  511,  505,  502,  516,  510,  512,  513,  514,
-      503,  515,  517,    0,  518,    0,  519,  520,  509,  516,
-        0,  521,  507,  522,  512,  523,    0,  506,  518,  517,
-
-      519,  520,  524,  525,  507,  521,  515,  522,  510,  523,
-      508,  516,  526,  527,  513,  514,  524,  525,  528,  529,
-        0,  530,  532,  531,  533,  519,  526,  527,  534,    0,
-      535,  536,  528,  529,  522,  530,  532,  531,  533,  525,
-      521,    0,  534,  526,  535,  536,  537,  538,  539,  528,
-      540,  541,    0,  529,  531,  533,  542,  543,    0,  534,
-      537,  538,  539,  527,  540,  541,  535,  530,  544,  545,
-      542,  543,  532,    0,  546,  547,  536,  548,    0,  538,
-      539,  549,  544,  545,  550,  551,  552,  541,  546,  547,
-      540,  548,  542,  553,  554,  549,  537,    0,  550,  551,
-
-      552,    0,  555,  556,  543,  558,    0,  553,  554,  559,
-        0,  547,  560,  561,  544,  549,  555,  556,  557,  558,
-      557,  562,  552,  559,  550,  554,  560,  561,  563,    0,
-      564,  565,  557,  566,  567,  562,    0,  568,  555,  569,
-      570,    0,  563,  560,  564,  565,  571,  566,  567,  572,
-      558,  568,  562,  569,  570,  556,  573,  574,  575,  563,
-      571,  564,  577,  572,  576,  583,  578,  579,    0,  581,
-      573,  574,  575,    0,  569,  568,  577,  582,  576,  583,
-      578,  579,  571,  581,    0,  567,    0,  584,  585,  574,
-        0,  582,  586,  587,  570,  588,  572,  578,  576,  579,
-
-      581,  584,  585,  575,  573,  589,  586,  587,  582,  588,
-      590,  591,  592,  593,  595,  594,  601,  597,  584,  589,
-      596,    0,  602,  600,  590,  591,  592,  593,  595,  594,
-      601,  597,  603,    0,  596,  586,  602,  600,  587,    0,
-        0,    0,  604,  605,    0,  606,  603,  591,  597,    0,
-        0,  596,  589,  594,  600,  596,  604,  605,  590,  606,
-      607,  592,  608,  593,  595,  609,  610,  611,    0,  612,
-      613,  614,  615,  616,  607,  605,  608,  617,  604,  609,
-      610,  611,  603,  612,  613,  614,  615,  616,  618,    0,
-        0,  617,    0,  619,  620,  606,  621,  622,  623,  624,
-
-        0,  609,  618,  614,  616,  607,  613,  619,  620,  625,
-      621,  622,  623,  624,  614,  626,  627,  628,  629,    0,
-        0,  630,  631,  625,  632,  617,  633,  634,  635,  626,
-      627,  628,  629,  618,  621,  630,  631,  637,  632,  624,
-      633,  634,  635,  636,  622,  638,  623,  639,  619,  641,
-        0,  637,  640,    0,  642,    0,  625,  636,  643,  638,
-      631,  639,    0,  641,  629,  627,  640,  634,  642,  630,
-      644,  645,  643,  632,  633,  646,  635,  647,  648,  636,
-      649,    0,  650,  651,  644,  645,  652,  653,  642,  646,
-        0,  647,  648,  639,  649,  638,  650,  651,  640,  654,
-
-      652,  653,    0,    0,  641,  655,  657,  656,    0,  647,
-      658,  659,    0,  654,  648,    0,  645,  644,    0,  655,
-      657,  656,  652,    0,  658,  659,    0,    0,    0,    0,
-        0,  651,  650,    0,  654,    0,    0,  653,  656,    0,
-        0,  658,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      655,  661,  661,  661,  661,  661,  661,  661,  662,  662,
-        0,  662,  662,  662,  662,  663,    0,    0,  663,  663,
-      663,  664,  664,  665,  665,  666,  666,  666,  667,  667,
-      668,  668,  668,  668,  660,  660,  660,  660,  660,  660,
-
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
-      660,  660,  660,  660,  660
+        1,    1,    1,    1,    1,    1,   10,   13,   13,   14,
+       19,  661,   22,   21,   22,   22,   22,   22,   30,   30,
+       23,   32,   19,   21,   21,   23,   14,   40,   33,   25,
+
+       25,   25,   25,   23,   26,   32,   28,   61,   26,  641,
+      176,   40,   33,   10,   24,   57,   24,   24,   24,   24,
+       25,   28,   34,   28,   28,   39,   34,   34,  101,   24,
+       98,   47,   24,   24,   24,   96,   24,   24,   95,   39,
+       34,   43,   38,   91,   61,   47,   49,   24,   25,   33,
+       40,   24,   24,   41,   24,   43,   38,   42,   44,   97,
+       49,   57,   24,   38,   38,   24,   45,   41,   38,   85,
+       46,   42,   44,   97,   48,   39,   69,   76,   38,   39,
+       45,   39,   47,   38,   46,   69,   63,   38,   48,   43,
+       41,   43,  100,   68,   42,   42,   38,   41,   42,   49,
+
+       43,   41,   49,   44,   41,   42,   44,   45,   42,   44,
+       37,   48,   46,   50,   51,   48,   52,   45,   53,   46,
+       46,   29,   54,   99,   46,   68,   18,   50,   51,  100,
+       52,  107,   53,   83,   55,   83,   54,   99,   83,   83,
+       83,   83,  105,  103,   15,  107,    9,  104,   55,  174,
+      108,  109,  110,    3,   50,   51,  105,  103,   51,   51,
+       52,  104,    0,   53,  108,  109,  110,   54,   53,   51,
+       51,   55,   51,   54,   99,  111,   52,    0,   55,   77,
+       77,   77,   77,   84,   84,   84,  174,   84,    0,  111,
+      107,  105,   77,   77,  103,   77,   77,   77,  104,    0,
+
+      108,    0,   84,   84,    0,   84,  109,    0,  112,    0,
+       77,   77,  110,   84,   77,   77,  114,   77,   81,   81,
+       81,   81,  112,  113,  111,  118,  119,    0,  115,  116,
+      114,   81,   81,  117,   81,   81,   81,  113,  125,  118,
+      119,  121,  115,  116,  120,    0,    0,  117,    0,   81,
+       81,    0,  125,   81,   81,  121,   81,   82,  120,   82,
+       82,   82,   82,  112,  113,  115,  116,    0,  119,    0,
+      114,  119,   82,  122,  123,   82,   82,   82,    0,   82,
+      118,  119,  124,  117,  126,  127,  120,  122,  123,  121,
+       82,    0,  120,  125,   82,   82,  124,   82,  126,  127,
+
+      128,  129,  130,  131,  135,   82,  106,    0,  137,  141,
+      132,  134,    0,  169,  128,  129,  130,  131,  135,  133,
+      106,  136,  137,  141,  132,  134,  138,  169,  123,  122,
+        0,    0,    0,  133,  139,  136,  127,  126,  124,    0,
+      138,  140,    0,  106,  106,  106,  106,  106,  139,    0,
+        0,  106,    0,  128,  135,  140,  129,  130,  133,  106,
+      106,  106,  132,  106,  141,  134,  137,  133,  142,  143,
+      136,  138,  139,  144,  133,  146,  145,  138,  147,  148,
+      150,    0,  142,  143,  140,  149,  151,  144,  152,  146,
+      145,  140,  147,  148,  150,  140,  140,  153,    0,  149,
+
+      151,  154,  152,  165,  165,  165,  165,  194,  177,    0,
+      144,  153,  143,  144,  145,  154,    0,    0,  214,  142,
+      146,  194,  177,  147,  144,  150,  144,  188,    0,    0,
+      143,  148,  214,  152,  150,  149,  152,    0,    0,  151,
+        0,  188,  159,  173,  159,    0,  154,  159,  159,  159,
+      159,  160,  153,  160,  160,  160,  162,  173,  162,  177,
+      178,  162,  162,  162,  162,    0,  164,  164,  164,  160,
+      164,  188,  160,  160,  178,  160,  161,  161,  161,  161,
+      163,  183,  163,  163,  163,  164,  164,  188,  164,  161,
+      161,  173,  161,  161,  161,  183,  164,    0,  163,  179,
+
+        0,  163,  163,    0,  163,    0,  180,  161,  161,  178,
+      181,  161,  161,  179,  161,  166,  166,  166,  166,  168,
+      180,  184,  183,    0,  181,    0,    0,    0,  182,  166,
+      186,  166,  166,  166,  185,  184,  179,  168,  168,  168,
+      168,  168,  182,    0,  186,    0,    0,  166,  185,    0,
+      166,  166,    0,  166,  180,  187,  168,  168,  189,  168,
+      180,  180,  190,  168,  191,    0,  181,  168,  182,  187,
+        0,  186,  189,  192,  195,  193,  190,  196,  191,  182,
+      184,  197,  198,  199,  185,  200,    0,  192,  195,  193,
+      201,  196,  203,  202,  204,  197,  198,  199,    0,  200,
+
+      187,    0,  206,    0,  201,  207,  203,  202,  204,  189,
+      187,  193,  191,  192,  196,  205,  206,  190,  208,  207,
+      209,    0,  197,    0,    0,  195,    0,  201,    0,  205,
+      210,  204,  208,  211,  209,  198,    0,  199,  202,  200,
+      200,  212,  203,  206,  210,  215,  207,  211,  213,  216,
+      207,  217,  205,  218,  219,  212,  208,  220,  222,  215,
+      205,  209,  213,  216,  221,  217,  223,  218,  219,    0,
+      220,  220,  222,  224,  211,  225,  226,  227,  221,  210,
+      223,  228,  212,  224,  230,  213,    0,  224,    0,  225,
+      226,  227,    0,    0,  229,  228,  231,  232,  230,  219,
+
+      216,  222,  217,  233,  234,  221,  218,  223,  229,  235,
+      231,  232,    0,  236,    0,  238,  237,  233,  234,  239,
+      240,    0,  241,  235,  242,  227,  228,  236,  226,  238,
+      237,  243,  225,  239,  240,  229,  241,  244,  242,  230,
+        0,    0,    0,  245,  246,  243,  247,  248,  249,  250,
+      235,  244,  231,    0,  234,  237,  233,  245,  246,  240,
+      247,  248,  249,  250,    0,  251,    0,  238,  236,    0,
+      263,    0,  243,    0,    0,  239,  264,  241,  242,  251,
+      252,  252,  252,  252,  263,  249,  267,  248,  250,  246,
+      264,  266,  244,  265,  245,  253,  253,  253,  253,    0,
+
+      267,  247,    0,    0,  254,  266,  254,  265,  253,  254,
+      254,  254,  254,  251,  255,    0,  255,  255,  255,  256,
+      256,  256,  256,    0,  264,    0,  253,  257,  257,  257,
+      257,  267,  255,    0,  266,  255,  255,  270,  255,  258,
+      257,  258,  258,  258,  259,  265,  259,  259,  259,  259,
+      277,  270,    0,  283,    0,  269,  272,  258,  257,    0,
+      258,  258,  259,  258,  277,  259,  259,  283,  259,  269,
+      272,    0,  259,  260,  260,  260,  260,  261,  261,  261,
+      268,  261,  270,  260,  260,  260,  260,  260,    0,  260,
+      260,  260,  260,  277,  268,    0,  261,  261,  283,  261,
+
+      260,  260,  260,  260,  260,  260,  272,  261,  260,  260,
+      269,  260,  262,  271,  262,  260,  273,  262,  262,  262,
+      262,  274,  275,  278,  276,  281,  279,  271,  280,  268,
+      273,  282,  284,  285,  286,  274,  275,  278,  276,  281,
+      279,    0,  280,  287,  288,  282,  284,  285,  286,    0,
+      289,  290,  291,  292,  271,  273,    0,  287,  288,    0,
+      294,  293,    0,  278,  289,  290,  291,  292,  295,  297,
+      275,  284,  282,  281,  294,  293,  274,  275,  276,  279,
+      280,  296,  295,  297,  285,    0,  298,    0,  299,  300,
+      287,    0,  301,    0,    0,  296,  302,  303,  292,  293,
+
+      298,  294,  299,  300,  304,  290,  301,  291,  295,  305,
+      302,  303,  306,  307,  308,  310,  309,  311,  304,  296,
+      312,  313,    0,  305,  314,  297,  306,  307,  308,  310,
+      309,  311,  312,  315,  312,  313,  298,  316,  314,  318,
+      317,  301,    0,  299,  302,  319,  320,  315,  300,  321,
+      322,  316,  323,  318,  317,    0,  310,  324,  325,  319,
+      320,  327,  305,  321,  322,  326,  323,  311,  307,  309,
+      306,  324,  325,    0,  328,  327,  313,  317,  329,  326,
+      318,  330,  331,  332,  333,    0,    0,  315,  328,    0,
+      319,    0,  329,    0,  334,  330,  331,  332,  333,  325,
+
+      320,  335,    0,  322,  336,  323,  327,  321,  334,    0,
+      337,  328,  324,  338,  339,  335,  326,  340,  336,  341,
+      330,  342,  332,  333,  337,    0,    0,  338,  339,    0,
+      331,  340,    0,  341,  334,  342,  329,  343,  343,  343,
+      343,    0,  344,  344,  344,  344,  346,  354,  346,  346,
+      346,  355,  356,  337,  336,  344,  352,  352,  352,  352,
+        0,  354,  342,  341,  346,  355,  356,  346,  346,  338,
+      346,    0,  340,  344,  347,  357,  347,    0,    0,  347,
+      347,  347,  347,  348,  360,  348,  348,  348,  348,  357,
+        0,  350,  358,  350,  350,  350,  359,  356,  360,  355,
+
+        0,  348,    0,  361,  348,  348,  358,  348,    0,  350,
+      359,  348,  350,  350,  351,  350,  351,  361,  357,  351,
+      351,  351,  351,  353,  353,  353,  353,    0,  358,  362,
+      363,  364,  360,  366,  365,    0,  367,  353,  368,  353,
+      353,  353,  361,  362,  363,  364,  366,  366,  365,  359,
+      367,  369,  368,  370,  371,  353,  372,  373,  353,  353,
+      374,  353,  375,  376,    0,  369,  377,  370,  371,    0,
+      372,  373,  364,  378,  374,  379,  375,  376,  363,  365,
+      377,    0,  380,  362,  381,    0,  382,  378,  368,  379,
+      369,  367,  383,  372,  370,  371,  380,  384,  381,  375,
+
+      382,  376,  385,  386,  388,  387,  383,  373,  389,  378,
+      374,  384,  390,  391,  392,  393,  385,  386,  388,  387,
+        0,  381,  389,  394,  395,  397,  390,  391,  392,  393,
+        0,    0,  380,  383,  382,  396,    0,  394,  395,  397,
+      398,  399,    0,  400,  386,  384,  387,  401,  402,  396,
+      385,  392,    0,  390,  398,  399,  388,  400,  403,  404,
+      389,  401,  402,  391,    0,  405,  395,  406,  407,  404,
+      409,  408,  403,  404,  411,  410,  396,  413,  394,  405,
+      415,  406,  407,  412,  409,  408,    0,  402,  411,  410,
+      414,  413,  416,  399,  415,  417,    0,  412,  400,    0,
+
+      401,  418,  419,    0,  414,  420,  416,    0,    0,  417,
+      405,  408,  409,  403,  410,  418,  419,  406,    0,  420,
+      412,  421,  411,  422,  415,  423,    0,  414,    0,    0,
+        0,  417,  413,    0,    0,  421,  417,  422,    0,  423,
+      416,    0,  420,  424,  424,  424,  424,  429,  429,  429,
+      429,  433,  419,  427,    0,  427,  427,  427,  446,  432,
+      422,    0,    0,    0,  437,  433,  421,  425,  425,  425,
+      425,  427,  446,  432,  427,  427,  434,  427,  437,    0,
+        0,  425,  435,  425,  425,  425,  428,    0,  428,    0,
+      434,  428,  428,  428,  428,  446,  435,    0,    0,  425,
+
+      432,  433,  425,  425,    0,  425,  430,  430,  430,  430,
+      431,  436,  431,  431,  431,  438,  439,    0,  435,  437,
+      430,  440,  430,  430,  430,  436,  434,    0,  431,  438,
+      439,  431,  431,  441,  431,  440,  442,  443,  430,  444,
+      445,  430,  430,  447,  430,  448,  449,  441,  450,  443,
+      442,  443,  451,  444,  445,  452,  436,  447,  453,  448,
+      449,    0,  450,  438,  455,  454,  451,    0,  456,  452,
+      457,  439,  453,  458,  460,  440,  461,  459,  455,  454,
+      447,  445,  456,  441,  457,  462,  442,  458,  460,    0,
+      461,  459,  444,  451,  463,  464,  448,  465,  466,  462,
+
+      467,  449,  450,  452,  453,  454,    0,  454,  463,  464,
+      457,  465,  466,  468,  467,  454,  469,  454,  459,  470,
+      455,  471,  456,  472,  473,  474,  475,  468,  476,  460,
+      469,    0,  458,  470,  477,  471,  478,  472,  473,  474,
+      475,    0,  476,  479,    0,  463,  464,  480,  477,  481,
+      478,  482,  483,    0,  484,  467,  485,  479,  471,    0,
+      486,  480,  488,  481,  472,  482,  483,  475,  484,  487,
+      485,  490,  489,  477,  486,  491,  488,  492,  493,  473,
+        0,    0,    0,  487,  497,  490,  489,  496,  498,  491,
+      499,  492,  493,  494,  494,  494,  494,  500,  497,  482,
+
+        0,  496,  498,  501,  499,  502,  487,  483,  503,    0,
+      485,  500,  490,  488,  489,    0,  493,  501,  504,  502,
+      505,  497,  503,  491,  506,  492,  495,  495,  495,  495,
+        0,  507,  504,  508,  505,  500,  509,  510,  506,  498,
+      495,  511,  495,  495,  495,  507,  496,  508,  501,  512,
+      509,  510,  513,  514,  515,  511,    0,  516,  495,  517,
+        0,  495,  495,  512,  495,  506,  513,  514,  515,  518,
+      504,  516,  519,  517,  505,  520,  509,    0,  508,  521,
+      522,  511,  523,  518,    0,  510,  519,  524,  525,  520,
+      526,  512,    0,  521,  522,  527,  523,  513,  514,  528,
+
+      517,  524,  525,    0,  526,  516,  518,    0,  529,  527,
+      518,  530,    0,  528,  531,  532,  533,  519,    0,  534,
+      535,  522,  529,  523,  536,  530,  520,  537,  531,  532,
+      533,  538,  521,  534,  535,  539,    0,  541,  536,    0,
+      540,  537,  542,  543,  545,  538,  544,    0,  546,  539,
+      530,  541,  528,  531,  540,  547,  542,  543,  545,  548,
+      544,  529,  546,  549,    0,  550,  537,  552,    0,  547,
+      551,    0,  534,  548,  553,  535,  533,  549,  540,  550,
+      555,  552,  542,  554,  551,  538,  556,  544,  553,  539,
+      557,  558,  545,  559,  555,  560,    0,  554,    0,  561,
+
+      556,  548,    0,  562,  557,  558,  563,  559,  547,  560,
+      553,  551,  552,  561,  564,  550,  555,  562,  565,  549,
+      563,  566,  554,  567,  568,  570,  569,    0,  564,  571,
+      573,  572,  565,  574,  556,  566,  575,  567,  568,  570,
+      569,  559,  562,  571,  573,  572,  560,  574,    0,  576,
+      575,  577,  578,  579,    0,    0,  564,  566,  580,  581,
+        0,  563,  569,  576,  582,  577,  578,  579,  564,  574,
+        0,  573,  580,  581,  567,  572,  583,  565,  582,  584,
+      570,    0,  585,  586,  571,  587,  588,  590,  591,  589,
+      583,  592,  593,  584,  594,  577,  585,  586,  595,  587,
+
+      588,  590,  591,  589,  580,  592,  593,  579,  594,    0,
+      596,    0,  595,    0,    0,  597,  598,  583,  585,  599,
+      600,  587,  601,  590,  596,  588,    0,  592,  593,  597,
+      598,  602,  604,  599,  600,  594,  601,  603,  586,  584,
+      589,  605,  607,  591,  606,  602,  604,    0,  595,    0,
+        0,  603,  597,  598,  608,  605,  607,  609,  606,  610,
+      611,  600,  612,  601,  599,  596,  613,  614,  608,    0,
+      615,  609,  616,  610,  611,  617,  612,  617,  618,    0,
+      613,  614,  619,  602,  615,  606,  616,    0,  603,  617,
+      620,  621,  618,  608,  622,  623,  619,    0,  624,  625,
+
+      626,  611,  609,  614,  620,  621,  627,  628,  622,  623,
+      630,  615,  624,  625,  626,    0,    0,    0,  629,  631,
+      627,  628,  632,  616,  630,  633,  620,  634,  618,  616,
+      622,  623,  629,  631,  624,  635,  632,  636,  637,  633,
+      639,  634,  644,  638,    0,  642,    0,  640,    0,  635,
+      628,  636,  637,  643,  639,    0,  644,  638,  629,  642,
+      631,  640,  627,  645,  634,    0,  646,  643,    0,  630,
+        0,    0,  647,  648,  632,    0,  636,  645,  633,  638,
+      646,  642,  639,  649,  640,  635,  647,  648,  650,  643,
+      651,  652,  653,  654,  655,  656,  663,  649,  657,  645,
+
+      658,  664,  650,  659,  651,  652,  653,  654,  655,  656,
+      663,  662,  657,  665,  658,  664,  666,  659,    0,  667,
+      647,  668,  669,  648,    0,  662,    0,  665,    0,    0,
+      666,  670,  652,  667,  657,  668,  669,  655,  657,  659,
+      650,  671,  658,  651,  672,  670,  653,  662,  654,  673,
+      656,  674,  675,  676,    0,  671,  667,  666,  672,  678,
+      677,  680,    0,  673,  679,  674,  675,  676,  665,  681,
+      682,  683,  669,  678,  677,  680,  668,  684,  679,    0,
+      685,  686,  671,  681,  682,  683,    0,  687,  688,  689,
+      690,  684,  691,  675,  685,  686,  692,  677,  693,  694,
+
+      679,  687,  688,  689,  690,    0,  691,  676,  677,  695,
+      692,  696,  693,  694,  680,  697,    0,  698,    0,  681,
+      684,  699,  686,  695,  700,  696,    0,    0,  702,  697,
+      682,  698,  685,  688,  701,  699,  703,  704,  700,  705,
+      687,  689,  702,  706,  707,  708,  691,  709,  701,  693,
+      703,  704,  694,  705,  696,    0,    0,  706,  707,  708,
+      710,  709,  711,    0,  695,    0,  699,  712,  713,  697,
+      698,  714,  715,  717,  710,  701,  711,  700,    0,  702,
+        0,  712,  713,  716,  708,  714,  715,  717,  718,  709,
+      705,  719,  704,  720,  706,  721,  722,  716,  723,  724,
+
+        0,  725,  718,    0,  707,  719,  726,  720,  714,  721,
+      722,  727,  723,  724,  711,  725,    0,  712,    0,    0,
+      726,    0,    0,    0,  716,  727,    0,    0,    0,    0,
+        0,    0,    0,    0,  720,  724,  722,    0,    0,    0,
+        0,    0,  726,  718,  719,    0,    0,    0,    0,    0,
+      721,    0,    0,    0,    0,    0,    0,    0,  723,  729,
+      729,  729,  729,  729,  729,  729,  729,  730,  730,    0,
+      730,  730,  730,  730,  730,  731,    0,    0,    0,  731,
+      731,  731,  732,  732,  732,  733,  733,  734,  734,  734,
+      734,  734,  734,  734,  734,  735,  735,  736,    0,  736,
+
+      736,  736,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
+      728,  728,  728,  728,  728,  728,  728,  728,  728
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1077,9 +1192,11 @@ static char *yy_last_accepting_cpos;
 char *yytext;
 #line 1 "lexer.l"
 #define INITIAL 0
-#line 10 "lexer.l"
+#define YY_NO_UNPUT 1
+#line 13 "lexer.l"
 import "ecdefs"
 #define YYLTYPE Location
+#define YY_NEVER_INTERACTIVE 1    // Avoid calling isatty on eC File object
 
 #include "grammar.h"
 
@@ -1117,7 +1234,7 @@ void TESTTTT()
 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
 File fileStack[MAX_INCLUDE_DEPTH];
 char sourceFileStack[MAX_INCLUDE_DEPTH][MAX_LOCATION];
-public void SetSomeSourceFileStack(char * fileName, int index) { strcpy(sourceFileStack[index], fileName); }
+public void SetSomeSourceFileStack(const char * fileName, int index) { strcpy(sourceFileStack[index], fileName); }
 YYLTYPE locStack[MAX_INCLUDE_DEPTH];
 AccessMode declModeStack[MAX_INCLUDE_DEPTH];
 int include_stack_ptr = 0;
@@ -1125,7 +1242,7 @@ int include_stack_ptr = 0;
 #define uint _uint
 default:
 
-#line 1129 "lexer.ec"
+#line 1246 "lexer.ec"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1276,16 +1393,16 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
 
-#line 59 "lexer.l"
+#line 63 "lexer.l"
 
 
 
-   yylloc.start = yylloc.end; 
-   type_yylloc.start = type_yylloc.end; 
-   expression_yylloc.start = expression_yylloc.end; 
+   yylloc.start = yylloc.end;
+   type_yylloc.start = type_yylloc.end;
+   expression_yylloc.start = expression_yylloc.end;
 
 
-#line 1289 "lexer.ec"
+#line 1406 "lexer.ec"
 
        if ( yy_init )
                {
@@ -1336,13 +1453,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 661 )
+                               if ( yy_current_state >= 729 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 2195 );
+               while ( yy_base[yy_current_state] != 2603 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1370,107 +1487,107 @@ do_action:    /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 67 "lexer.l"
+#line 71 "lexer.l"
 { preprocessor(); }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 68 "lexer.l"
+#line 72 "lexer.l"
 { comment(); }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 69 "lexer.l"
+#line 73 "lexer.l"
 { commentCPP(); }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 71 "lexer.l"
+#line 75 "lexer.l"
 { return(AUTO); }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 72 "lexer.l"
+#line 76 "lexer.l"
 { return(BREAK); }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 73 "lexer.l"
+#line 77 "lexer.l"
 { return(CASE); }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 74 "lexer.l"
+#line 78 "lexer.l"
 { return(CHAR); }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 75 "lexer.l"
+#line 79 "lexer.l"
 { return(CONST); }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 76 "lexer.l"
+#line 80 "lexer.l"
 { return(CONTINUE); }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 77 "lexer.l"
+#line 81 "lexer.l"
 { return(DEFAULT); }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 78 "lexer.l"
+#line 82 "lexer.l"
 { return(DO); }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 79 "lexer.l"
+#line 83 "lexer.l"
 { return(DOUBLE); }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 80 "lexer.l"
+#line 84 "lexer.l"
 { return(ELSE); }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 81 "lexer.l"
+#line 85 "lexer.l"
 { return(ENUM); }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 82 "lexer.l"
+#line 86 "lexer.l"
 { return(EXTERN); }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 83 "lexer.l"
+#line 87 "lexer.l"
 { return(FLOAT); }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 84 "lexer.l"
+#line 88 "lexer.l"
 { return(FOR); }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 85 "lexer.l"
+#line 89 "lexer.l"
 { return(GOTO); }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 86 "lexer.l"
+#line 90 "lexer.l"
 { return(IF); }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 87 "lexer.l"
+#line 91 "lexer.l"
 { return(INT); }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 88 "lexer.l"
+#line 92 "lexer.l"
 { return(UINT); }
        YY_BREAK
 /* "uint16"            { return(UINT16); } */
@@ -1478,194 +1595,229 @@ YY_RULE_SETUP
 /* "bool"              { return(BOOL_TOKEN); } */
 case 22:
 YY_RULE_SETUP
-#line 92 "lexer.l"
+#line 96 "lexer.l"
 { return(LONG); }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 93 "lexer.l"
+#line 97 "lexer.l"
 { return(REGISTER); }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 94 "lexer.l"
+#line 98 "lexer.l"
 { return(RETURN); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 95 "lexer.l"
+#line 99 "lexer.l"
 { return(SHORT); }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 96 "lexer.l"
+#line 100 "lexer.l"
 { return(SIGNED); }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 97 "lexer.l"
+#line 101 "lexer.l"
 { return(SIGNED); }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 98 "lexer.l"
+#line 102 "lexer.l"
 { return(SIGNED); }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 99 "lexer.l"
+#line 103 "lexer.l"
 { return(SIZEOF); }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 100 "lexer.l"
+#line 104 "lexer.l"
 { return(ALIGNOF); }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 101 "lexer.l"
-{ return(STATIC); }
+#line 105 "lexer.l"
+{ return(BUILTIN_OFFSETOF); }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 102 "lexer.l"
-{ return(STRUCT); }
+#line 106 "lexer.l"
+{ return(STATIC); }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 103 "lexer.l"
-{ return(SWITCH); }
+#line 107 "lexer.l"
+{ return(THREAD); }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 104 "lexer.l"
-{ return(TYPEDEF); }
+#line 108 "lexer.l"
+{ return(STRUCT); }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 105 "lexer.l"
-{ return(UNION); }
+#line 109 "lexer.l"
+{ return(SWITCH); }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 106 "lexer.l"
-{ return(UNSIGNED); }
+#line 110 "lexer.l"
+{ return(TYPEDEF); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 107 "lexer.l"
-{ return(VOID); }
+#line 111 "lexer.l"
+{ return(UNION); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 108 "lexer.l"
-{ return(VOLATILE); }
+#line 112 "lexer.l"
+{ return(UNSIGNED); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 109 "lexer.l"
-{ return(VOLATILE); }
+#line 113 "lexer.l"
+{ return(VOID); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 110 "lexer.l"
+#line 114 "lexer.l"
 { return(VOLATILE); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 111 "lexer.l"
-{ return(WHILE); }
+#line 115 "lexer.l"
+{ return(VOLATILE); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 113 "lexer.l"
-{ return(PROPERTY); }
+#line 116 "lexer.l"
+{ return(VOLATILE); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 114 "lexer.l"
-{ return(SETPROP); }    // TODO: Don't make this a keyword...
+#line 117 "lexer.l"
+{ return(WHILE); }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 115 "lexer.l"
-{ return(GETPROP); }    // TODO: Don't make this a keyword...
+#line 119 "lexer.l"
+{ return(PROPERTY); }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 116 "lexer.l"
-{ return(ISPROPSET); }    // TODO: Don't make this a keyword...
+#line 120 "lexer.l"
+{ return(SETPROP); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 117 "lexer.l"
-{ return(CLASS); }
+#line 121 "lexer.l"
+{ return(GETPROP); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 118 "lexer.l"
-{ return(THISCLASS); }
+#line 122 "lexer.l"
+{ return(ISPROPSET); }    // TODO: Don't make this a keyword...
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 119 "lexer.l"
-{ return(VIRTUAL); }
+#line 123 "lexer.l"
+{ return(CLASS); }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 120 "lexer.l"
-{ return(DELETE); }
+#line 124 "lexer.l"
+{ return(THISCLASS); }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 121 "lexer.l"
-{ return(NEWOP); }
+#line 125 "lexer.l"
+{ return(VIRTUAL); }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 122 "lexer.l"
-{ return(NEW0OP); }
+#line 126 "lexer.l"
+{ return(DELETE); }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 123 "lexer.l"
-{ return(RENEW); }
+#line 127 "lexer.l"
+{ return(NEWOP); }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 124 "lexer.l"
-{ return(RENEW0); }
+#line 128 "lexer.l"
+{ return(NEW0OP); }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 125 "lexer.l"
-{ return(IMPORT); }
+#line 129 "lexer.l"
+{ return(RENEW); }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 126 "lexer.l"
-{ return(DEFINE); }
+#line 130 "lexer.l"
+{ return(RENEW0); }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 127 "lexer.l"
-{ return(INT64); }
+#line 131 "lexer.l"
+{ return(IMPORT); }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 128 "lexer.l"
-{ return(INT64); }
+#line 132 "lexer.l"
+{ return(DEFINE); }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 129 "lexer.l"
-{ return(VALIST); }
+#line 133 "lexer.l"
+{ return(INT64); }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 130 "lexer.l"
+#line 134 "lexer.l"
+{ return(INT64); }
+       YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 135 "lexer.l"
+{ return(VALIST); }
+       YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 136 "lexer.l"
 { return(VAARG); }
        YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 137 "lexer.l"
+{ return(BOOL); }
+       YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 138 "lexer.l"
+{ return(_BOOL); }
+       YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 139 "lexer.l"
+{ return(_COMPLEX); }
+       YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 140 "lexer.l"
+{ return(_IMAGINARY); }
+       YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 141 "lexer.l"
+{ return(EXT_DECL); }
+       YY_BREAK
 /* "__attribute__".?"(("({D}|{L})*"))" { return(EXT_ATTRIB); } */
 /* DID I MEAN? "__attribute__"" "*"(("" "*({D}|{L})*" "*("("({D}|{L})*(" "*","" "*({D}|{L})*)*" "*")")?" "*"))" { return(EXT_ATTRIB); } */
 /*
@@ -1675,535 +1827,562 @@ YY_RULE_SETUP
  */
 /*
  [__attribute__] [spaces]
-   [((] [spaces] 
+   [((] [spaces]
       [digits | letters] [spaces]
          ( [(]  [digits or letters or "]  ( [spaces] [,] [spaces] [digits or letters or "] )*  [spaces]  [)] )?
       [spaces]
       ( [,] [spaces]  [digits or letters]  [spaces]
          ( [(]  [digits or letters or "]
             ( [spaces] [,] [spaces] [digits or letters or "] )*  [spaces] [)]
-         )? [spaces] 
+         )? [spaces]
       )*
    [))]
  */
 /* "__attribute__".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); } */
 /* "__attribute".?"((".?({D}|{L})*.?("("({D}|{L})*(.?",".?({D}|{L})*)*.?")")?.?"))" { return(EXT_ATTRIB); }*/
-case 60:
+case 67:
 YY_RULE_SETUP
-#line 157 "lexer.l"
+#line 168 "lexer.l"
 { return ATTRIB_DEP; }
        YY_BREAK
-case 61:
+case 68:
 YY_RULE_SETUP
-#line 158 "lexer.l"
+#line 169 "lexer.l"
 { return ATTRIB; }
        YY_BREAK
-case 62:
+case 69:
 YY_RULE_SETUP
-#line 159 "lexer.l"
+#line 170 "lexer.l"
 { return __ATTRIB; }
        YY_BREAK
-case 63:
+case 70:
 YY_RULE_SETUP
-#line 161 "lexer.l"
+#line 172 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 64:
+case 71:
 YY_RULE_SETUP
-#line 162 "lexer.l"
+#line 173 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 65:
+case 72:
 YY_RULE_SETUP
-#line 163 "lexer.l"
+#line 174 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 66:
+case 73:
 YY_RULE_SETUP
-#line 164 "lexer.l"
+#line 175 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 67:
+case 74:
 YY_RULE_SETUP
-#line 165 "lexer.l"
+#line 176 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 68:
+case 75:
 YY_RULE_SETUP
-#line 166 "lexer.l"
+#line 177 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 69:
+case 76:
 YY_RULE_SETUP
-#line 167 "lexer.l"
+#line 178 "lexer.l"
 { return(EXT_STORAGE); }
        YY_BREAK
-case 70:
+case 77:
 YY_RULE_SETUP
-#line 168 "lexer.l"
+#line 179 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 71:
+case 78:
 YY_RULE_SETUP
-#line 169 "lexer.l"
+#line 180 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 72:
+case 79:
 YY_RULE_SETUP
-#line 170 "lexer.l"
+#line 181 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 73:
+case 80:
 YY_RULE_SETUP
-#line 171 "lexer.l"
+#line 182 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 74:
+case 81:
 YY_RULE_SETUP
-#line 172 "lexer.l"
+#line 183 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 75:
+case 82:
 YY_RULE_SETUP
-#line 173 "lexer.l"
+#line 184 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 76:
+case 83:
 YY_RULE_SETUP
-#line 174 "lexer.l"
-{ return(EXT_DECL); }
+#line 185 "lexer.l"
+{ return(CONST /*EXT_DECL*/); }
        YY_BREAK
-case 77:
+case 84:
 YY_RULE_SETUP
-#line 175 "lexer.l"
+#line 186 "lexer.l"
 { return(EXT_DECL); }
        YY_BREAK
-case 78:
+case 85:
 YY_RULE_SETUP
-#line 176 "lexer.l"
+#line 187 "lexer.l"
 { return(PUBLIC); }
        YY_BREAK
-case 79:
+case 86:
 YY_RULE_SETUP
-#line 177 "lexer.l"
+#line 188 "lexer.l"
 { return(PRIVATE); }
        YY_BREAK
-case 80:
+case 87:
 YY_RULE_SETUP
-#line 178 "lexer.l"
+#line 189 "lexer.l"
 { return(TYPED_OBJECT); }
        YY_BREAK
-case 81:
+case 88:
 YY_RULE_SETUP
-#line 179 "lexer.l"
+#line 190 "lexer.l"
 { return(ANY_OBJECT); }
        YY_BREAK
-case 82:
+case 89:
 YY_RULE_SETUP
-#line 180 "lexer.l"
+#line 191 "lexer.l"
 { return(_INCREF); }
        YY_BREAK
-case 83:
+case 90:
 YY_RULE_SETUP
-#line 181 "lexer.l"
+#line 192 "lexer.l"
 { return(EXTENSION); }
        YY_BREAK
-case 84:
+case 91:
 YY_RULE_SETUP
-#line 182 "lexer.l"
+#line 193 "lexer.l"
 { return(EXTENSION); }
        YY_BREAK
-case 85:
+case 92:
 YY_RULE_SETUP
-#line 183 "lexer.l"
+#line 194 "lexer.l"
 { return(ASM); }
        YY_BREAK
-case 86:
+case 93:
 YY_RULE_SETUP
-#line 184 "lexer.l"
+#line 195 "lexer.l"
 { return(ASM); }
        YY_BREAK
-case 87:
+case 94:
 YY_RULE_SETUP
-#line 185 "lexer.l"
+#line 196 "lexer.l"
 { return(ASM); }
        YY_BREAK
-case 88:
+case 95:
 YY_RULE_SETUP
-#line 186 "lexer.l"
+#line 197 "lexer.l"
 { return(TYPEOF); }
        YY_BREAK
-case 89:
+case 96:
 YY_RULE_SETUP
-#line 187 "lexer.l"
+#line 198 "lexer.l"
 { return(WATCH); }
        YY_BREAK
-case 90:
+case 97:
 YY_RULE_SETUP
-#line 188 "lexer.l"
+#line 199 "lexer.l"
 { return(STOPWATCHING); }
        YY_BREAK
-case 91:
+case 98:
 YY_RULE_SETUP
-#line 189 "lexer.l"
+#line 200 "lexer.l"
 { return(FIREWATCHERS); }
        YY_BREAK
-case 92:
+case 99:
 YY_RULE_SETUP
-#line 190 "lexer.l"
+#line 201 "lexer.l"
 { return(WATCHABLE); }
        YY_BREAK
-case 93:
+case 100:
 YY_RULE_SETUP
-#line 191 "lexer.l"
+#line 202 "lexer.l"
 { return(CLASS_DESIGNER); }
        YY_BREAK
-case 94:
+case 101:
 YY_RULE_SETUP
-#line 192 "lexer.l"
+#line 203 "lexer.l"
 { return(CLASS_NO_EXPANSION); }
        YY_BREAK
-case 95:
+case 102:
 YY_RULE_SETUP
-#line 193 "lexer.l"
+#line 204 "lexer.l"
 { return(CLASS_FIXED); }
        YY_BREAK
-case 96:
+case 103:
 YY_RULE_SETUP
-#line 194 "lexer.l"
+#line 205 "lexer.l"
 { return(CLASS_DEFAULT_PROPERTY); }
        YY_BREAK
-case 97:
+case 104:
 YY_RULE_SETUP
-#line 195 "lexer.l"
+#line 206 "lexer.l"
 { return(PROPERTY_CATEGORY); }
        YY_BREAK
-case 98:
+case 105:
 YY_RULE_SETUP
-#line 196 "lexer.l"
+#line 207 "lexer.l"
 { return(CLASS_DATA); }
        YY_BREAK
-case 99:
+case 106:
 YY_RULE_SETUP
-#line 197 "lexer.l"
+#line 208 "lexer.l"
 { return(CLASS_PROPERTY); }
        YY_BREAK
-case 100:
+case 107:
 YY_RULE_SETUP
-#line 198 "lexer.l"
+#line 209 "lexer.l"
 { return(SUBCLASS); }
        YY_BREAK
-case 101:
+case 108:
 YY_RULE_SETUP
-#line 199 "lexer.l"
+#line 210 "lexer.l"
 { return(NAMESPACE); }
        YY_BREAK
-case 102:
+case 109:
 YY_RULE_SETUP
-#line 200 "lexer.l"
+#line 211 "lexer.l"
 { return(DBTABLE); }
        YY_BREAK
-case 103:
+case 110:
 YY_RULE_SETUP
-#line 201 "lexer.l"
+#line 212 "lexer.l"
 { return(DBFIELD); }
        YY_BREAK
-case 104:
+case 111:
+YY_RULE_SETUP
+#line 213 "lexer.l"
+{ return(DBINDEX); }
+       YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 214 "lexer.l"
+{ return(DATABASE_OPEN); }
+       YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 216 "lexer.l"
+{ return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
+       YY_BREAK
+case 114:
 YY_RULE_SETUP
-#line 202 "lexer.l"
-{ return(DBINDEX); }
+#line 218 "lexer.l"
+{ return(CONSTANT); }
        YY_BREAK
-case 105:
+case 115:
 YY_RULE_SETUP
-#line 203 "lexer.l"
-{ return(DATABASE_OPEN); }
+#line 220 "lexer.l"
+{ return(CONSTANT); }
        YY_BREAK
-case 106:
+case 116:
 YY_RULE_SETUP
-#line 205 "lexer.l"
-{ return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }  // ("::"|(({IDENT}"::")*)){IDENT}  { return(check_type()); }     // {L}({L}|{D})*      { return(check_type()); }
+#line 221 "lexer.l"
+{ return(CONSTANT); }
        YY_BREAK
-case 107:
+case 117:
 YY_RULE_SETUP
-#line 207 "lexer.l"
+#line 222 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 108:
+case 118:
 YY_RULE_SETUP
-#line 208 "lexer.l"
+#line 224 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 109:
+case 119:
 YY_RULE_SETUP
-#line 209 "lexer.l"
+#line 225 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 110:
+case 120:
 YY_RULE_SETUP
-#line 210 "lexer.l"
+#line 226 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 111:
+case 121:
 YY_RULE_SETUP
-#line 212 "lexer.l"
+#line 228 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 112:
+case 122:
 YY_RULE_SETUP
-#line 213 "lexer.l"
+#line 229 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 113:
+case 123:
 YY_RULE_SETUP
-#line 214 "lexer.l"
+#line 230 "lexer.l"
 { return(CONSTANT); }
        YY_BREAK
-case 114:
+case 124:
 YY_RULE_SETUP
-#line 216 "lexer.l"
+#line 232 "lexer.l"
 { return(STRING_LITERAL); }
        YY_BREAK
-case 115:
+case 125:
 YY_RULE_SETUP
-#line 218 "lexer.l"
+#line 233 "lexer.l"
+{ return(WIDE_STRING_LITERAL); }
+       YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 235 "lexer.l"
 { return(ELLIPSIS); }
        YY_BREAK
-case 116:
+case 127:
 YY_RULE_SETUP
-#line 219 "lexer.l"
+#line 236 "lexer.l"
 { return(RIGHT_ASSIGN); }
        YY_BREAK
-case 117:
+case 128:
 YY_RULE_SETUP
-#line 220 "lexer.l"
+#line 237 "lexer.l"
 { return(LEFT_ASSIGN); }
        YY_BREAK
-case 118:
+case 129:
 YY_RULE_SETUP
-#line 221 "lexer.l"
+#line 238 "lexer.l"
 { return(ADD_ASSIGN); }
        YY_BREAK
-case 119:
+case 130:
 YY_RULE_SETUP
-#line 222 "lexer.l"
+#line 239 "lexer.l"
 { return(SUB_ASSIGN); }
        YY_BREAK
-case 120:
+case 131:
 YY_RULE_SETUP
-#line 223 "lexer.l"
+#line 240 "lexer.l"
 { return(MUL_ASSIGN); }
        YY_BREAK
-case 121:
+case 132:
 YY_RULE_SETUP
-#line 224 "lexer.l"
+#line 241 "lexer.l"
 { return(DIV_ASSIGN); }
        YY_BREAK
-case 122:
+case 133:
 YY_RULE_SETUP
-#line 225 "lexer.l"
+#line 242 "lexer.l"
 { return(MOD_ASSIGN); }
        YY_BREAK
-case 123:
+case 134:
 YY_RULE_SETUP
-#line 226 "lexer.l"
+#line 243 "lexer.l"
 { return(AND_ASSIGN); }
        YY_BREAK
-case 124:
+case 135:
 YY_RULE_SETUP
-#line 227 "lexer.l"
+#line 244 "lexer.l"
 { return(XOR_ASSIGN); }
        YY_BREAK
-case 125:
+case 136:
 YY_RULE_SETUP
-#line 228 "lexer.l"
+#line 245 "lexer.l"
 { return(OR_ASSIGN); }
        YY_BREAK
-case 126:
+case 137:
 YY_RULE_SETUP
-#line 229 "lexer.l"
+#line 246 "lexer.l"
 { return(RIGHT_OP); }
        YY_BREAK
-case 127:
+case 138:
 YY_RULE_SETUP
-#line 230 "lexer.l"
+#line 247 "lexer.l"
 { return(LEFT_OP); }
        YY_BREAK
-case 128:
+case 139:
 YY_RULE_SETUP
-#line 231 "lexer.l"
+#line 248 "lexer.l"
 { return(INC_OP); }
        YY_BREAK
-case 129:
+case 140:
 YY_RULE_SETUP
-#line 232 "lexer.l"
+#line 249 "lexer.l"
 { return(DEC_OP); }
        YY_BREAK
-case 130:
+case 141:
 YY_RULE_SETUP
-#line 233 "lexer.l"
+#line 250 "lexer.l"
 { return(PTR_OP); }
        YY_BREAK
-case 131:
+case 142:
 YY_RULE_SETUP
-#line 234 "lexer.l"
+#line 251 "lexer.l"
 { return(AND_OP); }
        YY_BREAK
-case 132:
+case 143:
 YY_RULE_SETUP
-#line 235 "lexer.l"
+#line 252 "lexer.l"
 { return(OR_OP); }
        YY_BREAK
-case 133:
+case 144:
 YY_RULE_SETUP
-#line 236 "lexer.l"
+#line 253 "lexer.l"
 { return(LE_OP); }
        YY_BREAK
-case 134:
+case 145:
 YY_RULE_SETUP
-#line 237 "lexer.l"
+#line 254 "lexer.l"
 { return(GE_OP); }
        YY_BREAK
-case 135:
+case 146:
 YY_RULE_SETUP
-#line 238 "lexer.l"
+#line 255 "lexer.l"
 { return(EQ_OP); }
        YY_BREAK
-case 136:
+case 147:
 YY_RULE_SETUP
-#line 239 "lexer.l"
+#line 256 "lexer.l"
 { return(NE_OP); }
        YY_BREAK
 /* "::"        { return(CLASS_OP); } */
-case 137:
+case 148:
 YY_RULE_SETUP
-#line 241 "lexer.l"
+#line 258 "lexer.l"
 { return(';'); }
        YY_BREAK
-case 138:
+case 149:
 YY_RULE_SETUP
-#line 242 "lexer.l"
+#line 259 "lexer.l"
 { return('{'); }
        YY_BREAK
-case 139:
+case 150:
 YY_RULE_SETUP
-#line 243 "lexer.l"
+#line 260 "lexer.l"
 { return('}'); }
        YY_BREAK
-case 140:
+case 151:
 YY_RULE_SETUP
-#line 244 "lexer.l"
+#line 261 "lexer.l"
 { return(','); }
        YY_BREAK
-case 141:
+case 152:
 YY_RULE_SETUP
-#line 245 "lexer.l"
+#line 262 "lexer.l"
 { return(':'); }
        YY_BREAK
-case 142:
+case 153:
 YY_RULE_SETUP
-#line 246 "lexer.l"
+#line 263 "lexer.l"
 { return('='); }
        YY_BREAK
-case 143:
+case 154:
 YY_RULE_SETUP
-#line 247 "lexer.l"
+#line 264 "lexer.l"
 { return('('); }
        YY_BREAK
-case 144:
+case 155:
 YY_RULE_SETUP
-#line 248 "lexer.l"
+#line 265 "lexer.l"
 { return(')'); }
        YY_BREAK
-case 145:
+case 156:
 YY_RULE_SETUP
-#line 249 "lexer.l"
+#line 266 "lexer.l"
 { return('['); }
        YY_BREAK
-case 146:
+case 157:
 YY_RULE_SETUP
-#line 250 "lexer.l"
+#line 267 "lexer.l"
 { return(']'); }
        YY_BREAK
-case 147:
+case 158:
 YY_RULE_SETUP
-#line 251 "lexer.l"
+#line 268 "lexer.l"
 { return('.'); }
        YY_BREAK
-case 148:
+case 159:
 YY_RULE_SETUP
-#line 252 "lexer.l"
+#line 269 "lexer.l"
 { return('&'); }
        YY_BREAK
-case 149:
+case 160:
 YY_RULE_SETUP
-#line 253 "lexer.l"
+#line 270 "lexer.l"
 { return('!'); }
        YY_BREAK
-case 150:
+case 161:
 YY_RULE_SETUP
-#line 254 "lexer.l"
+#line 271 "lexer.l"
 { return('~'); }
        YY_BREAK
-case 151:
+case 162:
 YY_RULE_SETUP
-#line 255 "lexer.l"
+#line 272 "lexer.l"
 { return('-'); }
        YY_BREAK
-case 152:
+case 163:
 YY_RULE_SETUP
-#line 256 "lexer.l"
+#line 273 "lexer.l"
 { return('+'); }
        YY_BREAK
-case 153:
+case 164:
 YY_RULE_SETUP
-#line 257 "lexer.l"
+#line 274 "lexer.l"
 { return('*'); }
        YY_BREAK
-case 154:
+case 165:
 YY_RULE_SETUP
-#line 258 "lexer.l"
+#line 275 "lexer.l"
 { return('/'); }
        YY_BREAK
-case 155:
+case 166:
 YY_RULE_SETUP
-#line 259 "lexer.l"
+#line 276 "lexer.l"
 { return('%'); }
        YY_BREAK
-case 156:
+case 167:
 YY_RULE_SETUP
-#line 260 "lexer.l"
+#line 277 "lexer.l"
 { return('<'); }
        YY_BREAK
-case 157:
+case 168:
 YY_RULE_SETUP
-#line 261 "lexer.l"
+#line 278 "lexer.l"
 { return('>'); }
        YY_BREAK
-case 158:
+case 169:
 YY_RULE_SETUP
-#line 262 "lexer.l"
+#line 279 "lexer.l"
 { return('^'); }
        YY_BREAK
-case 159:
+case 170:
 YY_RULE_SETUP
-#line 263 "lexer.l"
+#line 280 "lexer.l"
 { return('|'); }
        YY_BREAK
-case 160:
+case 171:
 YY_RULE_SETUP
-#line 264 "lexer.l"
+#line 281 "lexer.l"
 { return('?'); }
        YY_BREAK
-case 161:
+case 172:
 YY_RULE_SETUP
-#line 265 "lexer.l"
+#line 282 "lexer.l"
 { return('$'); }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 267 "lexer.l"
+#line 284 "lexer.l"
 {
+      while(include_stack_ptr && !fileStack[include_stack_ptr-1])
+      {
+         --include_stack_ptr;
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
+      }
+
       if ( --include_stack_ptr < 0 )
       {
+         include_stack_ptr = 0;
          yyterminate();
       }
       else
@@ -2215,44 +2394,54 @@ case YY_STATE_EOF(INITIAL):
          type_yylloc = locStack[include_stack_ptr];
          expression_yylloc = locStack[include_stack_ptr];
          yy_switch_to_buffer(include_stack[include_stack_ptr] );
-         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
       }
    }
        YY_BREAK
-case 162:
+case 173:
 YY_RULE_SETUP
-#line 286 "lexer.l"
+#line 310 "lexer.l"
 { yylloc.start = yylloc.end; type_yylloc.start = type_yylloc.end; expression_yylloc.start = expression_yylloc.end;}
        YY_BREAK
-case 163:
+case 174:
 YY_RULE_SETUP
-#line 287 "lexer.l"
-{ 
-   yylloc.end.charPos = 1; yylloc.end.line += yyleng; yylloc.start = yylloc.end; 
-   type_yylloc.end.charPos = 1; type_yylloc.end.line += yyleng; type_yylloc.start = type_yylloc.end; 
-   expression_yylloc.end.charPos = 1; expression_yylloc.end.line += yyleng; expression_yylloc.start = expression_yylloc.end; 
+#line 311 "lexer.l"
+{
+   yylloc.end.charPos = 1; yylloc.end.line += yyleng; yylloc.start = yylloc.end;
+   type_yylloc.end.charPos = 1; type_yylloc.end.line += yyleng; type_yylloc.start = type_yylloc.end;
+   expression_yylloc.end.charPos = 1; expression_yylloc.end.line += yyleng; expression_yylloc.start = expression_yylloc.end;
    }
        YY_BREAK
-case 164:
+case 175:
 YY_RULE_SETUP
-#line 292 "lexer.l"
-{ 
-   yylloc.start.charPos++ /*= 3 - (yylloc.start.col % 3)*/; yylloc.end.charPos = yylloc.start.charPos; yylloc.start.pos = yylloc.end.pos; 
-   expression_yylloc.start.charPos++ /*= 3 - (expression_yylloc.start.col % 3)*/; expression_yylloc.end.charPos = expression_yylloc.start.charPos; expression_yylloc.start.pos = expression_yylloc.end.pos; 
-   type_yylloc.start.charPos++ /*= 3 - (type_yylloc.start.col % 3)*/; type_yylloc.end.charPos = type_yylloc.start.charPos; type_yylloc.start.pos = type_yylloc.end.pos; 
+#line 316 "lexer.l"
+{
+   yylloc.start.charPos++ /*= 3 - (yylloc.start.col % 3)*/; yylloc.end.charPos = yylloc.start.charPos; yylloc.start.pos = yylloc.end.pos;
+   expression_yylloc.start.charPos++ /*= 3 - (expression_yylloc.start.col % 3)*/; expression_yylloc.end.charPos = expression_yylloc.start.charPos; expression_yylloc.start.pos = expression_yylloc.end.pos;
+   type_yylloc.start.charPos++ /*= 3 - (type_yylloc.start.col % 3)*/; type_yylloc.end.charPos = type_yylloc.start.charPos; type_yylloc.start.pos = type_yylloc.end.pos;
    }
        YY_BREAK
-case 165:
+case 176:
 YY_RULE_SETUP
-#line 298 "lexer.l"
+#line 321 "lexer.l"
 { yylloc.start = yylloc.end; expression_yylloc.start = expression_yylloc.end;  type_yylloc.start = type_yylloc.end; }
        YY_BREAK
-case 166:
+case 177:
+YY_RULE_SETUP
+#line 322 "lexer.l"
+{
+   yylloc.start = yylloc.end; expression_yylloc.start = expression_yylloc.end;  type_yylloc.start = type_yylloc.end;
+   if(inCompiler)
+      printf("lexer error: invalid char 0x%X at line %d, col %d\n", (unsigned char)yytext[0], yylloc.start.line, yylloc.start.charPos);
+   yyerror();
+   }
+       YY_BREAK
+case 178:
 YY_RULE_SETUP
-#line 300 "lexer.l"
+#line 329 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2256 "lexer.ec"
+#line 2445 "lexer.ec"
 
        case YY_END_OF_BUFFER:
                {
@@ -2542,7 +2731,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 661 )
+                       if ( yy_current_state >= 729 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2577,11 +2766,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 661 )
+               if ( yy_current_state >= 729 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 660);
+       yy_is_jam = (yy_current_state == 728);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -3136,10 +3325,12 @@ int main()
        return 0;
        }
 #endif
-#line 300 "lexer.l"
+#line 329 "lexer.l"
 
 
-yywrap()
+private:
+
+int yywrap()
 {
    return(1);
 }
@@ -3180,7 +3371,7 @@ int comment()
 
 int commentCPP()
 {
-   int c, last = 0;
+   int c; //, last = 0;
    for(;;)
    {
       c = input();
@@ -3205,7 +3396,7 @@ int commentCPP()
          yylloc.end.charPos++;
          yylloc.end.pos++;
       }
-      last = c;
+      //last = c;
    }
    yylloc.start = yylloc.end;
    return 0;
@@ -3238,11 +3429,13 @@ int preprocessor()
             if(lineNumber)
             {
                char fileName[MAX_LOCATION];
-               
+
                int inOut;
+
+               fileName[0] = 0;
                GetString(&pointer, fileName, MAX_LOCATION);
                inOut = GetValue(&pointer);
-                              
+
                if(inOut == 1)
                {
                   char extension[MAX_EXTENSION];
@@ -3251,20 +3444,25 @@ int preprocessor()
 
                   GetExtension(fileName, extension);
                   if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-                     declMode = defaultDeclMode = defaultAccess;
+                     declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
+                  fileStack[include_stack_ptr] = null;
                   include_stack_ptr++;
                }
                else if(inOut == 2)
                {
                   include_stack_ptr--;
-                  defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+                  defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
                }
 
                yylloc.end.charPos = 1;
                yylloc.end.line = lineNumber;
                //yylloc.end.pos -= count;
-               yylloc.end.included = (include_stack_ptr > 0) ? GetIncludeFileID(fileName) : 0;
+
+               if(include_stack_ptr > 0 || (lineNumber && fileName[0]))
+                  yylloc.end.included = GetIncludeFileID(fileName);
+               else
+                  yylloc.end.included = 0;
             }
             /*
             int lineNumber = strtol(line+1, &endPtr, 0);
@@ -3298,7 +3496,7 @@ int preprocessor()
          }
       }
       last = c;
-   }   
+   }
    yylloc.start = yylloc.end;
    line[count] = 0;
 
@@ -3335,7 +3533,7 @@ int preprocessor()
 
       if ( include_stack_ptr >= MAX_INCLUDE_DEPTH )
       {
-         fprintf( stderr, $"Includes nested too deeply" );
+         fprintf( stderr, "%s", $"Includes nested too deeply" );
          exit( 1 );
       }
 
@@ -3358,14 +3556,12 @@ int preprocessor()
 
             GetExtension(includeFile, extension);
             if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-               declMode = defaultDeclMode = defaultAccess;
+               declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
             fileInput = file;
             yy_switch_to_buffer( yy_create_buffer( fileInput, YY_BUF_SIZE ) );
             BEGIN(INITIAL);
          }
-         else
-            printf("");
       }
    }
    return 0;
@@ -3377,17 +3573,17 @@ public void resetScanner()
    yylloc.start.charPos = yylloc.end.charPos = 1;
    yylloc.start.line = yylloc.end.line = 1;
    yylloc.start.pos = yylloc.end.pos = 0;
-   yylloc.start.included = yylloc.end.included = false;
+   yylloc.start.included = yylloc.end.included = 0;
 
    expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
    expression_yylloc.start.line = expression_yylloc.end.line = 1;
    expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
-   expression_yylloc.start.included = expression_yylloc.end.included = false;
+   expression_yylloc.start.included = expression_yylloc.end.included = 0;
 
    type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
    type_yylloc.start.line = type_yylloc.end.line = 1;
    type_yylloc.start.pos = type_yylloc.end.pos = 0;
-   type_yylloc.start.included = type_yylloc.end.included = false;
+   type_yylloc.start.included = type_yylloc.end.included = 0;
 
    include_stack_ptr = 0;
 }
@@ -3399,3 +3595,112 @@ void resetScannerPos(CodePosition pos)
    type_yylloc.start = type_yylloc.end = pos;
    expression_yylloc.start = expression_yylloc.end = pos;
 }
+
+class LexerBackup
+{
+   YYLTYPE yylloc;
+   YYLTYPE type_yylloc;
+   YYLTYPE expression_yylloc;
+
+   AccessMode declMode;
+   AccessMode defaultDeclMode;
+
+   File fileInput;
+   YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+   File fileStack[MAX_INCLUDE_DEPTH];
+   char sourceFileStack[MAX_INCLUDE_DEPTH][MAX_LOCATION];
+   YYLTYPE locStack[MAX_INCLUDE_DEPTH];
+   AccessMode declModeStack[MAX_INCLUDE_DEPTH];
+   int include_stack_ptr;
+   YY_BUFFER_STATE buffer;
+
+   int yy_n_chars;
+   char * yytext_ptr;
+   char * yy_c_buf_p;
+   FILE * yyin;
+   char yy_hold_char;
+   int yychar;
+   int yy_init;
+   int yy_start;
+
+};
+
+LexerBackup pushLexer()
+{
+   LexerBackup backup { };
+
+   backup.yylloc = yylloc;
+   backup.type_yylloc = type_yylloc;
+   backup.expression_yylloc = expression_yylloc;
+   backup.fileInput = fileInput;
+   memcpy(backup.include_stack, include_stack, sizeof(include_stack));
+   memcpy(backup.fileStack, fileStack, sizeof(fileStack));
+   memcpy(backup.sourceFileStack, sourceFileStack, sizeof(sourceFileStack));
+   memcpy(backup.locStack, locStack, sizeof(locStack));
+   memcpy(backup.declModeStack, declModeStack, sizeof(declModeStack));
+   backup.include_stack_ptr = include_stack_ptr;
+   backup.defaultDeclMode = defaultDeclMode;
+   backup.declMode = declMode;
+   backup.buffer = yy_current_buffer;
+
+   backup.yy_n_chars = yy_n_chars;
+   backup.yytext_ptr = yytext_ptr;
+   backup.yy_c_buf_p = yy_c_buf_p;
+   backup.yyin = yyin;
+   backup.yy_hold_char = yy_hold_char;
+   backup.yychar = yychar;
+   backup.yy_init = yy_init;
+   backup.yy_start = yy_start;
+
+   yy_init = 1;
+
+   yy_current_buffer = 0;
+
+   yylloc.start.charPos = yylloc.end.charPos = 1;
+   yylloc.start.line = yylloc.end.line = 1;
+   yylloc.start.pos = yylloc.end.pos = 0;
+   yylloc.start.included = yylloc.end.included = 0;
+
+   expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
+   expression_yylloc.start.line = expression_yylloc.end.line = 1;
+   expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
+   expression_yylloc.start.included = expression_yylloc.end.included = 0;
+
+   type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
+   type_yylloc.start.line = type_yylloc.end.line = 1;
+   type_yylloc.start.pos = type_yylloc.end.pos = 0;
+   type_yylloc.start.included = type_yylloc.end.included = 0;
+
+   include_stack_ptr = 0;
+
+   return backup;
+}
+
+void popLexer(LexerBackup backup)
+{
+   yylloc = backup.yylloc;
+   type_yylloc = backup.type_yylloc;
+   expression_yylloc = backup.expression_yylloc;
+   fileInput = backup.fileInput;
+   memcpy(include_stack, backup.include_stack, sizeof(include_stack));
+   memcpy(fileStack, backup.fileStack, sizeof(fileStack));
+   memcpy(sourceFileStack, backup.sourceFileStack, sizeof(sourceFileStack));
+   memcpy(locStack, backup.locStack, sizeof(locStack));
+   memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
+   include_stack_ptr = backup.include_stack_ptr;
+   defaultDeclMode = backup.defaultDeclMode;
+   declMode = structDeclMode = backup.declMode;
+
+   // yy_switch_to_buffer(backup.buffer);
+   yy_current_buffer = backup.buffer;
+   yy_n_chars = backup.yy_n_chars;
+   yytext_ptr = backup.yytext_ptr;
+   yy_c_buf_p = backup.yy_c_buf_p;
+   yyin = backup.yyin;
+   yy_hold_char = backup.yy_hold_char;
+   yychar = backup.yychar;
+   yy_init = backup.yy_init;
+   yy_start = backup.yy_start;
+
+   delete backup;
+}