parser yang CHANGE support extension in identity statement and its substatements
diff --git a/src/parser_yang.c b/src/parser_yang.c
index 44c4bd4..013a65c 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -2129,6 +2129,16 @@
         size = &((struct lys_feature *)node)->ext_size;
         parent_type = LYEXT_PAR_FEATURE;
         break;
+    case IDENTITY_KEYWORD:
+        ext = &((struct lys_ident *)node)->ext;
+        size = &((struct lys_ident *)node)->ext_size;
+        parent_type = LYEXT_PAR_IDENT;
+        break;
+    case IF_FEATURE_KEYWORD:
+        ext = &((struct lys_iffeature *)node)->ext;
+        size = &((struct lys_iffeature *)node)->ext_size;
+        parent_type = LYEXT_PAR_IFFEATURE;
+        break;
     default:
         LOGINT;
         return NULL;
@@ -2193,6 +2203,10 @@
         case STATUS_KEYWORD:
             instance->insubstmt = LYEXT_SUBSTMT_STATUS;
             break;
+        case BASE_KEYWORD:
+            instance->insubstmt = LYEXT_SUBSTMT_BASE;
+            instance->insubstmt_index = ((struct lys_ident *)actual)->base_size;
+            break;
         default:
             LOGINT;
             return NULL;
@@ -3138,6 +3152,10 @@
             *ptr_size = size;
             return EXIT_FAILURE;
         }
+        if (yang_check_ext_instance(module, &iffeature[i].ext, iffeature[i].ext_size, &iffeature[i], unres)) {
+            *ptr_size = size;
+            return EXIT_FAILURE;
+        }
         (*ptr_size)++;
     }
 
@@ -3299,8 +3317,12 @@
         if (yang_check_iffeatures(module, NULL, &module->ident[i], IDENTITY_KEYWORD, unres)) {
             goto error;
         }
+        if (yang_check_ext_instance(module, &module->ident[i].ext, module->ident[i].ext_size, &module->ident[i], unres)) {
+            goto error;
+        }
     }
 
+
     return EXIT_SUCCESS;
 
 error:
diff --git a/src/parser_yang_bis.c b/src/parser_yang_bis.c
index 603abce..b52a4af 100644
--- a/src/parser_yang_bis.c
+++ b/src/parser_yang_bis.c
@@ -544,16 +544,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3215
+#define YYLAST   3198
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  111
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  351
+#define YYNNTS  352
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  774
+#define YYNRULES  776
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  1226
+#define YYNSTATES  1246
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -609,84 +609,84 @@
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   298,   298,   299,   301,   324,   327,   329,   328,   352,
-     363,   373,   383,   384,   390,   395,   398,   409,   419,   432,
-     433,   439,   441,   445,   447,   451,   453,   459,   460,   461,
-     463,   471,   479,   480,   481,   492,   503,   514,   522,   527,
-     528,   532,   533,   544,   555,   566,   570,   572,   588,   593,
-     597,   603,   604,   609,   614,   619,   625,   629,   631,   635,
-     637,   641,   643,   647,   649,   662,   668,   669,   671,   675,
-     676,   680,   681,   686,   693,   693,   700,   706,   754,   755,
-     758,   759,   760,   761,   762,   763,   764,   765,   766,   767,
-     770,   785,   792,   793,   797,   798,   799,   805,   810,   816,
-     827,   829,   830,   834,   839,   840,   842,   843,   844,   857,
-     862,   864,   865,   866,   867,   882,   896,   901,   902,   917,
-     918,   927,   933,   938,   944,   948,   950,   963,   965,   966,
-     991,   992,  1006,  1019,  1025,  1030,  1036,  1040,  1042,  1091,
-    1101,  1104,  1109,  1110,  1116,  1120,  1125,  1132,  1134,  1140,
-    1141,  1146,  1181,  1182,  1185,  1186,  1190,  1196,  1209,  1210,
-    1211,  1212,  1213,  1215,  1232,  1237,  1243,  1244,  1260,  1264,
-    1272,  1273,  1278,  1294,  1299,  1304,  1309,  1315,  1322,  1335,
-    1336,  1340,  1341,  1351,  1356,  1361,  1366,  1372,  1376,  1387,
-    1399,  1400,  1403,  1411,  1420,  1421,  1436,  1437,  1449,  1455,
-    1459,  1464,  1470,  1475,  1485,  1486,  1501,  1506,  1507,  1512,
-    1516,  1518,  1523,  1525,  1526,  1527,  1540,  1552,  1553,  1555,
-    1563,  1573,  1574,  1589,  1590,  1602,  1608,  1613,  1618,  1624,
-    1629,  1639,  1640,  1656,  1660,  1662,  1666,  1668,  1672,  1674,
-    1678,  1680,  1690,  1696,  1697,  1701,  1702,  1708,  1713,  1718,
-    1721,  1724,  1727,  1730,  1738,  1739,  1740,  1741,  1742,  1743,
-    1744,  1745,  1748,  1758,  1765,  1766,  1789,  1790,  1790,  1794,
-    1799,  1799,  1803,  1808,  1814,  1820,  1825,  1830,  1830,  1835,
-    1835,  1840,  1840,  1849,  1849,  1853,  1853,  1859,  1899,  1909,
-    1912,  1912,  1916,  1921,  1921,  1926,  1931,  1931,  1935,  1940,
-    1946,  1952,  1958,  1963,  1969,  1979,  2034,  2037,  2037,  2041,
-    2047,  2047,  2052,  2063,  2068,  2068,  2072,  2078,  2091,  2104,
-    2114,  2120,  2125,  2131,  2141,  2188,  2191,  2191,  2195,  2201,
-    2201,  2205,  2214,  2220,  2226,  2239,  2252,  2262,  2268,  2273,
-    2278,  2278,  2282,  2282,  2287,  2287,  2292,  2292,  2301,  2301,
-    2308,  2318,  2325,  2326,  2346,  2349,  2349,  2353,  2359,  2369,
-    2376,  2383,  2390,  2396,  2402,  2402,  2408,  2409,  2412,  2413,
-    2414,  2415,  2416,  2417,  2418,  2425,  2435,  2442,  2443,  2457,
-    2458,  2458,  2462,  2467,  2473,  2478,  2483,  2483,  2490,  2500,
-    2507,  2517,  2524,  2525,  2548,  2551,  2551,  2555,  2561,  2561,
-    2565,  2572,  2579,  2586,  2591,  2597,  2607,  2614,  2615,  2647,
-    2648,  2648,  2652,  2657,  2663,  2668,  2673,  2673,  2677,  2677,
-    2683,  2684,  2686,  2696,  2698,  2699,  2733,  2736,  2750,  2774,
-    2796,  2847,  2864,  2881,  2902,  2923,  2928,  2934,  2935,  2938,
-    2953,  2962,  2963,  2965,  2976,  2985,  2986,  2986,  2990,  2995,
-    3001,  3006,  3011,  3011,  3016,  3016,  3021,  3021,  3030,  3030,
-    3036,  3051,  3058,  3068,  3075,  3076,  3100,  3103,  3109,  3115,
-    3120,  3125,  3125,  3129,  3129,  3134,  3134,  3144,  3144,  3155,
-    3170,  3199,  3202,  3202,  3206,  3206,  3210,  3210,  3215,  3215,
-    3221,  3236,  3265,  3274,  3281,  3282,  3314,  3317,  3317,  3321,
-    3326,  3332,  3337,  3342,  3342,  3346,  3346,  3351,  3351,  3357,
-    3366,  3384,  3387,  3393,  3399,  3404,  3405,  3407,  3412,  3415,
-    3419,  3421,  3422,  3423,  3425,  3425,  3431,  3432,  3464,  3467,
-    3473,  3477,  3483,  3489,  3496,  3503,  3511,  3520,  3520,  3526,
-    3527,  3559,  3562,  3568,  3572,  3578,  3585,  3585,  3591,  3592,
-    3606,  3609,  3612,  3618,  3624,  3631,  3638,  3646,  3655,  3662,
-    3664,  3665,  3669,  3670,  3675,  3681,  3686,  3688,  3689,  3690,
-    3703,  3708,  3710,  3711,  3712,  3725,  3729,  3731,  3736,  3738,
-    3739,  3759,  3764,  3766,  3767,  3768,  3788,  3793,  3795,  3796,
-    3797,  3809,  3872,  3874,  3875,  3880,  3884,  3886,  3887,  3889,
-    3890,  3892,  3896,  3898,  3898,  3905,  3908,  3916,  3935,  3937,
-    3938,  3941,  3941,  3958,  3958,  3965,  3965,  3972,  3975,  3977,
-    3979,  3980,  3982,  3984,  3986,  3987,  3989,  3991,  3992,  3994,
-    3995,  3997,  3999,  4002,  4006,  4008,  4009,  4011,  4012,  4014,
-    4016,  4027,  4028,  4031,  4032,  4043,  4044,  4046,  4047,  4049,
-    4050,  4056,  4057,  4060,  4061,  4062,  4086,  4087,  4090,  4096,
-    4100,  4105,  4106,  4107,  4110,  4112,  4118,  4120,  4121,  4123,
-    4124,  4126,  4127,  4129,  4130,  4132,  4133,  4136,  4137,  4140,
-    4142,  4143,  4146,  4146,  4153,  4155,  4156,  4157,  4158,  4159,
-    4160,  4161,  4163,  4164,  4165,  4166,  4167,  4168,  4169,  4170,
-    4171,  4172,  4173,  4174,  4175,  4176,  4177,  4178,  4179,  4180,
-    4181,  4182,  4183,  4184,  4185,  4186,  4187,  4188,  4189,  4190,
-    4191,  4192,  4193,  4194,  4195,  4196,  4197,  4198,  4199,  4200,
-    4201,  4202,  4203,  4204,  4205,  4206,  4207,  4208,  4209,  4210,
-    4211,  4212,  4213,  4214,  4215,  4216,  4217,  4218,  4219,  4220,
-    4221,  4222,  4223,  4224,  4225,  4226,  4227,  4228,  4229,  4230,
-    4231,  4232,  4233,  4234,  4235,  4236,  4237,  4238,  4239,  4240,
-    4241,  4242,  4243,  4246,  4253
+       0,   300,   300,   301,   303,   326,   329,   331,   330,   354,
+     365,   375,   385,   386,   392,   397,   400,   411,   421,   434,
+     435,   441,   443,   447,   449,   453,   455,   461,   462,   463,
+     465,   473,   481,   482,   483,   494,   505,   516,   524,   529,
+     530,   534,   535,   546,   557,   568,   572,   574,   590,   595,
+     599,   605,   606,   611,   616,   621,   627,   631,   633,   637,
+     639,   643,   645,   649,   651,   664,   670,   671,   673,   677,
+     678,   682,   683,   688,   695,   695,   702,   708,   756,   757,
+     760,   761,   762,   763,   764,   765,   766,   767,   768,   769,
+     772,   787,   794,   795,   799,   800,   801,   807,   812,   818,
+     829,   831,   832,   836,   841,   842,   844,   845,   846,   859,
+     864,   866,   867,   868,   869,   884,   898,   903,   904,   919,
+     920,   921,   927,   932,   938,   992,   997,   998,  1000,  1016,
+    1021,  1022,  1047,  1048,  1062,  1063,  1069,  1074,  1080,  1084,
+    1086,  1135,  1145,  1148,  1153,  1154,  1160,  1164,  1169,  1176,
+    1178,  1184,  1185,  1190,  1225,  1226,  1229,  1230,  1234,  1240,
+    1253,  1254,  1255,  1256,  1257,  1259,  1276,  1281,  1287,  1288,
+    1304,  1308,  1316,  1317,  1322,  1338,  1343,  1348,  1353,  1359,
+    1366,  1379,  1380,  1384,  1385,  1395,  1400,  1405,  1410,  1416,
+    1420,  1431,  1443,  1444,  1447,  1455,  1465,  1466,  1481,  1482,
+    1483,  1489,  1493,  1498,  1504,  1509,  1519,  1520,  1535,  1540,
+    1541,  1546,  1550,  1552,  1557,  1559,  1560,  1561,  1574,  1586,
+    1587,  1589,  1597,  1608,  1609,  1624,  1625,  1626,  1632,  1637,
+    1642,  1648,  1653,  1663,  1664,  1680,  1684,  1686,  1690,  1692,
+    1696,  1698,  1702,  1704,  1714,  1720,  1721,  1725,  1726,  1732,
+    1737,  1742,  1745,  1748,  1751,  1754,  1762,  1763,  1764,  1765,
+    1766,  1767,  1768,  1769,  1772,  1782,  1789,  1790,  1813,  1814,
+    1814,  1818,  1819,  1819,  1823,  1828,  1834,  1840,  1845,  1850,
+    1850,  1855,  1855,  1860,  1860,  1869,  1869,  1873,  1873,  1879,
+    1919,  1929,  1932,  1932,  1936,  1937,  1937,  1942,  1947,  1947,
+    1951,  1956,  1962,  1968,  1974,  1979,  1985,  1995,  2050,  2053,
+    2053,  2057,  2058,  2058,  2063,  2074,  2079,  2079,  2083,  2089,
+    2102,  2115,  2125,  2131,  2136,  2142,  2152,  2199,  2202,  2202,
+    2206,  2207,  2207,  2211,  2220,  2226,  2232,  2245,  2258,  2268,
+    2274,  2279,  2284,  2284,  2288,  2288,  2293,  2293,  2298,  2298,
+    2307,  2307,  2314,  2324,  2331,  2332,  2352,  2355,  2355,  2359,
+    2360,  2370,  2377,  2384,  2391,  2397,  2403,  2403,  2409,  2410,
+    2413,  2414,  2415,  2416,  2417,  2418,  2419,  2426,  2436,  2443,
+    2444,  2458,  2459,  2459,  2463,  2464,  2470,  2475,  2480,  2480,
+    2487,  2497,  2504,  2514,  2521,  2522,  2545,  2548,  2548,  2552,
+    2553,  2553,  2557,  2564,  2571,  2578,  2583,  2589,  2599,  2606,
+    2607,  2639,  2640,  2640,  2644,  2645,  2651,  2656,  2661,  2661,
+    2665,  2665,  2671,  2672,  2674,  2684,  2686,  2687,  2721,  2724,
+    2738,  2754,  2776,  2827,  2844,  2861,  2882,  2903,  2908,  2914,
+    2915,  2918,  2933,  2942,  2943,  2945,  2956,  2965,  2966,  2966,
+    2970,  2971,  2977,  2982,  2987,  2987,  2992,  2992,  2997,  2997,
+    3006,  3006,  3012,  3027,  3034,  3044,  3051,  3052,  3076,  3079,
+    3080,  3086,  3091,  3096,  3096,  3100,  3100,  3105,  3105,  3115,
+    3115,  3126,  3141,  3170,  3173,  3173,  3177,  3177,  3181,  3181,
+    3186,  3186,  3192,  3207,  3236,  3245,  3252,  3253,  3285,  3288,
+    3288,  3292,  3293,  3299,  3304,  3309,  3309,  3313,  3313,  3318,
+    3318,  3324,  3333,  3351,  3354,  3360,  3366,  3371,  3372,  3374,
+    3379,  3382,  3386,  3388,  3389,  3390,  3392,  3392,  3398,  3399,
+    3431,  3434,  3440,  3444,  3450,  3456,  3463,  3470,  3478,  3487,
+    3487,  3493,  3494,  3526,  3529,  3535,  3539,  3545,  3552,  3552,
+    3558,  3559,  3573,  3576,  3579,  3585,  3591,  3598,  3605,  3613,
+    3622,  3629,  3631,  3632,  3636,  3637,  3642,  3648,  3653,  3655,
+    3656,  3657,  3670,  3675,  3677,  3678,  3679,  3692,  3696,  3698,
+    3703,  3705,  3706,  3726,  3731,  3733,  3734,  3735,  3755,  3760,
+    3762,  3763,  3764,  3776,  3839,  3841,  3842,  3847,  3851,  3853,
+    3854,  3856,  3857,  3859,  3863,  3865,  3865,  3872,  3875,  3883,
+    3902,  3904,  3905,  3908,  3908,  3925,  3925,  3932,  3932,  3939,
+    3942,  3944,  3946,  3947,  3949,  3951,  3953,  3954,  3956,  3958,
+    3959,  3961,  3962,  3964,  3966,  3969,  3973,  3975,  3976,  3978,
+    3979,  3981,  3983,  3994,  3995,  3998,  3999,  4010,  4011,  4013,
+    4014,  4016,  4017,  4023,  4024,  4027,  4028,  4029,  4053,  4054,
+    4057,  4063,  4067,  4072,  4073,  4074,  4077,  4079,  4085,  4087,
+    4088,  4090,  4091,  4093,  4094,  4096,  4097,  4099,  4100,  4103,
+    4104,  4107,  4109,  4110,  4113,  4113,  4120,  4122,  4123,  4124,
+    4125,  4126,  4127,  4128,  4130,  4131,  4132,  4133,  4134,  4135,
+    4136,  4137,  4138,  4139,  4140,  4141,  4142,  4143,  4144,  4145,
+    4146,  4147,  4148,  4149,  4150,  4151,  4152,  4153,  4154,  4155,
+    4156,  4157,  4158,  4159,  4160,  4161,  4162,  4163,  4164,  4165,
+    4166,  4167,  4168,  4169,  4170,  4171,  4172,  4173,  4174,  4175,
+    4176,  4177,  4178,  4179,  4180,  4181,  4182,  4183,  4184,  4185,
+    4186,  4187,  4188,  4189,  4190,  4191,  4192,  4193,  4194,  4195,
+    4196,  4197,  4198,  4199,  4200,  4201,  4202,  4203,  4204,  4205,
+    4206,  4207,  4208,  4209,  4210,  4213,  4220
 };
 #endif
 
@@ -742,18 +742,18 @@
   "argument_stmt", "argument_end", "yin_element_arg", "yin_element_stmt",
   "yin_element_arg_str", "status_arg", "status_stmt", "status_arg_str",
   "feature_arg_str", "feature_stmt", "feature_end", "feature_opt_stmt",
-  "if_feature_arg", "if_feature_stmt", "identity_arg_str", "identity_stmt",
-  "identity_end", "identity_opt_stmt", "base_arg", "base_stmt",
-  "typedef_arg_str", "typedef_stmt", "type_opt_stmt", "type_stmt",
-  "type_arg_str", "type_end", "type_body_stmts", "some_restrictions",
-  "union_spec", "fraction_digits_arg", "fraction_digits_stmt",
-  "fraction_digits_arg_str", "length_stmt", "length_arg_str", "length_end",
-  "message_opt_stmt", "pattern_stmt", "pattern_arg_str", "pattern_end",
-  "pattern_opt_stmt", "modifier_arg", "modifier_stmt",
-  "enum_specification", "enum_stmts", "enum_stmt", "enum_arg_str",
-  "enum_end", "enum_opt_stmt", "value_arg", "value_stmt",
-  "integer_value_arg_str", "range_stmt", "range_end", "path_arg",
-  "path_stmt", "require_instance_arg", "require_instance_stmt",
+  "if_feature_arg", "if_feature_stmt", "if_feature_end",
+  "identity_arg_str", "identity_stmt", "identity_end", "identity_opt_stmt",
+  "base_arg", "base_stmt", "typedef_arg_str", "typedef_stmt",
+  "type_opt_stmt", "type_stmt", "type_arg_str", "type_end",
+  "type_body_stmts", "some_restrictions", "union_spec",
+  "fraction_digits_arg", "fraction_digits_stmt", "fraction_digits_arg_str",
+  "length_stmt", "length_arg_str", "length_end", "message_opt_stmt",
+  "pattern_stmt", "pattern_arg_str", "pattern_end", "pattern_opt_stmt",
+  "modifier_arg", "modifier_stmt", "enum_specification", "enum_stmts",
+  "enum_stmt", "enum_arg_str", "enum_end", "enum_opt_stmt", "value_arg",
+  "value_stmt", "integer_value_arg_str", "range_stmt", "range_end",
+  "path_arg", "path_stmt", "require_instance_arg", "require_instance_stmt",
   "require_instance_arg_str", "bits_specification", "bit_stmts",
   "bit_stmt", "bit_arg_str", "bit_end", "bit_opt_stmt",
   "position_value_arg", "position_stmt", "position_value_arg_str",
@@ -837,12 +837,12 @@
 };
 # endif
 
-#define YYPACT_NINF -969
+#define YYPACT_NINF -1051
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-969)))
+  (!!((Yystate) == (-1051)))
 
-#define YYTABLE_NINF -630
+#define YYTABLE_NINF -632
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -851,129 +851,131 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -969,    29,  -969,  -969,   297,  -969,  -969,  -969,   120,   120,
-    -969,  -969,  3022,  3022,   120,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   -46,
-    -969,  -969,  -969,   -32,  -969,   120,  -969,   120,  -969,    -9,
-     348,   348,  -969,  -969,  -969,   192,  -969,  -969,  -969,  -969,
-      60,   205,  -969,    38,   120,   120,   120,  -969,  -969,  -969,
-     -51,  2452,   120,  -969,   120,  -969,  -969,  -969,    41,   120,
-     120,  -969,  -969,  2452,  3022,  2452,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-      41,  3022,   348,  -969,   120,   120,   120,   120,  -969,  -969,
-    -969,  -969,  -969,    44,  3022,  3022,   348,   348,   242,  -969,
-    -969,   242,  -969,  -969,   242,  -969,   120,  -969,  -969,    30,
-    -969,   120,  2452,  2452,  2452,  2452,    40,  1865,   120,  -969,
-      55,  -969,   262,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-     120,  -969,  2261,   120,    61,  -969,   242,  -969,   242,  -969,
-     242,  -969,   242,  -969,  -969,   120,   120,   120,   120,   120,
-     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
-     120,   120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,   278,   348,  -969,  -969,  -969,  -969,   348,   104,  -969,
-    -969,  -969,  -969,  -969,   294,  -969,  -969,  -969,  -969,   120,
-    3022,     7,  3022,  3022,  3022,     7,  3022,  3022,  3022,  3022,
-    3022,  3022,  3022,  3022,  3022,  2547,  3022,   348,  -969,  -969,
-     270,  -969,   348,   348,  -969,  -969,   285,   120,    66,   288,
-    -969,  3117,  -969,  -969,    73,  -969,  -969,   299,  -969,   305,
-    -969,   306,  -969,  -969,    79,  -969,  -969,   336,  -969,   349,
-    -969,   368,  -969,    91,  -969,    97,  -969,   113,  -969,   377,
-    -969,   385,  -969,   144,  -969,  -969,   393,  -969,  -969,  -969,
-     288,  -969,  -969,  -969,  -969,  -969,   147,   149,   348,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   154,   120,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-     120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,   120,   120,  -969,   120,   348,   120,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,   120,
-     348,   348,  -969,   348,   348,   348,   348,   348,   348,   348,
-     348,   348,   348,   348,   348,   348,   348,   188,   278,  2356,
-     757,   962,  1053,  1462,    71,   308,   346,  1602,   220,   927,
-    1894,  1402,  1115,  1147,   251,   275,  -969,  -969,  -969,   242,
-    -969,  -969,   120,   120,   120,   120,   120,   120,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,   120,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,   120,  -969,  -969,  -969,  -969,  -969,
-     120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,  -969,
-    -969,  -969,  -969,  -969,  -969,   120,   120,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   120,
-     120,   120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,   120,   120,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,   176,  -969,   181,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,   120,   120,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,   120,    17,  2452,    58,
-    2452,    98,  2452,  -969,  -969,  3022,  3022,  -969,  -969,  -969,
-    -969,  -969,  2452,  -969,  -969,  2452,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  3022,   348,   307,   348,   348,   348,   348,
-     348,  2547,  2547,  2452,  -969,  -969,  -969,    19,   178,    42,
-    -969,  -969,  -969,  2642,  2642,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,   120,   120,  -969,  -969,
-    -969,  -969,  -969,  -969,   348,  2642,  2642,  -969,  -969,  -969,
-    -969,  -969,  -969,   242,  -969,   242,  -969,  -969,  -969,  -969,
-     242,  -969,   400,  -969,  -969,  -969,  -969,  -969,   242,  -969,
-     404,  -969,   348,   348,   407,  -969,   385,  -969,   348,   348,
-     348,   348,   348,   242,  -969,   348,   348,   242,  -969,   348,
-     348,   348,   348,   348,   348,   348,   410,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   242,
-    -969,   414,  -969,   242,  -969,   348,   348,   348,  -969,  -969,
-    -969,   242,  -969,  -969,  -969,  -969,   242,  -969,  -969,  -969,
-    -969,  -969,  -969,   242,  -969,   348,   348,   348,  -969,   242,
-    -969,  -969,  -969,   242,  -969,  -969,  -969,   348,   348,   348,
-     348,   348,   348,   348,   348,   348,   348,   348,   348,   348,
-     348,   348,   348,   348,  -969,  -969,   187,  -969,  -969,  -969,
-     415,  -969,   348,   348,   348,   120,   120,  -969,  -969,   120,
-     120,  -969,  -969,  -969,  -969,   120,   120,   120,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,   120,   120,   120,    52,   120,  -969,  -969,  -969,  -969,
-    -969,   120,  -969,   120,  -969,   120,   120,   120,  -969,  -969,
-    -969,  -969,   120,  -969,   100,  1297,  -969,   120,  -969,  -969,
-    -969,   120,   348,   348,   348,   134,   428,   433,   438,  -969,
-     464,   120,  3117,   154,  -969,  -969,  -969,  -969,  -969,  -969,
-     348,   348,   490,   230,  1654,   120,   195,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,   120,   120,   197,  1328,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  1541,
-     425,   120,   120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,    77,  -969,
-     348,   348,   348,  3022,  2452,  -969,   120,   120,   120,   120,
-     120,   120,  -969,   239,  -969,  -969,  -969,  -969,  -969,  -969,
-     348,   271,   348,   348,   348,   348,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  2452,  2452,
-    -969,  -969,  -969,  -969,  -969,   242,  -969,   572,    94,   390,
-     445,  -969,   446,  -969,    99,  2452,   145,  2452,  2452,    80,
-    -969,   348,   293,  -969,   348,   242,  -969,   242,  -969,   348,
-     348,   120,   120,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,   242,  -969,  -969,   467,  -969,  -969,   242,
-    -969,   223,   318,   468,  -969,   486,  -969,  -969,  -969,  -969,
-     242,  -969,   348,  -969,  -969,  -969,   348,   348,   348,   348,
-     348,   348,  -969,   120,  -969,  -969,  -969,  -969,  3117,  -969,
-    -969,   229,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-     120,   120,  -969,   348,   246,   212,   348,   348,  -969,   223,
-    -969,  2737,   348,   348,   348,   120,  -969,  -969,  -969,  -969,
-    -969,  -969,   120,  -969,  -969,  -969,  -969,  -969,  -969,   525,
-     234,  -969,  -969,  -969,   160,   351,   567,   178,   184,  -969,
-     347,  -969,   449,   120,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,   242,  -969,  -969,  -969,  -969,  -969,  -969,   242,
-    -969,  -969,  -969,  -969,  3117,  -969,  2452,  -969,   120,  -969,
-     120,   347,   347,   242,  -969,   250,   304,  -969,  -969,   347,
-     301,   347,  -969,   347,   330,   274,   347,   347,   340,   402,
-    -969,   347,  -969,  -969,   352,  2832,   347,  -969,  -969,  -969,
-    2927,  -969,   361,   347,  3117,  -969
+   -1051,    53, -1051, -1051,    45, -1051, -1051, -1051,    31,    31,
+   -1051, -1051,  3005,  3005,    31, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,   -43,
+   -1051, -1051, -1051,   -32, -1051,    31, -1051,    31, -1051,   -26,
+     288,   288, -1051, -1051, -1051,   -27, -1051, -1051, -1051, -1051,
+      75,   464, -1051,   257,    31,    31,    31, -1051, -1051, -1051,
+      88,  2435,    31, -1051,    31, -1051, -1051, -1051,   363,    31,
+      31, -1051, -1051,  2435,  3005,  2435, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+     363,  3005,   288, -1051,    31,    31,    31,    31, -1051, -1051,
+   -1051, -1051, -1051,    54,  3005,  3005,   288,   288,    96, -1051,
+   -1051,    96, -1051, -1051,    96, -1051,    31, -1051, -1051,   -20,
+   -1051,    31,  2435,  2435,  2435,  2435,     5,   466,    31, -1051,
+      25, -1051,   146, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+      31, -1051,  2244,    31,    36, -1051,    96, -1051,    96, -1051,
+      96, -1051,    96, -1051, -1051,    31,    31,    31,    31,    31,
+      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
+      31,    31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051,   181,   288, -1051, -1051, -1051, -1051,   288,    40, -1051,
+   -1051, -1051, -1051, -1051,   192, -1051, -1051, -1051, -1051,    31,
+    3005,    -5,  3005,  3005,  3005,    -5,  3005,  3005,  3005,  3005,
+    3005,  3005,  3005,  3005,  3005,  2530,  3005,   288, -1051, -1051,
+     205, -1051,   288,   288, -1051, -1051,   226,    31,    39,   264,
+   -1051,  3100, -1051, -1051,    57, -1051, -1051,   294, -1051,   315,
+   -1051,   373, -1051, -1051,    64, -1051, -1051,   374, -1051,   386,
+   -1051,   387, -1051,    81, -1051,   116, -1051,   137, -1051,   394,
+   -1051,   395, -1051,   151, -1051, -1051,   413, -1051, -1051, -1051,
+     264, -1051, -1051, -1051, -1051, -1051,   354,   144,   288, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    51,    31,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+      31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051,    31,    31, -1051,    31,   288,    31, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,    31,
+     288,   288, -1051,   288,   288,   288,   288,   288,   288,   288,
+     288,   288,   288,   288,   288,   288,   288,   114,   181,  2339,
+     748,  1443,   747,   279,    85,   548,   740,  1254,   317,  1166,
+    1351,  1289,  1770,   965,   171,   250, -1051, -1051, -1051,    96,
+   -1051, -1051,    31,    31,    31,    31,    31,    31, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,    31, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051,    31, -1051, -1051, -1051, -1051, -1051,
+      31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31, -1051,
+   -1051, -1051, -1051, -1051, -1051,    31,    31, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,
+      31,    31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051,    31,    31, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051,   158, -1051,   168, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051,    31,    31, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051,    31,    38,  2435,    41,
+    2435,   129,  2435,   288, -1051, -1051,  3005,  3005,   288, -1051,
+   -1051, -1051, -1051, -1051,  2435,   288, -1051, -1051,  2435,   288,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051,  3005,   288,   121,
+     288,   288,   288,   288,   288,   288,  2530,   288,  2530,  2435,
+     288, -1051, -1051, -1051,    78,   147,    12,   288, -1051, -1051,
+   -1051,  2625,  2625,   288, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051,   288, -1051, -1051, -1051, -1051,    31,    31,   288, -1051,
+   -1051, -1051, -1051, -1051, -1051,   288,  2625,  2625,   288, -1051,
+   -1051, -1051, -1051, -1051, -1051,    96, -1051,   437, -1051, -1051,
+   -1051, -1051,    96, -1051,   444, -1051, -1051, -1051, -1051, -1051,
+      96, -1051,   476, -1051,   288,   288,   512, -1051,   395, -1051,
+     288,   288,   288,   288,   288,    96, -1051,   288,   288,    96,
+   -1051,   288,   288,   288,   288,   288,   288,   288,   515, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051,    96, -1051,   520, -1051,    96, -1051,   288,   288,   288,
+   -1051, -1051, -1051,    96, -1051, -1051, -1051, -1051,    96, -1051,
+   -1051, -1051, -1051, -1051, -1051,    96, -1051,   288,   288,   288,
+   -1051,    96, -1051, -1051, -1051,    96, -1051, -1051, -1051,   288,
+     288,   288,   288,   288,   288,   288,   288,   288,   288,   288,
+     288,   288,   288,   288,   288,   288, -1051, -1051,   178, -1051,
+   -1051, -1051,   537, -1051,   288,   288,   288,    31,    31, -1051,
+   -1051, -1051, -1051,    31,    31, -1051, -1051, -1051, -1051,    31,
+      31,    31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051,    31,    31,    31,    10,    31,
+   -1051, -1051, -1051, -1051, -1051,    31, -1051,    31, -1051,    31,
+      31,    31, -1051, -1051, -1051, -1051,    31, -1051,   285,   973,
+   -1051,    31, -1051, -1051, -1051,    31,    82,   288,   288,   288,
+     169,   550,   554,   555, -1051,   400,    31,  3100,    51, -1051,
+   -1051, -1051, -1051, -1051, -1051,   288,   288, -1051,   253,   271,
+    1604,    31,   182, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051,    31,    31,   187,   839, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051,  1533,   914,    31,    31, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051,    80, -1051,   288,   288,   288,  3005,
+    2435, -1051,    31,    31,    31,    31,    31,    31, -1051,   229,
+   -1051, -1051, -1051, -1051, -1051, -1051,   288,   298,   288,   288,
+     288,   288, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051,  2435,  2435,   288, -1051, -1051, -1051,
+   -1051, -1051,    96, -1051,  1150,   165,   376,   558, -1051,   559,
+   -1051,    68,  2435,    11,  2435,  2435,    98, -1051,   288,   325,
+   -1051,   288,   288,    96, -1051,    96, -1051,   288,   288,    31,
+      31, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051,    96, -1051, -1051,   568, -1051, -1051,    96, -1051,   262,
+     357,   596, -1051,   597, -1051, -1051, -1051, -1051,    96, -1051,
+     288, -1051, -1051, -1051,   288,   288,   288,   288,   288,   288,
+   -1051,    31, -1051, -1051, -1051, -1051,  3100, -1051, -1051,   267,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    31,    31,
+   -1051,   288,   209,   452,   288,   288, -1051,   262, -1051,  2720,
+     288,   288,   288,    31, -1051, -1051, -1051, -1051, -1051, -1051,
+      31, -1051, -1051, -1051, -1051, -1051, -1051,   419,   272, -1051,
+   -1051, -1051,   210,   433,   542,   147,   288,   280,   288, -1051,
+     381, -1051,   237,    31, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051,    96, -1051, -1051, -1051, -1051, -1051, -1051,    96,
+   -1051, -1051, -1051, -1051,  3100, -1051,  2435, -1051,    31, -1051,
+      31,   381,   381,    96, -1051,   290,   284, -1051, -1051,   381,
+     316,   381, -1051,   381,   270,   303,   381,   381,   299,   398,
+   -1051,   381, -1051, -1051,   308,  2815,   381, -1051, -1051, -1051,
+    2910, -1051,   311,   381,  3100, -1051
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -981,170 +983,172 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-     677,     0,     2,     3,     0,     1,   675,   676,     0,     0,
-     678,   677,     0,     0,   679,   693,     4,   692,   694,   695,
-     696,   697,   698,   699,   700,   701,   702,   703,   704,   705,
-     706,   707,   708,   709,   710,   711,   712,   713,   714,   715,
-     716,   717,   718,   719,   720,   721,   722,   723,   724,   725,
-     726,   727,   728,   729,   730,   731,   732,   733,   734,   735,
-     736,   737,   738,   739,   740,   741,   742,   743,   744,   745,
-     746,   747,   748,   749,   750,   751,   752,   753,   754,   755,
-     756,   757,   758,   759,   760,   761,   762,   763,   764,   765,
-     766,   767,   768,   769,   770,   771,   772,   677,   650,     0,
-       9,   773,   677,     0,    16,     6,   661,   649,   661,     5,
-      12,    19,   677,   774,    27,    11,   663,   662,   677,    27,
+     679,     0,     2,     3,     0,     1,   677,   678,     0,     0,
+     680,   679,     0,     0,   681,   695,     4,   694,   696,   697,
+     698,   699,   700,   701,   702,   703,   704,   705,   706,   707,
+     708,   709,   710,   711,   712,   713,   714,   715,   716,   717,
+     718,   719,   720,   721,   722,   723,   724,   725,   726,   727,
+     728,   729,   730,   731,   732,   733,   734,   735,   736,   737,
+     738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
+     748,   749,   750,   751,   752,   753,   754,   755,   756,   757,
+     758,   759,   760,   761,   762,   763,   764,   765,   766,   767,
+     768,   769,   770,   771,   772,   773,   774,   679,   652,     0,
+       9,   775,   679,     0,    16,     6,   663,   651,   663,     5,
+      12,    19,   679,   776,    27,    11,   665,   664,   679,    27,
       18,     0,    51,    26,     0,     0,     0,    13,    14,    15,
-       0,   667,   666,    51,     0,    20,   661,     7,    66,     0,
-       0,   661,   661,     0,     0,     0,   677,   669,   664,   685,
-     688,   686,   690,   691,   689,   684,   665,   668,   682,   687,
-      66,     0,    21,   677,     0,     0,     0,     0,    52,    53,
+       0,   669,   668,    51,     0,    20,   663,     7,    66,     0,
+       0,   663,   663,     0,     0,     0,   679,   671,   666,   687,
+     690,   688,   692,   693,   691,   686,   667,   670,   684,   689,
+      66,     0,    21,   679,     0,     0,     0,     0,    52,    53,
       54,    55,    78,    64,     0,     0,    28,    29,     0,    24,
-     647,     0,    49,   677,     0,    22,   671,   677,    78,     0,
-      47,     8,     0,     0,     0,     0,     0,    77,     0,   661,
-       0,    31,     0,    37,   660,   658,    25,   661,   661,    50,
-     648,    23,     0,   683,     0,   661,     0,    58,     0,    60,
-       0,    56,     0,    62,   677,     0,     0,     0,     0,     0,
+     649,     0,    49,   679,     0,    22,   673,   679,    78,     0,
+      47,     8,     0,     0,     0,     0,     0,    77,     0,   663,
+       0,    31,     0,    37,   662,   660,    25,   663,   663,    50,
+     650,    23,     0,   685,     0,   663,     0,    58,     0,    60,
+       0,    56,     0,    62,   679,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   661,    80,    81,    82,    83,    84,    85,   254,
-     255,   256,   257,   258,   259,   260,   261,    86,    87,    88,
-      89,     0,    67,   661,   661,    39,    38,   656,     0,   652,
-     670,   677,   651,   677,     0,    59,    61,    57,    63,    10,
+       0,     0,   663,    80,    81,    82,    83,    84,    85,   256,
+     257,   258,   259,   260,   261,   262,   263,    86,    87,    88,
+      89,     0,    67,   663,   663,    39,    38,   658,     0,   654,
+     672,   679,   653,   679,     0,    59,    61,    57,    63,    10,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    79,    74,    76,
-       0,    65,    32,    41,   659,   661,     0,    17,     0,     0,
-     388,     0,   442,   443,     0,   609,   677,     0,   350,     0,
-     262,     0,    90,   516,     0,   509,   677,     0,   115,     0,
-     241,     0,   126,     0,   288,     0,   304,     0,   323,     0,
-     492,     0,   462,     0,   138,   655,     0,   405,   677,   677,
-       0,   390,   677,   661,    69,    68,     0,     0,   657,   677,
-     677,   672,    48,   661,   392,   389,   607,   661,   608,   441,
-     661,   352,   351,   661,   264,   263,   661,    92,    91,   661,
-     515,   661,   117,   116,   661,   243,   242,   661,   128,   127,
-     661,   661,   661,   661,   494,   493,   661,   464,   463,   661,
-     661,   407,   406,   653,   654,   391,    75,    71,     0,    30,
-      36,    33,    34,    35,    40,    44,    42,    43,   671,   673,
-     394,   445,   610,   354,   266,    94,   511,   119,   245,   130,
-     289,   306,   325,   496,   466,   140,   409,     0,     0,     0,
+       0,    65,    32,    41,   661,   663,     0,    17,     0,     0,
+     390,     0,   444,   445,     0,   611,   679,     0,   352,     0,
+     264,     0,    90,   518,     0,   511,   679,     0,   115,     0,
+     243,     0,   128,     0,   290,     0,   306,     0,   325,     0,
+     494,     0,   464,     0,   140,   657,     0,   407,   679,   679,
+       0,   392,   679,   663,    69,    68,     0,     0,   659,   679,
+     679,   674,    48,   663,   394,   391,   609,   663,   610,   443,
+     663,   354,   353,   663,   266,   265,   663,    92,    91,   663,
+     517,   663,   117,   116,   663,   245,   244,   663,   130,   129,
+     663,   663,   663,   663,   496,   495,   663,   466,   465,   663,
+     663,   409,   408,   655,   656,   393,    75,    71,     0,    30,
+      36,    33,    34,    35,    40,    44,    42,    43,   673,   675,
+     396,   447,   612,   356,   268,    94,   513,   119,   247,   132,
+     291,   308,   327,   498,   468,   142,   411,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    70,    72,    73,     0,
-      45,   677,     0,     0,     0,     0,     0,     0,   393,   403,
-     404,   402,   397,   395,   400,   401,   398,     0,     0,   444,
-     450,   451,   449,   448,   452,   458,   454,   456,   446,     0,
-     353,   362,   363,   361,   357,   358,   368,   369,   370,   371,
-     374,   364,   366,   367,   372,   373,   355,   359,   360,     0,
-     265,   275,   276,   274,   269,   283,   277,   285,   279,   281,
-     267,   273,   272,   270,     0,    93,    97,    98,   661,    96,
-       0,   510,   512,   513,   118,   122,   123,   121,   120,   244,
-     247,   248,   246,   661,   661,   661,   661,   661,     0,   129,
-     134,   135,   133,   132,   131,     0,     0,   287,   302,   303,
-     301,   292,   293,   295,   298,   290,   299,   300,   296,     0,
-       0,     0,   305,   321,   322,   320,   309,   310,   313,   312,
-     307,   316,   317,   318,   319,   314,     0,     0,   324,   338,
-     339,   337,   328,   340,   342,   348,   344,   346,   326,   333,
-     334,   335,   336,   329,   332,   331,   495,   501,   502,   500,
-     499,   503,   505,   507,   497,   677,   677,   465,   469,   470,
-     468,   467,   471,   473,     0,   475,     0,   477,   139,   145,
-     146,   144,   661,   142,   143,     0,     0,   408,   414,   415,
-     413,   412,   416,   418,   410,    46,   674,     0,     0,     0,
-       0,     0,     0,   661,   661,     0,     0,   661,   661,   661,
-     661,   661,     0,   661,   661,     0,   661,   661,   661,   661,
-     661,   661,   661,     0,    95,     0,   250,   249,   251,   252,
-     253,     0,     0,     0,   661,   661,   661,     0,     0,     0,
-     661,   661,   661,     0,     0,   661,   661,   661,   661,   661,
-     661,   661,   661,   661,   661,   661,   479,   490,   661,   661,
-     661,   661,   661,   661,   141,     0,     0,   661,   661,   661,
-     677,   677,   569,     0,   565,     0,   124,   677,   677,   574,
-       0,   570,     0,   591,   677,   677,   677,   114,     0,   109,
-       0,   558,   396,   399,     0,   375,     0,   460,   453,   459,
-     455,   457,   447,     0,   239,   365,   356,     0,   575,   284,
-     278,   286,   280,   282,   268,   271,     0,    99,   677,   677,
-     519,   677,   514,   677,   517,   677,   521,   523,   522,     0,
-     136,     0,   148,     0,   237,   294,   291,   297,   640,   677,
-     585,     0,   581,   677,   641,   580,     0,   577,   642,   677,
-     677,   677,   590,     0,   586,   311,   308,   315,   605,     0,
-     601,   603,   598,     0,   595,   599,   611,   341,   343,   349,
-     345,   347,   327,   330,   504,   506,   508,   498,   472,   474,
-     481,   476,   481,   478,   438,   439,     0,   677,   421,   422,
-       0,   677,   417,   419,   411,   568,   567,   566,   125,   573,
-     572,   571,   661,   593,   592,   111,   113,   112,   110,   661,
-     560,   559,   661,   377,   376,   461,   240,   576,   661,   101,
-     100,   524,   537,   546,     0,   518,   137,   661,   149,   147,
-     238,   583,   582,   584,   578,   579,   589,   588,   587,   602,
-     677,   596,   597,   609,     0,     0,   661,   437,   661,   424,
-     423,   420,   172,   562,   379,   104,     0,     0,     0,   520,
-     154,   604,     0,   612,   480,   484,   486,   488,   482,   491,
-     445,   426,     0,     0,     0,     0,     0,   661,   526,   525,
-     661,   539,   538,   661,   548,   547,     0,     0,     0,   151,
-     152,   661,   153,   217,   600,   661,   661,   661,   661,     0,
-       0,     0,     0,   594,   175,   176,   173,   174,   561,   563,
-     564,   378,   384,   385,   383,   382,   386,   380,     0,   102,
-     528,   541,   550,     0,     0,   150,     0,     0,     0,     0,
-       0,     0,   157,     0,   160,   158,   159,   661,   156,   155,
-     190,   216,   485,   487,   489,   483,   440,   425,   435,   436,
-     428,   430,   431,   432,   429,   433,   434,   661,     0,     0,
-     661,   661,   677,   677,   108,     0,   103,     0,     0,     0,
-       0,   220,     0,   193,     0,     0,   613,     0,     0,     0,
-     661,   161,   189,   218,   427,     0,   235,     0,   233,   387,
-     381,   107,   106,   105,   527,   529,   532,   533,   534,   535,
-     536,   661,   531,   540,   542,   545,   661,   544,   549,   661,
-     552,   553,   554,   555,   556,   557,   661,   221,   661,   661,
-     194,   192,   167,     0,   164,   677,     0,   169,   617,     0,
-     209,     0,     0,     0,   178,     0,   606,   677,   677,   215,
-       0,   211,   162,   661,   236,   234,   530,   543,   551,   223,
-     219,   196,   165,   166,   661,   170,   661,   210,     0,   620,
-     614,     0,   616,   624,   661,   179,   661,   661,   207,   206,
-     214,   213,   212,   191,     0,     0,   172,   168,   629,   619,
-     623,     0,   181,   177,   172,     0,   222,   227,   228,   226,
-     224,   225,     0,   195,   200,   201,   199,   197,   198,     0,
-     618,   621,   625,   622,   627,     0,     0,     0,     0,   171,
-     680,   626,     0,     0,   180,   185,   186,   182,   183,   184,
-     208,   232,     0,   229,   677,   645,   646,   643,   205,     0,
-     202,   677,   644,   681,     0,   628,     0,   230,   231,   203,
-     204,   680,   680,     0,   187,     0,     0,   188,   630,   680,
-       0,   680,   631,   680,     0,     0,   680,   680,     0,     0,
-     639,   680,   632,   635,     0,     0,   680,   636,   637,   634,
-     680,   633,     0,   680,     0,   638
+      45,   679,     0,     0,     0,     0,     0,     0,   395,   405,
+     406,   404,   663,   397,   402,   403,   400,     0,     0,   446,
+     452,   453,   451,   663,   454,   460,   456,   458,   448,     0,
+     355,   364,   365,   363,   663,   360,   370,   371,   372,   373,
+     376,   366,   368,   369,   374,   375,   357,   361,   362,     0,
+     267,   277,   278,   276,   663,   285,   279,   287,   281,   283,
+     269,   275,   274,   272,     0,    93,    97,    98,   663,    96,
+       0,   512,   514,   515,   118,   122,   123,   121,   663,   246,
+     249,   250,   248,   663,   663,   663,   663,   663,     0,   131,
+     136,   137,   135,   663,   133,     0,     0,   289,   304,   305,
+     303,   663,   295,   297,   300,   292,   301,   302,   298,     0,
+       0,     0,   307,   323,   324,   322,   663,   312,   315,   314,
+     309,   318,   319,   320,   321,   316,     0,     0,   326,   340,
+     341,   339,   663,   342,   344,   350,   346,   348,   328,   335,
+     336,   337,   338,   331,   334,   333,   497,   503,   504,   502,
+     663,   505,   507,   509,   499,   679,   679,   467,   471,   472,
+     470,   663,   473,   475,     0,   477,     0,   479,   141,   147,
+     148,   146,   663,   144,   145,     0,     0,   410,   416,   417,
+     415,   663,   418,   420,   412,    46,   676,     0,     0,     0,
+       0,     0,     0,   399,   663,   663,     0,     0,   450,   663,
+     663,   663,   663,   663,     0,   359,   663,   663,     0,   271,
+     663,   663,   663,   663,   663,   663,   663,     0,    95,     0,
+     120,   252,   251,   253,   254,   255,     0,   134,     0,     0,
+     294,   663,   663,   663,     0,     0,     0,   311,   663,   663,
+     663,     0,     0,   330,   663,   663,   663,   663,   663,   663,
+     663,   501,   663,   663,   663,   663,   481,   492,   469,   663,
+     663,   663,   663,   663,   663,   143,     0,     0,   414,   663,
+     663,   663,   679,   679,   571,     0,   567,     0,   124,   679,
+     679,   576,     0,   572,     0,   593,   679,   679,   679,   114,
+       0,   109,     0,   560,   398,   401,     0,   377,     0,   462,
+     455,   461,   457,   459,   449,     0,   241,   367,   358,     0,
+     577,   286,   280,   288,   282,   284,   270,   273,     0,    99,
+     679,   679,   521,   679,   516,   679,   519,   679,   523,   525,
+     524,     0,   138,     0,   150,     0,   239,   296,   293,   299,
+     642,   679,   587,     0,   583,   679,   643,   582,     0,   579,
+     644,   679,   679,   679,   592,     0,   588,   313,   310,   317,
+     607,     0,   603,   605,   600,     0,   597,   601,   613,   343,
+     345,   351,   347,   349,   329,   332,   506,   508,   510,   500,
+     474,   476,   483,   478,   483,   480,   440,   441,     0,   679,
+     423,   424,     0,   679,   419,   421,   413,   570,   569,   568,
+     663,   126,   125,   575,   574,   573,   663,   595,   594,   111,
+     113,   112,   110,   663,   562,   561,   663,   379,   378,   463,
+     242,   578,   663,   101,   100,   526,   539,   548,     0,   520,
+     139,   663,   151,   149,   240,   585,   584,   586,   580,   581,
+     591,   590,   589,   604,   679,   598,   599,   611,     0,     0,
+     663,   439,   663,   426,   425,   422,     0,   174,   564,   381,
+     104,     0,     0,     0,   522,   156,   606,     0,   614,   482,
+     486,   488,   490,   484,   493,   447,   428,   127,     0,     0,
+       0,     0,     0,   663,   528,   527,   663,   541,   540,   663,
+     550,   549,     0,     0,     0,   153,   154,   663,   155,   219,
+     602,   663,   663,   663,   663,     0,     0,     0,     0,   596,
+     177,   178,   175,   176,   563,   565,   566,   380,   386,   387,
+     385,   663,   388,   382,     0,   102,   530,   543,   552,     0,
+       0,   152,     0,     0,     0,     0,     0,     0,   159,     0,
+     162,   160,   161,   663,   158,   157,   192,   218,   487,   489,
+     491,   485,   442,   427,   437,   438,   663,   432,   433,   434,
+     431,   435,   436,   663,     0,     0,   384,   663,   663,   679,
+     679,   108,     0,   103,     0,     0,     0,     0,   222,     0,
+     195,     0,     0,   615,     0,     0,     0,   663,   163,   191,
+     220,   430,   429,     0,   237,     0,   235,   389,   383,   107,
+     106,   105,   529,   531,   534,   535,   536,   537,   538,   663,
+     533,   542,   544,   547,   663,   546,   551,   663,   554,   555,
+     556,   557,   558,   559,   663,   223,   663,   663,   196,   194,
+     169,     0,   166,   679,     0,   171,   619,     0,   211,     0,
+       0,     0,   180,     0,   608,   679,   679,   217,     0,   213,
+     164,   663,   238,   236,   532,   545,   553,   225,   221,   198,
+     167,   168,   663,   172,   663,   212,     0,   622,   616,     0,
+     618,   626,   663,   181,   663,   663,   209,   208,   216,   215,
+     214,   193,     0,     0,   174,   170,   631,   621,   625,     0,
+     183,   179,   174,     0,   224,   229,   230,   228,   663,   227,
+       0,   197,   202,   203,   201,   663,   200,     0,   620,   623,
+     627,   624,   629,     0,     0,     0,   226,     0,   199,   173,
+     682,   628,     0,     0,   182,   187,   188,   184,   185,   186,
+     210,   234,     0,   231,   679,   647,   648,   645,   207,     0,
+     204,   679,   646,   683,     0,   630,     0,   232,   233,   205,
+     206,   682,   682,     0,   189,     0,     0,   190,   632,   682,
+       0,   682,   633,   682,     0,     0,   682,   682,     0,     0,
+     641,   682,   634,   637,     0,     0,   682,   638,   639,   636,
+     682,   635,     0,   682,     0,   640
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -969,  -969,  -969,    46,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,   363,  -969,  -969,   372,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   137,  -969,
-    -969,  -969,  -225,   365,  -969,  -969,  -969,  -969,  -969,   793,
-    -969,   841,   343,  -969,  -969,  -969,  -969,  -969,    75,  -969,
-     337,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -409,  -969,  -969,  -969,  -969,  -969,
-    -969,  -388,  -969,  -969,  -969,  -969,  -969,  -405,  -969,  -183,
-    -969,  -438,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -968,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -491,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -431,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -594,  -969,  -582,  -969,
-    -432,  -969,  -443,  -969,  -180,  -969,  -969,  -194,  -969,   138,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,   142,
-    -969,  -969,  -969,  -969,  -969,  -969,   153,  -969,  -969,  -969,
-    -969,  -969,   161,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,   164,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-     168,  -969,  -969,  -969,  -969,  -969,   180,  -969,   191,   276,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -300,  -969,  -969,  -969,  -969,  -969,  -969,  -135,  -969,
-    -969,  -117,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -202,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -167,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,  -969,
-    -969,  -969,  -969,  -969,  -969,  -356,  -969,  -969,  -969,  -353,
-    -969,  -969,  -440,  -969,  -969,  -315,  -969,  -428,  -969,  -969,
-    -423,  -969,  -969,   189,  -969,  -969,  -372,  -969,  -969,  -707,
-    -969,  -969,  -969,  -969,  -969,  -969,  -969,  -360,   353,  -254,
-    -668,  -969,  -969,  -969,  -969,  -488,  -519,  -969,  -969,  -487,
-    -969,  -969,  -969,  -507,  -969,  -969,  -969,  -567,  -969,  -969,
-    -969,  -674,  -506,  -969,  -969,  -969,   325,  -192,  -314,   589,
-    -969,  -969,  -969,  1163,  -969,   381,  -969,  -969,  -969,   235,
-    -969,    -4,    21,   196,   454,  -119,  -969,  -969,   252,  -143,
-    -276
+   -1051, -1051, -1051,   524, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051,   306, -1051, -1051,   304, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,    76, -1051,
+   -1051, -1051,  -247,   322, -1051, -1051, -1051, -1051, -1051,    -6,
+   -1051,   153,   296, -1051, -1051, -1051, -1051, -1051,    27, -1051,
+     292, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051,  -386, -1051, -1051, -1051, -1051, -1051,
+   -1051,  -302, -1051, -1051, -1051, -1051, -1051, -1051,  -487, -1051,
+    -186, -1051,  -415, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1050, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051,  -568, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,  -523,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051,  -680, -1051,  -665,
+   -1051,  -406, -1051,  -339, -1051,  -174, -1051, -1051,  -188, -1051,
+      69, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+      70, -1051, -1051, -1051, -1051, -1051, -1051,    86, -1051, -1051,
+   -1051, -1051, -1051,    92, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051,   117, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051,   127, -1051, -1051, -1051, -1051, -1051,   128, -1051,   135,
+     174, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051,  -395, -1051, -1051, -1051, -1051, -1051, -1051,  -102,
+   -1051, -1051,  -202, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+    -281, -1051, -1051, -1051, -1051, -1051, -1051, -1051,  -189, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051, -1051,
+   -1051, -1051, -1051, -1051, -1051, -1051,  -359, -1051, -1051, -1051,
+    -272, -1051, -1051,  -416, -1051, -1051,  -378, -1051,  -445, -1051,
+   -1051,  -326, -1051, -1051,   141, -1051, -1051,  -409, -1051, -1051,
+    -672, -1051, -1051, -1051, -1051, -1051, -1051, -1051,  -367,   328,
+    -297,  -714, -1051, -1051, -1051, -1051,  -524,  -538, -1051, -1051,
+    -503, -1051, -1051, -1051,  -525, -1051, -1051, -1051,  -585, -1051,
+   -1051, -1051,  -687,  -522, -1051, -1051, -1051,   397,  -198,  -299,
+    1050, -1051, -1051, -1051,  1049, -1051,   407, -1051, -1051, -1051,
+     247, -1051,    -4,    21,   509,   148,  -121, -1051, -1051,  -115,
+    -126,  -293
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -1153,39 +1157,39 @@
       -1,     1,    97,    98,   109,   163,    99,     2,   114,   115,
      103,     3,   119,   120,   184,   127,   178,   128,   122,   123,
      141,   200,   356,   202,   142,   266,   357,   459,   410,   189,
-     136,   181,   129,   138,   220,   168,   216,   169,   218,   954,
-     222,   955,   172,   300,   173,   199,   355,   437,   301,   352,
-     196,   197,   242,   321,   243,   378,   444,   766,   528,   870,
-    1015,   926,  1016,   738,   482,   739,   327,   244,   383,   446,
-     725,   483,   331,   245,   389,   448,   779,   554,   343,   915,
-     454,   562,   781,   879,   938,   939,   983,  1073,   984,  1074,
-     985,  1076,  1106,   922,   986,  1083,  1116,  1155,  1193,  1167,
-     940,  1032,   941,  1022,  1071,  1125,  1179,  1148,  1180,   987,
-    1119,  1079,   988,  1090,   989,  1091,   942,   991,   943,  1020,
-    1068,  1124,  1172,  1141,  1173,  1037,   956,  1035,   957,   783,
-     563,   753,   495,   329,   916,   386,   447,   484,   319,   249,
-     375,   443,   671,   672,   667,   669,   670,   666,   668,   250,
-     333,   449,   685,   684,   686,   335,   251,   450,   691,   690,
-     692,   337,   252,   451,   700,   701,   695,   696,   698,   699,
-     697,   317,   253,   372,   442,   664,   663,   501,   502,   744,
-     485,   864,   924,  1011,  1010,   309,   254,   350,   255,   365,
-     440,   653,   654,   346,   256,   402,   455,   719,   717,   718,
-     839,   840,   642,   900,   950,   835,   836,   643,   313,   314,
-     257,   441,   661,   657,   659,   660,   658,   746,   486,   341,
-     258,   398,   453,   708,   709,   711,   713,   624,   625,   894,
-     948,   945,   946,   947,   626,   627,   339,   487,   395,   452,
-     705,   702,   703,   704,   324,   260,   445,   325,   772,   773,
-     774,   775,   776,   906,   929,  1017,   777,   907,   932,  1018,
-     778,   908,   935,  1019,   740,   488,   861,   923,   723,   474,
-     724,   730,   475,   731,   757,   522,   796,   582,   797,   791,
-     583,   792,   803,   584,   804,   732,   918,   854,   813,   604,
-     814,   892,   809,   605,   810,   890,  1085,   315,   316,   368,
-     815,   893,  1080,  1081,  1082,  1109,  1110,  1129,  1112,  1113,
-    1131,  1153,  1161,  1150,  1191,  1202,  1212,  1213,  1215,  1220,
-    1203,   798,   799,  1181,  1182,   182,   100,   816,   347,   206,
-     207,   305,   208,   110,   116,   130,   131,   156,   148,   212,
-     361,   117,   132,    12,  1184,   157,   187,   158,   101,   102,
-     118
+     136,   181,   129,   138,   220,   168,   216,   169,   218,   970,
+     222,   971,   172,   300,   173,   199,   355,   437,   301,   352,
+     196,   197,   242,   321,   243,   378,   444,   778,   528,   884,
+    1032,   942,  1033,   750,   482,   751,   327,   244,   383,   446,
+     737,   483,   862,   331,   245,   389,   448,   791,   554,   343,
+     930,   454,   562,   793,   893,   954,   955,   999,  1091,  1000,
+    1092,  1001,  1094,  1124,   938,  1002,  1101,  1134,  1173,  1213,
+    1187,   956,  1049,   957,  1039,  1089,  1143,  1199,  1166,  1200,
+    1003,  1137,  1097,  1004,  1108,  1005,  1109,   958,  1007,   959,
+    1037,  1086,  1142,  1192,  1159,  1193,  1055,   972,  1053,   973,
+     795,   563,   765,   495,   329,   931,   386,   447,   484,   319,
+     249,   375,   443,   675,   676,   671,   673,   674,   670,   672,
+     250,   333,   449,   692,   691,   693,   335,   251,   450,   699,
+     698,   700,   337,   252,   451,   709,   710,   704,   705,   707,
+     708,   706,   317,   253,   372,   442,   667,   666,   501,   502,
+     756,   485,   878,   940,  1028,  1027,   309,   254,   350,   255,
+     365,   440,   654,   655,   346,   256,   402,   455,   731,   729,
+     730,   851,   852,   642,   914,   966,   847,   848,   643,   313,
+     314,   257,   441,   663,   659,   661,   662,   660,   758,   486,
+     341,   258,   398,   453,   719,   720,   722,   724,   624,   625,
+     908,   964,   961,   962,   963,   626,   627,   339,   487,   395,
+     452,   715,   712,   713,   714,   324,   260,   445,   325,   784,
+     785,   786,   787,   788,   921,   945,  1034,   789,   922,   948,
+    1035,   790,   923,   951,  1036,   752,   488,   875,   939,   735,
+     474,   736,   742,   475,   743,   769,   522,   808,   582,   809,
+     803,   583,   804,   815,   584,   816,   744,   933,   868,   825,
+     604,   826,   906,   821,   605,   822,   904,  1103,   315,   316,
+     368,   827,   907,  1098,  1099,  1100,  1127,  1128,  1147,  1130,
+    1131,  1149,  1171,  1181,  1168,  1211,  1222,  1232,  1233,  1235,
+    1240,  1223,   810,   811,  1201,  1202,   182,   100,   828,   347,
+     206,   207,   305,   208,   110,   116,   130,   131,   156,   148,
+     212,   361,   117,   132,    12,  1204,   157,   187,   158,   101,
+     102,   118
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1193,570 +1197,233 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      10,   183,   508,   248,    11,    11,   564,   579,   422,   567,
-      10,   634,   577,   793,   246,    16,   632,   247,   578,   349,
-     271,     4,   633,   600,   179,    16,   185,    16,   601,     5,
-     259,   471,    14,   493,   513,   529,   788,   537,   542,   552,
-     560,   575,   591,   609,   620,   631,   640,   837,   841,   308,
-      16,   146,   472,   147,   494,   514,   106,     6,   538,     7,
-     553,   561,   576,   592,   610,   621,    16,   641,   476,   164,
-     108,   523,   165,   217,   219,   221,   223,   568,   585,   603,
-     614,   139,   140,   134,   473,    16,   506,   520,    16,   507,
-     521,   524,   112,   565,   580,   598,   566,   581,   599,   644,
-     166,    10,   165,    10,   225,   720,    16,    16,   167,     6,
-     721,     7,   311,   789,   198,   113,   788,    10,   105,   366,
-      11,    11,    11,   107,   489,     6,   227,     7,    10,   228,
-      11,   411,   215,   121,   800,    11,    11,   801,   167,     6,
-     232,     7,   126,   224,   466,   113,   727,   234,   235,   465,
-     236,   728,   348,    16,   204,   465,   205,   263,  1149,  -615,
-      11,    11,    11,    11,   273,  1012,  1156,   186,  1087,   362,
-    1013,   587,   556,  1088,   525,   367,   239,   155,   165,   240,
-     165,   379,    10,   734,   191,   735,    16,    10,   736,   155,
-     180,   155,    16,   390,    11,   788,   794,  1053,   241,   391,
-    1175,  1176,  1177,   914,   210,    13,    10,   304,   213,    10,
-       6,   125,     7,   137,   167,   392,   167,   925,   408,   165,
-     408,    11,    11,    11,    11,    11,    11,    11,    11,    11,
-      11,    11,    11,    11,    11,    11,    11,    11,   155,   155,
-     155,   155,   548,   165,   944,   279,   399,   271,   124,   517,
-     409,   165,   414,   545,   463,   167,   125,   595,   613,   311,
-     515,   165,   463,   516,   543,  -629,  -629,   544,   593,   611,
-     622,   594,   612,   623,   126,    10,   519,   165,   710,   167,
-     547,   489,   165,   712,   597,   466,    16,   167,   463,   896,
-     298,   456,  1142,   466,   307,   936,   635,   167,   969,     6,
-     975,     7,     6,    10,     7,   113,   165,   299,   518,  1135,
-    1052,  1057,   546,   167,   555,  1143,   596,   463,   167,   466,
-     143,   144,   145,   549,   466,   937,   555,   312,  1108,   556,
-     161,   323,  1111,   958,  1130,   174,   175,   369,   104,   165,
-    1160,   345,   167,   636,   204,   530,   205,   380,   466,  1136,
-    1075,     8,  1183,     6,   628,     7,   467,  1198,   125,   113,
-     192,   193,   194,   195,   264,    10,   265,   780,   782,   403,
-     404,     9,   353,   406,   354,   167,    10,   165,   637,  1207,
-     418,   419,   165,   159,   951,   952,  1201,   359,   463,   360,
-     363,   768,   364,   769,   261,   159,   770,   159,   771,    10,
-      10,   370,    10,   371,    11,   349,   349,   373,   376,   374,
-     377,   531,  1199,   167,    10,    10,  1211,   462,   167,   466,
-     489,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   381,  1206,
-     382,   464,   569,   570,   159,   159,   159,   159,  1163,   534,
-    1210,   384,   462,   385,  1164,   489,   165,  1216,    11,    11,
-      11,    11,    11,    11,   272,   555,  1223,   463,   556,     6,
-     387,     7,   388,    11,    11,   113,   464,   569,   570,   393,
-     465,   394,   646,   135,   299,    11,   190,   396,   936,   397,
-     509,   133,   167,  1058,   415,   400,   937,   401,   160,   201,
-     203,   811,   852,   188,   853,    11,   859,  1001,   860,   862,
-    1003,   863,   868,   460,   869,   964,   877,   898,   878,   899,
-      11,   165,  1005,   951,   952,   214,    11,  1006,   997,   726,
-     927,   733,   928,   741,   982,   930,   965,   931,   348,   348,
-     933,  1093,   934,   754,    11,  1030,   758,  1066,  1069,  1067,
-    1070,    11,    11,   422,  1108,  1160,   165,   167,   951,   952,
-    1033,  1168,  1000,   272,   784,    11,    11,    11,   967,  1104,
-    1114,  1105,  1115,  1169,  1046,  1055,  1061,  1048,  1007,  1063,
-     496,  1059,    11,    11,   497,  1045,  1054,  1060,  1117,  1049,
-    1118,  1064,   167,   953,  1050,   498,  1065,  1002,   165,   462,
-     951,   952,   489,   499,   438,   310,   500,   318,   320,   322,
-     503,   328,   330,   332,   334,   336,   338,   340,   342,   344,
-     949,   351,   504,   464,   569,   570,   405,   465,  1159,   865,
-     895,    11,    11,   505,   167,  1004,   706,   707,   326,   913,
-     602,  1151,    10,  1185,  1152,  1051,  1056,  1162,  1217,   587,
-     556,  1174,   306,   439,     0,     0,     0,     0,   647,   648,
-     649,   650,   651,   652,  1047,     0,  1062,     0,     0,     0,
-    1170,     0,     0,   655,   656,  1044,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   662,     0,     0,     0,     0,
-       0,   272,     0,   722,   155,   729,   155,   737,   155,     0,
-     917,   917,    10,    10,     0,   665,     0,     0,   155,     0,
-       0,   155,     0,     0,     0,  1139,  1146,     0,     0,     0,
-     673,     0,     0,     0,     0,     0,   675,   345,   345,   155,
-     966,     0,     0,   790,   795,   802,  1140,  1147,     0,   808,
-     812,   845,   846,     0,   681,     0,     0,     0,   849,   850,
-       0,   682,   683,     0,     0,   855,   856,   857,     0,     0,
-       0,   834,   838,     0,     0,   687,   688,   689,     0,     0,
-     209,     0,     0,   211,     0,     0,     0,     0,     0,     0,
-       0,     0,   693,   694,   462,     0,     0,     0,   165,   871,
-     872,     0,   873,     0,   874,     0,   875,     0,     0,   463,
-       0,     0,     0,     0,     0,   275,     0,   276,   464,   277,
-     881,   278,   465,     0,   883,     0,     0,     0,     0,     0,
-     885,   886,   887,     0,   167,     0,     0,     0,     0,     0,
-     466,   715,   716,     0,     0,     0,     0,     0,   467,     0,
-       0,    10,    10,     0,     0,    10,    10,     0,     0,     0,
-       0,    10,    10,    10,     0,  1023,     0,     0,   897,     0,
-     468,     0,   901,     0,     0,     0,     0,    10,    10,    10,
-      10,    10,     0,     0,     0,     0,     0,    10,     0,    10,
-       0,    10,    10,    10,     0,     0,     0,     0,    11,  1036,
-    1038,     0,     0,    10,     0,     0,     0,    10,     0,     0,
-     159,     0,   159,     0,   159,     0,  1077,    10,  1084,  1086,
-       0,   911,     0,     0,   159,     0,  1128,   159,     0,     0,
-       0,    11,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   170,    11,    11,     0,   159,     0,     0,     0,  1154,
-       0,     0,     0,     0,     0,   272,   272,    11,    11,     0,
-       0,     0,     0,   170,   462,     0,     0,   489,   165,     0,
-       0,     0,     0,     0,     0,     0,   225,   272,   272,   463,
-       0,     0,    11,    11,    11,    11,    11,    11,   464,   171,
-     745,   747,   465,     0,     0,     0,     0,   477,   227,     0,
-       0,   228,  1192,   165,   167,     0,     0,     0,   767,     0,
-     466,   171,   555,     0,   463,   556,     0,     0,   467,   234,
-     235,     0,   236,     0,  1014,     0,     0,     0,     0,   237,
-     155,     0,     0,  1218,     0,     0,     0,     0,  1221,   167,
-     557,     0,  1225,  1041,  1042,   466,     0,    10,    10,     0,
-       0,   240,     0,   467,     0,     0,     0,     0,   645,     0,
-       0,     0,     0,     0,   155,   155,     0,   225,   478,     0,
-     241,     0,     0,     0,     0,   479,     0,  1194,     0,     0,
-    1072,   155,  1078,   155,   155,  1089,     0,     0,   477,   227,
-     462,     0,   228,   489,   165,     0,     0,     0,   912,     0,
-       0,     0,     0,     0,     0,   463,  1103,     0,     0,    10,
-     234,   235,     0,   236,   464,     0,     0,     0,  1120,  1121,
-       0,     0,     0,     0,     0,     0,    10,    10,     0,   225,
-     167,   968,     0,     0,     0,     0,   466,     0,     0,     0,
-       0,    11,   973,   974,   467,     0,     0,     0,    11,     0,
-       0,   227,     0,     0,   228,     0,   165,  1008,  1009,   412,
-     416,   241,     0,     0,     0,   232,   490,   463,     0,    11,
-       0,     0,   234,   235,   272,   236,     0,     0,     0,     0,
-     465,     0,  1024,  1025,  1026,  1027,  1028,  1029,   165,     0,
-       0,     0,   167,     0,    10,     0,    10,   232,   466,   463,
-       0,   239,   615,     0,   240,  1188,     0,   413,   417,     0,
-       0,     0,  1190,  1171,  1178,     0,     0,   616,     0,     0,
-       0,     0,     0,   241,   167,     0,     0,     0,   606,     0,
-     466,     0,     0,   239,     0,     0,   159,     0,     0,     0,
-     457,     0,   155,   469,   480,   491,   511,   526,   532,   535,
-     540,   550,   558,   573,   589,   607,   618,   629,   638,     0,
-     617,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     159,   159,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   111,     0,     0,     0,     0,     0,   159,   458,   159,
-     159,   470,   481,   492,   512,   527,   533,   536,   541,   551,
-     559,   574,   590,   608,   619,   630,   639,     0,  1021,   162,
-       0,   225,     0,     0,   176,   177,     0,     0,     0,     0,
-       0,     0,   847,     0,   848,     0,     0,     0,     0,   851,
-       0,     0,     0,   227,     0,     0,   228,   858,     0,     0,
-       0,  1157,     0,     0,     0,     0,     0,   232,  1158,     0,
-       0,     0,   866,     0,   234,   235,   867,   236,     0,     0,
-     548,     0,   465,     0,     0,     0,     0,     0,     0,  1186,
-     272,     0,   262,     0,     0,     0,     0,   976,   876,     0,
-     267,   268,   880,   239,     0,     0,   240,   977,   274,     0,
-     882,     0,     0,   272,     0,   884,     0,     0,     0,   978,
-     979,     0,   888,     0,   980,   241,     0,   981,   889,     0,
-     919,     0,   891,  -163,     0,   297,   225,     0,     0,     0,
+      10,   422,   349,    16,    11,    11,   600,   805,   259,   248,
+      10,   246,   849,   853,   271,     6,   159,     7,   183,    16,
+      16,     4,   179,   247,   185,  -617,   508,   308,   159,   124,
+     159,   476,    14,   567,   523,   577,     6,   125,     7,   632,
+     568,   585,   603,   614,   578,     6,    16,     7,   633,    16,
+       6,   113,     7,     5,   471,   126,   493,   513,   529,   106,
+     537,   542,   552,   560,   575,   591,   609,   620,   631,   640,
+     108,   217,   219,   221,   223,   112,    16,   159,   159,   159,
+     159,   473,   215,   506,   520,   800,    16,     6,    16,     7,
+     565,   580,   598,   113,  1167,   800,   644,   272,   134,     8,
+     311,    10,  1174,    10,   812,   524,    16,   813,   224,   411,
+     564,   579,   204,   366,   205,   634,   165,    10,   105,     9,
+      11,    11,    11,   107,   198,   601,   732,   263,    10,   739,
+      11,   733,   170,   121,   740,    11,    11,    16,   472,   273,
+     494,   514,   362,   304,   538,   165,   553,   561,   576,   592,
+     610,   621,   167,   641,   170,    16,   311,   126,   466,   367,
+      11,    11,    11,    11,   800,   806,   379,   186,  1029,   348,
+     507,   521,   801,  1030,     6,   165,     7,   566,   581,   599,
+     113,   167,    10,   390,   191,   937,  1105,    10,   525,    16,
+     146,  1106,   147,   298,    11,   489,   272,     6,   204,     7,
+     205,   489,   165,   113,   210,   780,    10,   781,   213,    10,
+     782,   167,   783,   960,   746,   408,   747,   456,   391,   748,
+     465,    11,    11,    11,    11,    11,    11,    11,    11,    11,
+      11,    11,    11,    11,    11,    11,    11,    11,   167,   392,
+     165,   271,   587,   556,   466,   279,   555,   414,   264,   556,
+     265,   463,   941,   399,   519,   517,   125,   515,   547,   545,
+     721,   543,   597,   595,   613,   593,   611,   622,  1071,   516,
+     723,   635,  1153,   544,   628,    10,   167,   594,   612,   623,
+     910,   165,   466,   225,   165,   985,   967,   968,    16,   225,
+     991,   171,   463,     6,   307,     7,  1195,  1196,  1197,   113,
+     139,   140,   165,    10,   555,   227,   462,   353,   228,   354,
+     165,   227,  1154,   171,   228,  -631,  -631,   167,   636,   232,
+     167,   463,   952,   466,   272,   232,   234,   235,   359,   236,
+     360,   467,   234,   235,   465,   236,   237,   369,   167,   548,
+     465,   518,  1126,  1180,   509,   546,   167,   380,   165,   596,
+     412,   416,   466,   637,  1093,   239,   969,   953,   240,   463,
+     467,   239,  1070,  1075,   240,    10,   363,  1126,   364,   403,
+     404,  1129,  1148,   406,   974,   478,    10,   241,  1180,  1226,
+     418,   419,   510,   241,   167,   165,  1203,   792,   929,   794,
+     466,   164,  1219,   349,   165,   349,   370,  1218,   371,    10,
+      10,  1221,    10,   462,    11,     6,   489,     7,  1227,  1230,
+     104,   113,  1231,  1236,    10,    10,  1243,   373,   125,   374,
+     549,   167,   166,   133,   952,   408,   135,   464,   569,   570,
+     167,   457,   953,   415,   469,   480,   491,   511,   526,   532,
+     535,   540,   550,   558,   573,   589,   607,   618,   629,   638,
+     165,   555,   967,   968,   556,   160,   188,   409,    11,    11,
+      11,    11,    11,    11,   165,   460,   967,   968,   998,     6,
+     225,     7,   137,    11,    11,   376,   381,   377,   382,  1076,
+     214,  1111,   646,   165,  1050,    11,   167,   226,   384,   387,
+     385,   388,   227,  1188,   463,   228,   393,   396,   394,   397,
+     167,   229,   230,   823,   231,    11,   232,   233,  1189,   413,
+     417,   496,   497,   234,   235,   400,   236,   401,    13,   167,
+      11,  1021,  1179,   237,   405,   466,    11,   738,   498,   745,
+    1183,   753,  1160,   159,   499,   159,  1184,   159,   238,   860,
+     965,   861,   239,   766,    11,   240,   866,   770,   867,   159,
+    1019,    11,    11,   159,   980,  1161,   879,  1023,   190,   500,
+     348,   422,   348,   909,   241,    11,    11,    11,   796,   503,
+     504,   201,   203,   165,   159,   967,   968,   505,   873,   165,
+     874,   983,    11,    11,  1047,   530,   272,   272,  1020,  1067,
+     458,  1082,   602,   470,   481,   492,   512,   527,   533,   536,
+     541,   551,   559,   574,   590,   608,   619,   630,   639,   167,
+     928,   272,   272,   326,   876,   167,   877,   882,  1066,   883,
+    1081,  1077,   891,  1169,   892,  1069,  1074,  1017,  1063,  1072,
+    1078,    11,    11,   143,   144,   145,   716,   717,   981,   912,
+    1022,   913,    10,   161,  1205,  1190,  1170,  1182,   174,   175,
+    1237,   531,   943,  1194,   944,   155,   946,   949,   947,   950,
+    1084,  1087,  1085,  1088,  1016,   439,     0,   155,   180,   155,
+    1122,     0,  1123,   192,   193,   194,   195,   310,   306,   318,
+     320,   322,     0,   328,   330,   332,   334,   336,   338,   340,
+     342,   344,     0,   351,  1018,  1064,  1073,  1079,  1132,  1135,
+    1133,  1136,     0,     0,     0,     0,     0,   261,  1068,     0,
+    1083,     0,    10,    10,     0,     0,   155,   155,   155,   155,
+     932,   932,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   225,   982,   857,   858,     0,  1157,  1164,     0,     0,
+     863,   864,  1065,     0,  1080,     0,     0,   869,   870,   871,
+       0,   165,   477,   227,   462,   462,   228,   489,   165,   165,
+       0,     0,   463,     0,     0,   299,     0,     0,     0,   463,
+     463,     0,     0,     0,   234,   235,     0,   236,   464,   464,
+       0,   885,   886,   465,   887,   312,   888,   167,   889,   323,
+       0,     0,   272,   466,   167,   167,     0,     0,     0,   345,
+     466,   466,   895,     0,     0,     0,   897,     0,   467,   467,
+       0,     0,   899,   900,   901,     0,     0,     0,     0,     0,
+    1158,  1165,     0,   534,     0,   241,     0,     0,     0,     0,
+     490,   468,     0,    10,    10,     0,     0,     0,     0,    10,
+      10,   548,     0,     0,     0,    10,    10,    10,     0,  1040,
+     911,     0,     0,     0,   915,   159,     0,     0,   992,     0,
+       0,    10,    10,    10,    10,    10,     0,     0,   993,     0,
+       0,    10,     0,    10,     0,    10,    10,    10,     0,     0,
+     994,   995,    11,  1054,  1056,   996,     0,    10,   997,   159,
+     159,    10,     0,     0,  -165,     0,     0,   438,     0,     0,
+       0,  1095,    10,  1102,  1104,   926,     0,   159,  1146,   159,
+     159,     0,     0,   975,   978,     0,     0,    11,     0,     0,
+       0,   462,     0,     0,   489,   165,     0,     0,    11,    11,
+       0,  1172,     0,     0,     0,     0,   463,     0,     0,   480,
+    1014,     0,   299,    11,    11,   464,   569,   570,     0,   465,
+       0,   647,   648,   649,   650,   651,   652,   225,     0,   509,
+       0,   167,     0,     0,     0,     0,   656,   657,    11,    11,
+      11,    11,    11,    11,     0,     0,   165,     0,   664,   227,
+       0,     0,   228,     0,     0,   232,  1212,   463,     0,     0,
+     615,   272,     0,   232,     0,     0,     0,  1013,   668,     0,
+     234,   235,     0,   236,     0,   616,     0,     0,   465,     0,
+       0,     0,   167,   677,   272,     0,     0,  1238,   466,   679,
+       0,   239,  1241,     0,     0,     0,  1245,     0,     0,   239,
+    1059,  1060,   240,   757,   759,    10,    10,   686,     0,     0,
+       0,     0,     0,     0,   688,   689,     0,     0,   617,     0,
+       0,   241,     0,     0,   779,     0,   934,     0,   694,   695,
+     696,     0,     0,     0,     0,  1214,     0,     0,     0,   272,
+       0,   159,   976,   979,     0,   701,   702,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   302,   303,   227,   462,
-       0,   228,     0,   165,     0,     0,   272,     0,   159,     0,
-       0,     0,   232,     0,   463,     0,     0,     0,   586,   234,
-     235,     0,   236,     0,   569,   570,     0,   465,     0,   237,
-     571,     0,     0,   909,     0,     0,   225,   272,   358,   167,
-       0,     0,   272,     0,     0,   466,   272,     0,   239,   587,
-       0,   240,     0,   467,     0,     0,     0,     0,   227,   462,
-       0,   228,     0,   165,     0,     0,     0,     0,   478,     0,
-     241,     0,   232,     0,   463,   588,     0,     0,     0,   234,
-     235,     0,   236,     0,     0,     0,   407,   465,     0,   237,
-       0,     0,     0,     0,     0,     0,   420,   509,     0,   167,
-     421,     0,     0,   423,     0,   466,   424,     0,   239,   425,
-       0,   240,   426,   467,   427,   225,     0,   428,     0,     0,
-     429,     0,     0,   430,   431,   432,   433,     0,   478,   434,
-     241,     0,   435,   436,     0,   510,   477,   227,     0,     0,
-     228,     0,   165,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   463,     0,     0,     0,     0,   234,   235,
-       0,   236,     0,     0,     0,     0,     0,     0,   237,     0,
-       0,     0,     0,     0,  1043,     0,   225,     0,   167,     0,
-       0,     0,     0,     0,   466,     0,     0,     0,     0,     0,
-     240,     0,   467,     0,  1094,     0,  1095,     0,   227,     0,
-       0,   228,     0,   165,     0,     0,     0,   478,     0,   241,
-       0,     0,   232,     0,   996,  1195,  1196,     0,     0,   234,
-     235,     0,   236,  1200,     0,  1204,     0,  1205,   225,   237,
-    1208,  1209,  1102,     0,     0,  1214,     0,     0,  1107,   167,
-    1219,     0,     0,     0,  1222,   466,     0,  1224,   239,  1122,
-     227,   240,     0,   228,     0,   165,     0,     0,     0,     0,
-       0,   674,     0,     0,     0,     0,   463,     0,   478,     0,
-     241,   234,   235,     0,   236,   539,   676,   677,   678,   679,
-     680,     0,     0,     0,     0,     0,   959,   962,     0,     0,
-       0,   167,     0,     0,     0,     0,     0,   466,     0,     0,
-       0,     0,     0,   240,     0,   467,     0,     0,     0,     0,
-       0,     0,   480,   998,     0,     0,     0,     0,     0,     0,
-       0,     0,   241,     0,     0,     0,     0,   961,     0,     0,
-       0,  1187,     0,     0,   960,   963,     0,     0,  1189,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1197,     0,     0,     0,     0,     0,     0,     0,
-     481,   999,     0,     0,     0,   714,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   742,   743,     0,     0,
-     748,   749,   750,   751,   752,     0,   755,   756,     0,   759,
-     760,   761,   762,   763,   764,   765,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   785,   786,   787,
-       0,     0,     0,   805,   806,   807,     0,     0,   817,   818,
-     819,   820,   821,   822,   823,   824,   825,   826,   827,   225,
-       0,   828,   829,   830,   831,   832,   833,     0,     0,     0,
-     842,   843,   844,     0,     0,     0,   226,     0,     0,     0,
-       0,   227,     0,     0,   228,     0,     0,     0,     0,     0,
-     229,   230,     0,   231,     0,   232,   233,     0,     0,     0,
-       0,     0,   234,   235,     0,   236,     0,  1137,  1144,     0,
-       0,   462,   237,     0,   489,   165,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   463,   238,     0,     0,
-       0,   239,     0,     0,   240,     0,   569,   570,  1165,   465,
-       0,     0,   571,     0,     0,     0,     0,     0,     0,     0,
-       0,   167,     0,   241,     0,  1138,  1145,   466,     0,   555,
-       0,     0,   556,     0,     0,   467,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1166,   572,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   902,     0,     0,     0,     0,
-       0,     0,   903,     0,     0,   904,     0,     0,     0,     0,
-       0,   905,     0,     0,     0,     0,     0,     0,     0,     0,
-     910,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   920,
-       0,   921,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1121,     0,     0,    10,   481,  1015,
+     272,     0,     0,     0,     0,   272,  1138,  1139,     0,   272,
+       0,     0,     0,     0,    10,    10,  1155,  1162,     0,     0,
+       0,     0,     0,     0,   726,   727,     0,     0,     0,    11,
+       0,     0,     0,     0,     0,     0,    11,   111,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1185,     0,     0,
+       0,   734,   155,   741,   155,   749,   155,   462,     0,    11,
+     489,     0,     0,     0,     0,   162,     0,     0,   155,     0,
+     176,   177,   155,   462,     0,     0,   489,   165,     0,     0,
+       0,   464,   569,   570,    10,   465,    10,     0,   463,     0,
+     345,     0,   345,   155,     0,  1208,     0,   464,   802,   807,
+     814,   465,  1210,     0,     0,   820,   824,   587,   556,     0,
+       0,   209,     0,   167,   211,     0,     0,     0,     0,   466,
+       0,   555,     0,     0,   556,     0,     0,   467,   262,     0,
+     846,   850,     0,  1062,     0,     0,   267,   268,   225,     0,
+       0,     0,     0,     0,   274,     0,   275,     0,   276,   557,
+     277,     0,   278,     0,     0,     0,     0,     0,     0,     0,
+     227,     0,     0,   228,     0,   165,     0,     0,     0,     0,
+       0,   297,     0,   225,   232,  1156,  1163,     0,     0,     0,
+       0,   234,   235,     0,   236,     0,     0,     0,     0,     0,
+       0,   237,   302,   303,     0,   227,   462,     0,   228,     0,
+     165,   167,     0,     0,     0,     0,  1186,   466,     0,   232,
+     239,   463,     0,   240,     0,   586,   234,   235,     0,   236,
+       0,   569,   570,     0,   465,     0,   237,   571,     0,     0,
+     478,     0,   241,     0,   358,     0,   167,   539,     0,  1215,
+    1216,     0,   466,     0,     0,   239,   587,  1220,   240,  1224,
+     467,  1225,     0,     0,  1228,  1229,     0,     0,   462,  1234,
+       0,   489,   165,     0,  1239,   478,  1038,   241,  1242,     0,
+       0,  1244,   588,   463,     0,     0,     0,     0,     0,     0,
+       0,     0,   407,   569,   570,     0,   465,     0,     0,   571,
+       0,     0,   420,     0,     0,   927,   421,     0,   167,   423,
+       0,     0,   424,     0,   466,   425,   555,     0,   426,   556,
+     427,     0,   467,   428,     0,     0,   429,     0,     0,   430,
+     431,   432,   433,     0,     0,   434,     0,   225,   435,   436,
+     984,     0,     0,     0,   572,     0,     0,     0,     0,     0,
+       0,   989,   990,     0,     0,     0,     0,     0,   477,   227,
+       0,     0,   228,     0,   165,     0,  1024,  1025,     0,     0,
+       0,     0,     0,     0,     0,   463,     0,     0,     0,     0,
+     234,   235,     0,   236,     0,     0,     0,     0,     0,     0,
+     237,  1041,  1042,  1043,  1044,  1045,  1046,     0,  1031,   645,
+     167,     0,     0,     0,   155,     0,   466,     0,     0,     0,
+       0,   653,   240,     0,   467,     0,     0,     0,     0,     0,
+       0,     0,   658,     0,     0,     0,     0,   225,     0,   478,
+       0,   241,     0,   665,     0,     0,   479,     0,   155,   155,
+       0,     0,     0,     0,     0,     0,     0,     0,   477,   227,
+       0,     0,   228,   669,   165,  1090,   155,  1096,   155,   155,
+    1107,     0,     0,     0,     0,   463,     0,   678,     0,     0,
+     234,   235,     0,   236,     0,     0,     0,   680,     0,     0,
+     237,     0,   681,   682,   683,   684,   685,     0,     0,     0,
+     167,     0,   687,     0,     0,     0,   466,     0,   225,     0,
+     690,     0,   240,     0,   467,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   697,     0,     0,     0,   478,
+     227,   241,     0,   228,     0,   165,  1012,     0,     0,     0,
+       0,   703,     0,     0,     0,     0,   463,     0,     0,     0,
+       0,   234,   235,     0,   236,     0,     0,     0,     0,   711,
+       0,     0,  1175,     0,     0,     0,     0,     0,     0,  1177,
+     718,   167,     0,     0,     0,     0,     0,   466,     0,     0,
+       0,   725,     0,   240,     0,   467,     0,     0,     0,     0,
+     728,     0,  1206,     0,     0,     0,     0,     0,     0,  1191,
+       0,  1198,   241,   754,   755,     0,     0,   977,   760,   761,
+     762,   763,   764,     0,     0,   767,   768,     0,     0,   771,
+     772,   773,   774,   775,   776,   777,     0,     0,     0,     0,
+     155,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     797,   798,   799,     0,     0,     0,     0,   817,   818,   819,
+       0,     0,     0,   829,   830,   831,   832,   833,   834,   835,
+       0,   836,   837,   838,   839,     0,     0,     0,   840,   841,
+     842,   843,   844,   845,   225,     0,     0,     0,   854,   855,
+     856,     0,     0,     0,     0,   859,     0,     0,     0,     0,
+       0,     0,   865,     0,     0,     0,   227,     0,     0,   228,
+     872,   165,     0,     0,     0,     0,     0,     0,     0,     0,
+     232,     0,   463,     0,     0,   880,     0,   234,   235,   881,
+     236,     0,     0,     0,     0,   465,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   167,     0,     0,
+       0,   890,     0,   466,     0,   894,   239,     0,     0,   240,
+       0,     0,     0,   896,     0,     0,     0,     0,   898,     0,
+       0,     0,     0,     0,     0,   902,     0,     0,   241,     0,
+       0,   903,     0,   606,     0,   905,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     970,     0,     0,   971,     0,     0,   972,     0,     0,     0,
-       0,     0,     0,     0,   990,     0,     0,     0,   992,   993,
-     994,   995,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   916,
+       0,     0,     0,     0,     0,   917,     0,     0,     0,     0,
+       0,     0,   918,     0,     0,   919,     0,     0,     0,     0,
+       0,   920,     0,     0,     0,     0,     0,     0,   924,     0,
+     925,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   935,
+       0,   936,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   986,     0,     0,   987,     0,     0,   988,     0,
+       0,     0,     0,     0,     0,     0,  1006,     0,     0,     0,
+    1008,  1009,  1010,  1011,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1031,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1026,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1034,     0,     0,  1039,  1040,     0,     0,     0,     0,     0,
+       0,     0,  1048,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1051,     0,     0,     0,     0,
+       0,     0,  1052,     0,     0,     0,  1057,  1058,     0,     0,
+       0,     0,  1061,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1110,     0,     0,     0,
+       0,     0,     0,  1112,     0,  1113,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1114,     0,
+       0,     0,     0,  1115,     0,     0,  1116,     0,     0,     0,
+       0,     0,     0,  1117,     0,  1118,  1119,     0,     0,     0,
+       0,  1120,     0,     0,     0,     0,     0,  1125,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1140,     0,
+    1141,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1144,     0,  1145,     0,     0,     0,     0,     0,     0,
+       0,  1150,     0,  1151,  1152,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1092,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1176,     0,     0,
+       0,     0,     0,     0,  1178,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1096,     0,     0,     0,     0,  1097,
-       0,     0,  1098,     0,     0,     0,     0,     0,     0,  1099,
-       0,  1100,  1101,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1123,     0,     0,     0,
-       0,     0,     0,     0,     0,    15,     0,  1126,     0,  1127,
-       0,    17,   269,     0,     0,     0,     0,  1132,     0,  1133,
-    1134,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      15,     0,     0,     0,   270,     0,    17,   269,     0,     0,
-       0,     0,     0,     0,     0,     0,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,     0,    15,     0,     0,   461,
-      16,   149,    17,   150,   151,     0,     0,     0,   152,   153,
-     154,     0,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    15,     0,     0,     0,    16,     0,    17,   113,     0,
-       0,     0,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    15,     0,     0,     0,
-      16,     0,    17,   269,     0,     0,     0,     0,     0,     0,
-       0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    15,     0,     0,     0,     0,     0,    17,   269,     0,
-       0,  1111,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    15,     0,     0,     0,
-       0,     0,    17,   269,     0,     0,  1211,     0,     0,     0,
-       0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    15,  1183,     0,     0,     0,     0,    17,   269,     0,
-       0,     0,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    15,     0,     0,     0,
-      16,     0,    17,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    15,     0,     0,     0,     0,     0,    17,   269,     0,
-       0,     0,     0,     0,     0,     0,     0,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96
-};
-
-static const yytype_int16 yycheck[] =
-{
-       4,   144,   442,   197,     8,     9,   449,   450,   368,   449,
-      14,   454,   450,   687,   197,     8,   454,   197,   450,   295,
-     212,     0,   454,   451,   143,     8,   145,     8,   451,     0,
-     197,   440,    11,   442,   443,   444,    17,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,   715,   716,   274,
-       8,   102,   440,   104,   442,   443,   102,     5,   446,     7,
-     448,   449,   450,   451,   452,   453,     8,   455,   440,    28,
-     102,   443,    31,   192,   193,   194,   195,   449,   450,   451,
-     452,    43,    44,    23,   440,     8,   442,   443,     8,   442,
-     443,    20,   101,   449,   450,   451,   449,   450,   451,   455,
-      59,   105,    31,   107,     4,    88,     8,     8,    67,     5,
-      93,     7,   105,    94,    70,    11,    17,   121,    97,   311,
-     124,   125,   126,   102,    30,     5,    26,     7,   132,    29,
-     134,   356,   102,   112,    92,   139,   140,    95,    67,     5,
-      40,     7,    82,   103,    73,    11,    88,    47,    48,    55,
-      50,    93,   295,     8,   102,    55,   104,   102,  1126,    14,
-     164,   165,   166,   167,   103,    88,  1134,   146,    88,   103,
-      93,    77,    78,    93,   103,   102,    76,   131,    31,    79,
-      31,   102,   186,    85,   163,    87,     8,   191,    90,   143,
-     144,   145,     8,   102,   198,    17,    18,   103,    98,   102,
-      16,    17,    18,   103,   183,     9,   210,   103,   187,   213,
-       5,    64,     7,     8,    67,   102,    67,    83,    71,    31,
-      71,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   192,   193,
-     194,   195,    22,    31,   912,   224,   102,   439,    56,   443,
-     103,    31,   103,   447,    42,    67,    64,   451,   452,   105,
-     443,    31,    42,   443,   447,   105,   106,   447,   451,   452,
-     453,   451,   452,   453,    82,   279,   443,    31,   102,    67,
-     447,    30,    31,   102,   451,    73,     8,    67,    42,   102,
-      12,   103,    80,    73,   273,    24,    21,    67,   103,     5,
-     103,     7,     5,   307,     7,    11,    31,   261,   443,    63,
-    1017,  1018,   447,    67,    75,   103,   451,    42,    67,    73,
-     124,   125,   126,   103,    73,    32,    75,   281,   105,    78,
-     134,   285,    14,   103,   105,   139,   140,   316,    13,    31,
-     106,   295,    67,    68,   102,    37,   104,   326,    73,   103,
-    1024,    54,     5,     5,   103,     7,    81,   107,    64,    11,
-     164,   165,   166,   167,   102,   369,   104,   681,   682,   348,
-     349,    74,   102,   352,   104,    67,   380,    31,   103,   105,
-     359,   360,    31,   131,    33,    34,    85,   102,    42,   104,
-     102,    84,   104,    86,   198,   143,    89,   145,    91,   403,
-     404,   102,   406,   104,   408,   681,   682,   102,   102,   104,
-     104,   103,   108,    67,   418,   419,    14,    27,    67,    73,
-      30,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   102,   109,
-     104,    51,    52,    53,   192,   193,   194,   195,    97,   103,
-     110,   102,    27,   104,   103,    30,    31,   105,   462,   463,
-     464,   465,   466,   467,   212,    75,   105,    42,    78,     5,
-     102,     7,   104,   477,   478,    11,    51,    52,    53,   102,
-      55,   104,   461,   120,   438,   489,   161,   102,    24,   104,
-      65,   119,    67,   103,   357,   102,    32,   104,   133,   174,
-     175,   693,   102,   160,   104,   509,   102,   950,   104,   102,
-     950,   104,   102,   438,   104,   924,   102,   102,   104,   104,
-     524,    31,   950,    33,    34,   188,   530,   950,   103,   648,
-     102,   650,   104,   652,   939,   102,   924,   104,   681,   682,
-     102,  1032,   104,   662,   548,   983,   665,   102,   102,   104,
-     104,   555,   556,   913,   105,   106,    31,    67,    33,    34,
-     991,  1155,   950,   311,   683,   569,   570,   571,   924,   102,
-     102,   104,   104,  1155,  1017,  1018,  1019,  1017,   950,  1019,
-     442,  1019,   586,   587,   442,  1017,  1018,  1019,   102,  1017,
-     104,  1019,    67,   103,  1017,   442,  1019,   950,    31,    27,
-      33,    34,    30,   442,   408,   280,   442,   282,   283,   284,
-     442,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     920,   296,   442,    51,    52,    53,   350,    55,   103,   746,
-     832,   635,   636,   442,    67,   950,   615,   616,   285,   893,
-     451,  1129,   646,  1162,  1131,  1017,  1018,  1154,  1215,    77,
-      78,  1157,   271,   418,    -1,    -1,    -1,    -1,   462,   463,
-     464,   465,   466,   467,  1017,    -1,  1019,    -1,    -1,    -1,
-     103,    -1,    -1,   477,   478,   103,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,
-      -1,   439,    -1,   647,   648,   649,   650,   651,   652,    -1,
-     894,   895,   706,   707,    -1,   509,    -1,    -1,   662,    -1,
-      -1,   665,    -1,    -1,    -1,  1124,  1125,    -1,    -1,    -1,
-     524,    -1,    -1,    -1,    -1,    -1,   530,   681,   682,   683,
-     924,    -1,    -1,   687,   688,   689,  1124,  1125,    -1,   693,
-     694,   720,   721,    -1,   548,    -1,    -1,    -1,   727,   728,
-      -1,   555,   556,    -1,    -1,   734,   735,   736,    -1,    -1,
-      -1,   715,   716,    -1,    -1,   569,   570,   571,    -1,    -1,
-     181,    -1,    -1,   184,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   586,   587,    27,    -1,    -1,    -1,    31,   768,
-     769,    -1,   771,    -1,   773,    -1,   775,    -1,    -1,    42,
-      -1,    -1,    -1,    -1,    -1,   216,    -1,   218,    51,   220,
-     789,   222,    55,    -1,   793,    -1,    -1,    -1,    -1,    -1,
-     799,   800,   801,    -1,    67,    -1,    -1,    -1,    -1,    -1,
-      73,   635,   636,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-      -1,   845,   846,    -1,    -1,   849,   850,    -1,    -1,    -1,
-      -1,   855,   856,   857,    -1,   974,    -1,    -1,   837,    -1,
-     103,    -1,   841,    -1,    -1,    -1,    -1,   871,   872,   873,
-     874,   875,    -1,    -1,    -1,    -1,    -1,   881,    -1,   883,
-      -1,   885,   886,   887,    -1,    -1,    -1,    -1,   892,  1008,
-    1009,    -1,    -1,   897,    -1,    -1,    -1,   901,    -1,    -1,
-     648,    -1,   650,    -1,   652,    -1,  1025,   911,  1027,  1028,
-      -1,   890,    -1,    -1,   662,    -1,  1108,   665,    -1,    -1,
-      -1,   925,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   138,   936,   937,    -1,   683,    -1,    -1,    -1,  1131,
-      -1,    -1,    -1,    -1,    -1,   693,   694,   951,   952,    -1,
-      -1,    -1,    -1,   160,    27,    -1,    -1,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     4,   715,   716,    42,
-      -1,    -1,   976,   977,   978,   979,   980,   981,    51,   138,
-     655,   656,    55,    -1,    -1,    -1,    -1,    25,    26,    -1,
-      -1,    29,  1184,    31,    67,    -1,    -1,    -1,   673,    -1,
-      73,   160,    75,    -1,    42,    78,    -1,    -1,    81,    47,
-      48,    -1,    50,    -1,   968,    -1,    -1,    -1,    -1,    57,
-     974,    -1,    -1,  1215,    -1,    -1,    -1,    -1,  1220,    67,
-     103,    -1,  1224,  1012,  1013,    73,    -1,  1041,  1042,    -1,
-      -1,    79,    -1,    81,    -1,    -1,    -1,    -1,   459,    -1,
-      -1,    -1,    -1,    -1,  1008,  1009,    -1,     4,    96,    -1,
-      98,    -1,    -1,    -1,    -1,   103,    -1,  1186,    -1,    -1,
-    1024,  1025,  1026,  1027,  1028,  1029,    -1,    -1,    25,    26,
-      27,    -1,    29,    30,    31,    -1,    -1,    -1,   892,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,  1075,    -1,    -1,  1103,
-      47,    48,    -1,    50,    51,    -1,    -1,    -1,  1087,  1088,
-      -1,    -1,    -1,    -1,    -1,    -1,  1120,  1121,    -1,     4,
-      67,   925,    -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,
-      -1,  1135,   936,   937,    81,    -1,    -1,    -1,  1142,    -1,
-      -1,    26,    -1,    -1,    29,    -1,    31,   951,   952,   356,
-     357,    98,    -1,    -1,    -1,    40,   103,    42,    -1,  1163,
-      -1,    -1,    47,    48,   912,    50,    -1,    -1,    -1,    -1,
-      55,    -1,   976,   977,   978,   979,   980,   981,    31,    -1,
-      -1,    -1,    67,    -1,  1188,    -1,  1190,    40,    73,    42,
-      -1,    76,    45,    -1,    79,  1174,    -1,   356,   357,    -1,
-      -1,    -1,  1181,  1157,  1158,    -1,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    98,    67,    -1,    -1,    -1,   103,    -1,
-      73,    -1,    -1,    76,    -1,    -1,   974,    -1,    -1,    -1,
-     437,    -1,  1186,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,    -1,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1008,  1009,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,    -1,    -1,    -1,    -1,  1025,   437,  1027,
-    1028,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,    -1,   973,   136,
-      -1,     4,    -1,    -1,   141,   142,    -1,    -1,    -1,    -1,
-      -1,    -1,   723,    -1,   725,    -1,    -1,    -1,    -1,   730,
-      -1,    -1,    -1,    26,    -1,    -1,    29,   738,    -1,    -1,
-      -1,  1135,    -1,    -1,    -1,    -1,    -1,    40,  1142,    -1,
-      -1,    -1,   753,    -1,    47,    48,   757,    50,    -1,    -1,
-      22,    -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,  1163,
-    1108,    -1,   199,    -1,    -1,    -1,    -1,    39,   779,    -1,
-     207,   208,   783,    76,    -1,    -1,    79,    49,   215,    -1,
-     791,    -1,    -1,  1131,    -1,   796,    -1,    -1,    -1,    61,
-      62,    -1,   803,    -1,    66,    98,    -1,    69,   809,    -1,
-     103,    -1,   813,    75,    -1,   242,     4,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   263,   264,    26,    27,
-      -1,    29,    -1,    31,    -1,    -1,  1184,    -1,  1186,    -1,
-      -1,    -1,    40,    -1,    42,    -1,    -1,    -1,    46,    47,
-      48,    -1,    50,    -1,    52,    53,    -1,    55,    -1,    57,
-      58,    -1,    -1,   874,    -1,    -1,     4,  1215,   305,    67,
-      -1,    -1,  1220,    -1,    -1,    73,  1224,    -1,    76,    77,
-      -1,    79,    -1,    81,    -1,    -1,    -1,    -1,    26,    27,
-      -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    96,    -1,
-      98,    -1,    40,    -1,    42,   103,    -1,    -1,    -1,    47,
-      48,    -1,    50,    -1,    -1,    -1,   353,    55,    -1,    57,
-      -1,    -1,    -1,    -1,    -1,    -1,   363,    65,    -1,    67,
-     367,    -1,    -1,   370,    -1,    73,   373,    -1,    76,   376,
-      -1,    79,   379,    81,   381,     4,    -1,   384,    -1,    -1,
-     387,    -1,    -1,   390,   391,   392,   393,    -1,    96,   396,
-      98,    -1,   399,   400,    -1,   103,    25,    26,    -1,    -1,
-      29,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    47,    48,
-      -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
-      -1,    -1,    -1,    -1,  1015,    -1,     4,    -1,    67,    -1,
-      -1,    -1,    -1,    -1,    73,    -1,    -1,    -1,    -1,    -1,
-      79,    -1,    81,    -1,  1035,    -1,  1037,    -1,    26,    -1,
-      -1,    29,    -1,    31,    -1,    -1,    -1,    96,    -1,    98,
-      -1,    -1,    40,    -1,   103,  1191,  1192,    -1,    -1,    47,
-      48,    -1,    50,  1199,    -1,  1201,    -1,  1203,     4,    57,
-    1206,  1207,  1073,    -1,    -1,  1211,    -1,    -1,  1079,    67,
-    1216,    -1,    -1,    -1,  1220,    73,    -1,  1223,    76,  1090,
-      26,    79,    -1,    29,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,   528,    -1,    -1,    -1,    -1,    42,    -1,    96,    -1,
-      98,    47,    48,    -1,    50,   103,   543,   544,   545,   546,
-     547,    -1,    -1,    -1,    -1,    -1,   923,   924,    -1,    -1,
-      -1,    67,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,   949,   950,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,  1172,    -1,    -1,   923,   924,    -1,    -1,  1179,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     949,   950,    -1,    -1,    -1,   632,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   653,   654,    -1,    -1,
-     657,   658,   659,   660,   661,    -1,   663,   664,    -1,   666,
-     667,   668,   669,   670,   671,   672,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   684,   685,   686,
-      -1,    -1,    -1,   690,   691,   692,    -1,    -1,   695,   696,
-     697,   698,   699,   700,   701,   702,   703,   704,   705,     4,
-      -1,   708,   709,   710,   711,   712,   713,    -1,    -1,    -1,
-     717,   718,   719,    -1,    -1,    -1,    21,    -1,    -1,    -1,
-      -1,    26,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    -1,    38,    -1,    40,    41,    -1,    -1,    -1,
-      -1,    -1,    47,    48,    -1,    50,    -1,  1124,  1125,    -1,
-      -1,    27,    57,    -1,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    72,    -1,    -1,
-      -1,    76,    -1,    -1,    79,    -1,    52,    53,  1155,    55,
-      -1,    -1,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    98,    -1,  1124,  1125,    73,    -1,    75,
-      -1,    -1,    78,    -1,    -1,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1155,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   852,    -1,    -1,    -1,    -1,
-      -1,    -1,   859,    -1,    -1,   862,    -1,    -1,    -1,    -1,
-      -1,   868,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     877,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,
-      -1,   898,    -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,
-     927,    -1,    -1,   930,    -1,    -1,   933,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   941,    -1,    -1,    -1,   945,   946,
-     947,   948,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     987,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1007,    -1,    -1,  1010,  1011,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1030,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1051,    -1,    -1,    -1,    -1,  1056,
-      -1,    -1,  1059,    -1,    -1,    -1,    -1,    -1,    -1,  1066,
-      -1,  1068,  1069,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     4,    -1,  1104,    -1,  1106,
-      -1,    10,    11,    -1,    -1,    -1,    -1,  1114,    -1,  1116,
-    1117,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-       4,    -1,    -1,    -1,   103,    -1,    10,    11,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+       0,     0,  1207,     0,     0,     0,     0,     0,    15,  1209,
+       0,     0,     0,     0,    17,   269,     0,     0,     0,     0,
+       0,     0,     0,  1217,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
@@ -1764,18 +1431,18 @@
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    -1,     4,    -1,    -1,   103,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    16,    17,
-      18,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     4,    -1,    -1,    -1,     8,    -1,    10,    11,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
+      94,    95,    96,    15,     0,     0,     0,   270,     0,    17,
+     269,     0,     0,     0,     0,     0,     0,     0,     0,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,     0,    15,
+       0,     0,   461,    16,   149,    17,   150,   151,     0,     0,
+       0,   152,   153,   154,     0,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
@@ -1783,18 +1450,18 @@
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,     4,    -1,    -1,    -1,
-       8,    -1,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+      93,    94,    95,    96,    15,     0,     0,     0,    16,     0,
+      17,   113,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     4,    -1,    -1,    -1,    -1,    -1,    10,    11,    -1,
-      -1,    14,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    15,
+       0,     0,     0,    16,     0,    17,   269,     0,     0,     0,
+       0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
@@ -1802,18 +1469,18 @@
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,     4,    -1,    -1,    -1,
-      -1,    -1,    10,    11,    -1,    -1,    14,    -1,    -1,    -1,
-      -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+      93,    94,    95,    96,    15,     0,     0,     0,     0,     0,
+      17,   269,     0,     0,  1129,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     4,     5,    -1,    -1,    -1,    -1,    10,    11,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    15,
+       0,     0,     0,     0,     0,    17,   269,     0,     0,  1231,
+       0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
@@ -1821,18 +1488,18 @@
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,     4,    -1,    -1,    -1,
-       8,    -1,    10,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    20,    21,    22,    23,    24,    25,    26,    27,
+      93,    94,    95,    96,    15,  1203,     0,     0,     0,     0,
+      17,   269,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,     4,    -1,    -1,    -1,    -1,    -1,    10,    11,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    21,    22,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    15,
+       0,     0,     0,    16,     0,    17,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
@@ -1840,15 +1507,348 @@
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98
+      93,    94,    95,    96,    15,     0,     0,     0,     0,     0,
+      17,   269,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96
+};
+
+static const yytype_int16 yycheck[] =
+{
+       4,   368,   295,     8,     8,     9,   451,   694,   197,   197,
+      14,   197,   726,   727,   212,     5,   131,     7,   144,     8,
+       8,     0,   143,   197,   145,    14,   442,   274,   143,    56,
+     145,   440,    11,   449,   443,   450,     5,    64,     7,   454,
+     449,   450,   451,   452,   450,     5,     8,     7,   454,     8,
+       5,    11,     7,     0,   440,    82,   442,   443,   444,   102,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
+     102,   192,   193,   194,   195,   101,     8,   192,   193,   194,
+     195,   440,   102,   442,   443,    17,     8,     5,     8,     7,
+     449,   450,   451,    11,  1144,    17,   455,   212,    23,    54,
+     105,   105,  1152,   107,    92,    20,     8,    95,   103,   356,
+     449,   450,   102,   311,   104,   454,    31,   121,    97,    74,
+     124,   125,   126,   102,    70,   451,    88,   102,   132,    88,
+     134,    93,   138,   112,    93,   139,   140,     8,   440,   103,
+     442,   443,   103,   103,   446,    31,   448,   449,   450,   451,
+     452,   453,    67,   455,   160,     8,   105,    82,    73,   102,
+     164,   165,   166,   167,    17,    18,   102,   146,    88,   295,
+     442,   443,    94,    93,     5,    31,     7,   449,   450,   451,
+      11,    67,   186,   102,   163,   103,    88,   191,   103,     8,
+     102,    93,   104,    12,   198,    30,   311,     5,   102,     7,
+     104,    30,    31,    11,   183,    84,   210,    86,   187,   213,
+      89,    67,    91,   927,    85,    71,    87,   103,   102,    90,
+      55,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,    67,   102,
+      31,   439,    77,    78,    73,   224,    75,   103,   102,    78,
+     104,    42,    83,   102,   443,   443,    64,   443,   447,   447,
+     102,   447,   451,   451,   452,   451,   452,   453,   103,   443,
+     102,    21,    63,   447,   103,   279,    67,   451,   452,   453,
+     102,    31,    73,     4,    31,   103,    33,    34,     8,     4,
+     103,   138,    42,     5,   273,     7,    16,    17,    18,    11,
+      43,    44,    31,   307,    75,    26,    27,   102,    29,   104,
+      31,    26,   103,   160,    29,   105,   106,    67,    68,    40,
+      67,    42,    24,    73,   439,    40,    47,    48,   102,    50,
+     104,    81,    47,    48,    55,    50,    57,   316,    67,    22,
+      55,   443,   105,   106,    65,   447,    67,   326,    31,   451,
+     356,   357,    73,   103,  1041,    76,   103,    32,    79,    42,
+      81,    76,  1034,  1035,    79,   369,   102,   105,   104,   348,
+     349,    14,   105,   352,   103,    96,   380,    98,   106,   109,
+     359,   360,   103,    98,    67,    31,     5,   686,   103,   688,
+      73,    28,   108,   686,    31,   688,   102,   107,   104,   403,
+     404,    85,   406,    27,   408,     5,    30,     7,   105,   110,
+      13,    11,    14,   105,   418,   419,   105,   102,    64,   104,
+     103,    67,    59,   119,    24,    71,   120,    51,    52,    53,
+      67,   437,    32,   357,   440,   441,   442,   443,   444,   445,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
+      31,    75,    33,    34,    78,   133,   160,   103,   462,   463,
+     464,   465,   466,   467,    31,   438,    33,    34,   955,     5,
+       4,     7,     8,   477,   478,   102,   102,   104,   104,   103,
+     188,  1049,   461,    31,  1007,   489,    67,    21,   102,   102,
+     104,   104,    26,  1173,    42,    29,   102,   102,   104,   104,
+      67,    35,    36,   701,    38,   509,    40,    41,  1173,   356,
+     357,   442,   442,    47,    48,   102,    50,   104,     9,    67,
+     524,   966,   103,    57,   350,    73,   530,   648,   442,   650,
+      97,   652,    80,   648,   442,   650,   103,   652,    72,   102,
+     935,   104,    76,   664,   548,    79,   102,   668,   104,   664,
+     966,   555,   556,   668,   940,   103,   758,   966,   161,   442,
+     686,   928,   688,   844,    98,   569,   570,   571,   689,   442,
+     442,   174,   175,    31,   689,    33,    34,   442,   102,    31,
+     104,   940,   586,   587,   999,    37,   701,   702,   966,  1034,
+     437,  1036,   451,   440,   441,   442,   443,   444,   445,   446,
+     447,   448,   449,   450,   451,   452,   453,   454,   455,    67,
+     907,   726,   727,   285,   102,    67,   104,   102,  1034,   104,
+    1036,  1036,   102,  1147,   104,  1034,  1035,   966,  1034,  1035,
+    1036,   635,   636,   124,   125,   126,   615,   616,   940,   102,
+     966,   104,   646,   134,  1182,   103,  1149,  1172,   139,   140,
+    1235,   103,   102,  1175,   104,   131,   102,   102,   104,   104,
+     102,   102,   104,   104,   966,   418,    -1,   143,   144,   145,
+     102,    -1,   104,   164,   165,   166,   167,   280,   271,   282,
+     283,   284,    -1,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,    -1,   296,   966,  1034,  1035,  1036,   102,   102,
+     104,   104,    -1,    -1,    -1,    -1,    -1,   198,  1034,    -1,
+    1036,    -1,   716,   717,    -1,    -1,   192,   193,   194,   195,
+     908,   909,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,     4,   940,   732,   733,    -1,  1142,  1143,    -1,    -1,
+     739,   740,  1034,    -1,  1036,    -1,    -1,   746,   747,   748,
+      -1,    31,    25,    26,    27,    27,    29,    30,    31,    31,
+      -1,    -1,    42,    -1,    -1,   261,    -1,    -1,    -1,    42,
+      42,    -1,    -1,    -1,    47,    48,    -1,    50,    51,    51,
+      -1,   780,   781,    55,   783,   281,   785,    67,   787,   285,
+      -1,    -1,   927,    73,    67,    67,    -1,    -1,    -1,   295,
+      73,    73,   801,    -1,    -1,    -1,   805,    -1,    81,    81,
+      -1,    -1,   811,   812,   813,    -1,    -1,    -1,    -1,    -1,
+    1142,  1143,    -1,   103,    -1,    98,    -1,    -1,    -1,    -1,
+     103,   103,    -1,   857,   858,    -1,    -1,    -1,    -1,   863,
+     864,    22,    -1,    -1,    -1,   869,   870,   871,    -1,   990,
+     849,    -1,    -1,    -1,   853,   990,    -1,    -1,    39,    -1,
+      -1,   885,   886,   887,   888,   889,    -1,    -1,    49,    -1,
+      -1,   895,    -1,   897,    -1,   899,   900,   901,    -1,    -1,
+      61,    62,   906,  1024,  1025,    66,    -1,   911,    69,  1024,
+    1025,   915,    -1,    -1,    75,    -1,    -1,   408,    -1,    -1,
+      -1,  1042,   926,  1044,  1045,   904,    -1,  1042,  1126,  1044,
+    1045,    -1,    -1,   939,   940,    -1,    -1,   941,    -1,    -1,
+      -1,    27,    -1,    -1,    30,    31,    -1,    -1,   952,   953,
+      -1,  1149,    -1,    -1,    -1,    -1,    42,    -1,    -1,   965,
+     966,    -1,   438,   967,   968,    51,    52,    53,    -1,    55,
+      -1,   462,   463,   464,   465,   466,   467,     4,    -1,    65,
+      -1,    67,    -1,    -1,    -1,    -1,   477,   478,   992,   993,
+     994,   995,   996,   997,    -1,    -1,    31,    -1,   489,    26,
+      -1,    -1,    29,    -1,    -1,    40,  1204,    42,    -1,    -1,
+      45,  1126,    -1,    40,    -1,    -1,    -1,   103,   509,    -1,
+      47,    48,    -1,    50,    -1,    60,    -1,    -1,    55,    -1,
+      -1,    -1,    67,   524,  1149,    -1,    -1,  1235,    73,   530,
+      -1,    76,  1240,    -1,    -1,    -1,  1244,    -1,    -1,    76,
+    1029,  1030,    79,   656,   657,  1059,  1060,   548,    -1,    -1,
+      -1,    -1,    -1,    -1,   555,   556,    -1,    -1,   103,    -1,
+      -1,    98,    -1,    -1,   677,    -1,   103,    -1,   569,   570,
+     571,    -1,    -1,    -1,    -1,  1206,    -1,    -1,    -1,  1204,
+      -1,  1206,   939,   940,    -1,   586,   587,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1093,    -1,    -1,  1121,   965,   966,
+    1235,    -1,    -1,    -1,    -1,  1240,  1105,  1106,    -1,  1244,
+      -1,    -1,    -1,    -1,  1138,  1139,  1142,  1143,    -1,    -1,
+      -1,    -1,    -1,    -1,   635,   636,    -1,    -1,    -1,  1153,
+      -1,    -1,    -1,    -1,    -1,    -1,  1160,   108,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1173,    -1,    -1,
+      -1,   647,   648,   649,   650,   651,   652,    27,    -1,  1183,
+      30,    -1,    -1,    -1,    -1,   136,    -1,    -1,   664,    -1,
+     141,   142,   668,    27,    -1,    -1,    30,    31,    -1,    -1,
+      -1,    51,    52,    53,  1208,    55,  1210,    -1,    42,    -1,
+     686,    -1,   688,   689,    -1,  1194,    -1,    51,   694,   695,
+     696,    55,  1201,    -1,    -1,   701,   702,    77,    78,    -1,
+      -1,   181,    -1,    67,   184,    -1,    -1,    -1,    -1,    73,
+      -1,    75,    -1,    -1,    78,    -1,    -1,    81,   199,    -1,
+     726,   727,    -1,   103,    -1,    -1,   207,   208,     4,    -1,
+      -1,    -1,    -1,    -1,   215,    -1,   216,    -1,   218,   103,
+     220,    -1,   222,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      26,    -1,    -1,    29,    -1,    31,    -1,    -1,    -1,    -1,
+      -1,   242,    -1,     4,    40,  1142,  1143,    -1,    -1,    -1,
+      -1,    47,    48,    -1,    50,    -1,    -1,    -1,    -1,    -1,
+      -1,    57,   263,   264,    -1,    26,    27,    -1,    29,    -1,
+      31,    67,    -1,    -1,    -1,    -1,  1173,    73,    -1,    40,
+      76,    42,    -1,    79,    -1,    46,    47,    48,    -1,    50,
+      -1,    52,    53,    -1,    55,    -1,    57,    58,    -1,    -1,
+      96,    -1,    98,    -1,   305,    -1,    67,   103,    -1,  1211,
+    1212,    -1,    73,    -1,    -1,    76,    77,  1219,    79,  1221,
+      81,  1223,    -1,    -1,  1226,  1227,    -1,    -1,    27,  1231,
+      -1,    30,    31,    -1,  1236,    96,   989,    98,  1240,    -1,
+      -1,  1243,   103,    42,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   353,    52,    53,    -1,    55,    -1,    -1,    58,
+      -1,    -1,   363,    -1,    -1,   906,   367,    -1,    67,   370,
+      -1,    -1,   373,    -1,    73,   376,    75,    -1,   379,    78,
+     381,    -1,    81,   384,    -1,    -1,   387,    -1,    -1,   390,
+     391,   392,   393,    -1,    -1,   396,    -1,     4,   399,   400,
+     941,    -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,
+      -1,   952,   953,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    29,    -1,    31,    -1,   967,   968,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
+      47,    48,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,
+      57,   992,   993,   994,   995,   996,   997,    -1,   984,   459,
+      67,    -1,    -1,    -1,   990,    -1,    73,    -1,    -1,    -1,
+      -1,   472,    79,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   483,    -1,    -1,    -1,    -1,     4,    -1,    96,
+      -1,    98,    -1,   494,    -1,    -1,   103,    -1,  1024,  1025,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      -1,    -1,    29,   514,    31,  1041,  1042,  1043,  1044,  1045,
+    1046,    -1,    -1,    -1,    -1,    42,    -1,   528,    -1,    -1,
+      47,    48,    -1,    50,    -1,    -1,    -1,   538,    -1,    -1,
+      57,    -1,   543,   544,   545,   546,   547,    -1,    -1,    -1,
+      67,    -1,   553,    -1,    -1,    -1,    73,    -1,     4,    -1,
+     561,    -1,    79,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,    -1,    96,
+      26,    98,    -1,    29,    -1,    31,   103,    -1,    -1,    -1,
+      -1,   592,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+      -1,    47,    48,    -1,    50,    -1,    -1,    -1,    -1,   610,
+      -1,    -1,  1153,    -1,    -1,    -1,    -1,    -1,    -1,  1160,
+     621,    67,    -1,    -1,    -1,    -1,    -1,    73,    -1,    -1,
+      -1,   632,    -1,    79,    -1,    81,    -1,    -1,    -1,    -1,
+     641,    -1,  1183,    -1,    -1,    -1,    -1,    -1,    -1,  1175,
+      -1,  1177,    98,   654,   655,    -1,    -1,   103,   659,   660,
+     661,   662,   663,    -1,    -1,   666,   667,    -1,    -1,   670,
+     671,   672,   673,   674,   675,   676,    -1,    -1,    -1,    -1,
+    1206,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     691,   692,   693,    -1,    -1,    -1,    -1,   698,   699,   700,
+      -1,    -1,    -1,   704,   705,   706,   707,   708,   709,   710,
+      -1,   712,   713,   714,   715,    -1,    -1,    -1,   719,   720,
+     721,   722,   723,   724,     4,    -1,    -1,    -1,   729,   730,
+     731,    -1,    -1,    -1,    -1,   735,    -1,    -1,    -1,    -1,
+      -1,    -1,   742,    -1,    -1,    -1,    26,    -1,    -1,    29,
+     750,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      40,    -1,    42,    -1,    -1,   765,    -1,    47,    48,   769,
+      50,    -1,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,   791,    -1,    73,    -1,   795,    76,    -1,    -1,    79,
+      -1,    -1,    -1,   803,    -1,    -1,    -1,    -1,   808,    -1,
+      -1,    -1,    -1,    -1,    -1,   815,    -1,    -1,    98,    -1,
+      -1,   821,    -1,   103,    -1,   825,    -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,   860,
+      -1,    -1,    -1,    -1,    -1,   866,    -1,    -1,    -1,    -1,
+      -1,    -1,   873,    -1,    -1,   876,    -1,    -1,    -1,    -1,
+      -1,   882,    -1,    -1,    -1,    -1,    -1,    -1,   888,    -1,
+     891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   910,
+      -1,   912,    -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,   943,    -1,    -1,   946,    -1,    -1,   949,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   957,    -1,    -1,    -1,
+     961,   962,   963,   964,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     981,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1003,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1016,    -1,    -1,    -1,    -1,
+      -1,    -1,  1023,    -1,    -1,    -1,  1027,  1028,    -1,    -1,
+      -1,    -1,  1032,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1047,    -1,    -1,    -1,
+      -1,    -1,    -1,  1053,    -1,  1055,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1069,    -1,
+      -1,    -1,    -1,  1074,    -1,    -1,  1077,    -1,    -1,    -1,
+      -1,    -1,    -1,  1084,    -1,  1086,  1087,    -1,    -1,    -1,
+      -1,  1091,    -1,    -1,    -1,    -1,    -1,  1097,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1108,    -1,
+    1111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1122,    -1,  1124,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1132,    -1,  1134,  1135,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1158,    -1,    -1,
+      -1,    -1,    -1,    -1,  1165,    -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,  1192,    -1,    -1,    -1,    -1,    -1,     4,  1199,
+      -1,    -1,    -1,    -1,    10,    11,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1213,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,     4,    -1,    -1,    -1,   103,    -1,    10,
+      11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    -1,     4,
+      -1,    -1,   103,     8,     9,    10,    11,    12,    -1,    -1,
+      -1,    16,    17,    18,    -1,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,     4,    -1,    -1,    -1,     8,    -1,
+      10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     4,
+      -1,    -1,    -1,     8,    -1,    10,    11,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,     4,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     4,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    -1,    -1,    14,
+      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,     4,     5,    -1,    -1,    -1,    -1,
+      10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     4,
+      -1,    -1,    -1,     8,    -1,    10,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,     4,    -1,    -1,    -1,    -1,    -1,
+      10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   112,   118,   122,   453,     0,     5,     7,    54,    74,
-     452,   452,   454,   454,   453,     4,     8,    10,    20,    21,
+       0,   112,   118,   122,   454,     0,     5,     7,    54,    74,
+     453,   453,   455,   455,   454,     4,     8,    10,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
@@ -1857,119 +1857,121 @@
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
       92,    93,    94,    95,    96,    97,    98,   113,   114,   117,
-     437,   459,   460,   121,   437,   453,   102,   453,   102,   115,
-     444,   444,   101,    11,   119,   120,   445,   452,   461,   123,
-     124,   453,   129,   130,    56,    64,    82,   126,   128,   143,
-     446,   447,   453,   129,    23,   126,   141,     8,   144,    43,
-      44,   131,   135,   454,   454,   454,   102,   104,   449,     9,
-      11,    12,    16,    17,    18,   114,   448,   456,   458,   459,
-     144,   454,   444,   116,    28,    31,    59,    67,   146,   148,
-     150,   152,   153,   155,   454,   454,   444,   444,   127,   456,
-     114,   142,   436,   460,   125,   456,   453,   457,   153,   140,
-     437,   453,   454,   454,   454,   454,   161,   162,    70,   156,
-     132,   437,   134,   437,   102,   104,   440,   441,   443,   440,
-     453,   440,   450,   453,   161,   102,   147,   456,   149,   456,
-     145,   456,   151,   456,   103,     4,    21,    26,    29,    35,
+     438,   460,   461,   121,   438,   454,   102,   454,   102,   115,
+     445,   445,   101,    11,   119,   120,   446,   453,   462,   123,
+     124,   454,   129,   130,    56,    64,    82,   126,   128,   143,
+     447,   448,   454,   129,    23,   126,   141,     8,   144,    43,
+      44,   131,   135,   455,   455,   455,   102,   104,   450,     9,
+      11,    12,    16,    17,    18,   114,   449,   457,   459,   460,
+     144,   455,   445,   116,    28,    31,    59,    67,   146,   148,
+     150,   152,   153,   155,   455,   455,   445,   445,   127,   457,
+     114,   142,   437,   461,   125,   457,   454,   458,   153,   140,
+     438,   454,   455,   455,   455,   455,   161,   162,    70,   156,
+     132,   438,   134,   438,   102,   104,   441,   442,   444,   441,
+     454,   441,   451,   454,   161,   102,   147,   457,   149,   457,
+     145,   457,   151,   457,   103,     4,    21,    26,    29,    35,
       36,    38,    40,    41,    47,    48,    50,    57,    72,    76,
-      79,    98,   163,   165,   178,   184,   190,   245,   248,   250,
-     260,   267,   273,   283,   297,   299,   305,   321,   331,   348,
-     356,   454,   444,   102,   102,   104,   136,   444,   444,    11,
-     103,   438,   459,   103,   444,   440,   440,   440,   440,   453,
-     454,   454,   454,   454,   454,   454,   454,   454,   454,   454,
-     454,   454,   454,   454,   454,   454,   454,   444,    12,   114,
-     154,   159,   444,   444,   103,   442,   446,   453,   143,   296,
-     437,   105,   114,   319,   320,   408,   409,   282,   437,   249,
-     437,   164,   437,   114,   355,   358,   409,   177,   437,   244,
-     437,   183,   437,   261,   437,   266,   437,   272,   437,   347,
-     437,   330,   437,   189,   437,   114,   304,   439,   460,   461,
-     298,   437,   160,   102,   104,   157,   133,   137,   444,   102,
-     104,   451,   103,   102,   104,   300,   438,   102,   410,   453,
-     102,   104,   284,   102,   104,   251,   102,   104,   166,   102,
-     453,   102,   104,   179,   102,   104,   246,   102,   104,   185,
-     102,   102,   102,   102,   104,   349,   102,   104,   332,   102,
-     102,   104,   306,   453,   453,   300,   453,   444,    71,   103,
-     139,   143,   150,   152,   103,   139,   150,   152,   453,   453,
-     444,   444,   408,   444,   444,   444,   444,   444,   444,   444,
-     444,   444,   444,   444,   444,   444,   444,   158,   454,   450,
-     301,   322,   285,   252,   167,   357,   180,   247,   186,   262,
-     268,   274,   350,   333,   191,   307,   103,   150,   152,   138,
+      79,    98,   163,   165,   178,   185,   191,   246,   249,   251,
+     261,   268,   274,   284,   298,   300,   306,   322,   332,   349,
+     357,   455,   445,   102,   102,   104,   136,   445,   445,    11,
+     103,   439,   460,   103,   445,   441,   441,   441,   441,   454,
+     455,   455,   455,   455,   455,   455,   455,   455,   455,   455,
+     455,   455,   455,   455,   455,   455,   455,   445,    12,   114,
+     154,   159,   445,   445,   103,   443,   447,   454,   143,   297,
+     438,   105,   114,   320,   321,   409,   410,   283,   438,   250,
+     438,   164,   438,   114,   356,   359,   410,   177,   438,   245,
+     438,   184,   438,   262,   438,   267,   438,   273,   438,   348,
+     438,   331,   438,   190,   438,   114,   305,   440,   461,   462,
+     299,   438,   160,   102,   104,   157,   133,   137,   445,   102,
+     104,   452,   103,   102,   104,   301,   439,   102,   411,   454,
+     102,   104,   285,   102,   104,   252,   102,   104,   166,   102,
+     454,   102,   104,   179,   102,   104,   247,   102,   104,   186,
+     102,   102,   102,   102,   104,   350,   102,   104,   333,   102,
+     102,   104,   307,   454,   454,   301,   454,   445,    71,   103,
+     139,   143,   150,   152,   103,   139,   150,   152,   454,   454,
+     445,   445,   409,   445,   445,   445,   445,   445,   445,   445,
+     445,   445,   445,   445,   445,   445,   445,   158,   455,   451,
+     302,   323,   286,   253,   167,   358,   180,   248,   187,   263,
+     269,   275,   351,   334,   192,   308,   103,   150,   152,   138,
      159,   103,    27,    42,    51,    55,    73,    81,   103,   150,
-     152,   175,   182,   376,   380,   383,   397,    25,    96,   103,
-     150,   152,   175,   182,   248,   291,   329,   348,   376,    30,
-     103,   150,   152,   175,   182,   243,   250,   260,   267,   273,
-     283,   288,   289,   291,   297,   299,   376,   380,   383,    65,
-     103,   150,   152,   175,   182,   190,   245,   248,   329,   348,
-     376,   380,   386,   397,    20,   103,   150,   152,   169,   175,
+     152,   175,   182,   377,   381,   384,   398,    25,    96,   103,
+     150,   152,   175,   182,   249,   292,   330,   349,   377,    30,
+     103,   150,   152,   175,   182,   244,   251,   261,   268,   274,
+     284,   289,   290,   292,   298,   300,   377,   381,   384,    65,
+     103,   150,   152,   175,   182,   191,   246,   249,   330,   349,
+     377,   381,   387,   398,    20,   103,   150,   152,   169,   175,
       37,   103,   150,   152,   103,   150,   152,   175,   182,   103,
-     150,   152,   175,   190,   245,   248,   329,   348,    22,   103,
-     150,   152,   175,   182,   188,    75,    78,   103,   150,   152,
-     175,   182,   192,   241,   243,   376,   380,   383,   397,    52,
-      53,    58,   103,   150,   152,   175,   182,   192,   241,   243,
-     376,   380,   388,   391,   394,   397,    46,    77,   103,   150,
-     152,   175,   182,   190,   245,   248,   329,   348,   376,   380,
-     388,   391,   394,   397,   400,   404,   103,   150,   152,   175,
-     182,   190,   245,   248,   397,    45,    60,   103,   150,   152,
-     175,   182,   190,   245,   338,   339,   345,   346,   103,   150,
-     152,   175,   192,   241,   243,    21,    68,   103,   150,   152,
-     175,   182,   313,   318,   376,   440,   453,   454,   454,   454,
-     454,   454,   454,   302,   303,   454,   454,   324,   327,   325,
-     326,   323,   454,   287,   286,   454,   258,   255,   259,   256,
-     257,   253,   254,   454,   444,   454,   444,   444,   444,   444,
-     444,   454,   454,   454,   264,   263,   265,   454,   454,   454,
-     270,   269,   271,   454,   454,   277,   278,   281,   279,   280,
-     275,   276,   352,   353,   354,   351,   453,   453,   334,   335,
-     102,   336,   102,   337,   444,   454,   454,   309,   310,   308,
-      88,    93,   114,   379,   381,   181,   456,    88,    93,   114,
-     382,   384,   396,   456,    85,    87,    90,   114,   174,   176,
-     375,   456,   444,   444,   290,   437,   328,   437,   444,   444,
-     444,   444,   444,   242,   456,   444,   444,   385,   456,   444,
-     444,   444,   444,   444,   444,   444,   168,   437,    84,    86,
-      89,    91,   359,   360,   361,   362,   363,   367,   371,   187,
-     439,   193,   439,   240,   456,   444,   444,   444,    17,    94,
-     114,   390,   392,   432,    18,   114,   387,   389,   432,   433,
-      92,    95,   114,   393,   395,   444,   444,   444,   114,   403,
-     405,   438,   114,   399,   401,   411,   438,   444,   444,   444,
-     444,   444,   444,   444,   444,   444,   444,   444,   444,   444,
-     444,   444,   444,   444,   114,   316,   317,   411,   114,   311,
-     312,   411,   444,   444,   444,   453,   453,   440,   440,   453,
-     453,   440,   102,   104,   398,   453,   453,   453,   440,   102,
-     104,   377,   102,   104,   292,   332,   440,   440,   102,   104,
-     170,   453,   453,   453,   453,   453,   440,   102,   104,   194,
-     440,   453,   440,   453,   440,   453,   453,   453,   440,   440,
-     406,   440,   402,   412,   340,   340,   102,   453,   102,   104,
-     314,   453,   444,   444,   444,   444,   364,   368,   372,   440,
-     444,   453,   454,   410,   103,   190,   245,   248,   397,   103,
-     444,   444,   204,   378,   293,    83,   172,   102,   104,   365,
-     102,   104,   369,   102,   104,   373,    24,    32,   195,   196,
-     211,   213,   227,   229,   411,   342,   343,   344,   341,   322,
-     315,    33,    34,   103,   150,   152,   237,   239,   103,   150,
-     152,   103,   150,   152,   175,   182,   248,   376,   454,   103,
-     444,   444,   444,   454,   454,   103,    39,    49,    61,    62,
-      66,    69,   188,   197,   199,   201,   205,   220,   223,   225,
-     444,   228,   444,   444,   444,   444,   103,   103,   150,   152,
-     182,   243,   380,   383,   386,   388,   391,   397,   454,   454,
-     295,   294,    88,    93,   114,   171,   173,   366,   370,   374,
-     230,   437,   214,   456,   454,   454,   454,   454,   454,   454,
-     192,   444,   212,   229,   444,   238,   456,   236,   456,   444,
-     444,   453,   453,   440,   103,   241,   243,   380,   383,   388,
-     391,   397,   400,   103,   241,   243,   397,   400,   103,   192,
-     241,   243,   380,   383,   388,   391,   102,   104,   231,   102,
-     104,   215,   114,   198,   200,   432,   202,   456,   114,   222,
-     413,   414,   415,   206,   456,   407,   456,    88,    93,   114,
-     224,   226,   444,   213,   440,   440,   444,   444,   444,   444,
-     444,   444,   440,   453,   102,   104,   203,   440,   105,   416,
-     417,    14,   419,   420,   102,   104,   207,   102,   104,   221,
-     453,   453,   440,   444,   232,   216,   444,   444,   438,   418,
-     105,   421,   444,   444,   444,    63,   103,   150,   152,   175,
-     182,   234,    80,   103,   150,   152,   175,   182,   218,   204,
-     424,   416,   420,   422,   438,   208,   204,   454,   454,   103,
-     106,   423,   424,    97,   103,   150,   152,   210,   237,   239,
-     103,   114,   233,   235,   433,    16,    17,    18,   114,   217,
-     219,   434,   435,     5,   455,   417,   454,   440,   453,   440,
-     453,   425,   438,   209,   456,   455,   455,   440,   107,   108,
-     455,    85,   426,   431,   455,   455,   109,   105,   455,   455,
-     110,    14,   427,   428,   455,   429,   105,   428,   438,   455,
-     430,   438,   455,   105,   455,   438
+     150,   152,   175,   191,   246,   249,   330,   349,    22,   103,
+     150,   152,   175,   182,   189,    75,    78,   103,   150,   152,
+     175,   182,   193,   242,   244,   377,   381,   384,   398,    52,
+      53,    58,   103,   150,   152,   175,   182,   193,   242,   244,
+     377,   381,   389,   392,   395,   398,    46,    77,   103,   150,
+     152,   175,   182,   191,   246,   249,   330,   349,   377,   381,
+     389,   392,   395,   398,   401,   405,   103,   150,   152,   175,
+     182,   191,   246,   249,   398,    45,    60,   103,   150,   152,
+     175,   182,   191,   246,   339,   340,   346,   347,   103,   150,
+     152,   175,   193,   242,   244,    21,    68,   103,   150,   152,
+     175,   182,   314,   319,   377,   441,   454,   455,   455,   455,
+     455,   455,   455,   445,   303,   304,   455,   455,   445,   325,
+     328,   326,   327,   324,   455,   445,   288,   287,   455,   445,
+     259,   256,   260,   257,   258,   254,   255,   455,   445,   455,
+     445,   445,   445,   445,   445,   445,   455,   445,   455,   455,
+     445,   265,   264,   266,   455,   455,   455,   445,   271,   270,
+     272,   455,   455,   445,   278,   279,   282,   280,   281,   276,
+     277,   445,   353,   354,   355,   352,   454,   454,   445,   335,
+     336,   102,   337,   102,   338,   445,   455,   455,   445,   310,
+     311,   309,    88,    93,   114,   380,   382,   181,   457,    88,
+      93,   114,   383,   385,   397,   457,    85,    87,    90,   114,
+     174,   176,   376,   457,   445,   445,   291,   438,   329,   438,
+     445,   445,   445,   445,   445,   243,   457,   445,   445,   386,
+     457,   445,   445,   445,   445,   445,   445,   445,   168,   438,
+      84,    86,    89,    91,   360,   361,   362,   363,   364,   368,
+     372,   188,   440,   194,   440,   241,   457,   445,   445,   445,
+      17,    94,   114,   391,   393,   433,    18,   114,   388,   390,
+     433,   434,    92,    95,   114,   394,   396,   445,   445,   445,
+     114,   404,   406,   439,   114,   400,   402,   412,   439,   445,
+     445,   445,   445,   445,   445,   445,   445,   445,   445,   445,
+     445,   445,   445,   445,   445,   445,   114,   317,   318,   412,
+     114,   312,   313,   412,   445,   445,   445,   454,   454,   441,
+     102,   104,   183,   454,   454,   441,   102,   104,   399,   454,
+     454,   454,   441,   102,   104,   378,   102,   104,   293,   333,
+     441,   441,   102,   104,   170,   454,   454,   454,   454,   454,
+     441,   102,   104,   195,   441,   454,   441,   454,   441,   454,
+     454,   454,   441,   441,   407,   441,   403,   413,   341,   341,
+     102,   454,   102,   104,   315,   454,   445,   445,   445,   445,
+     445,   365,   369,   373,   441,   445,   454,   455,   411,   103,
+     191,   246,   249,   398,   103,   445,   445,   103,   205,   379,
+     294,    83,   172,   102,   104,   366,   102,   104,   370,   102,
+     104,   374,    24,    32,   196,   197,   212,   214,   228,   230,
+     412,   343,   344,   345,   342,   323,   316,    33,    34,   103,
+     150,   152,   238,   240,   103,   150,   152,   103,   150,   152,
+     175,   182,   249,   377,   455,   103,   445,   445,   445,   455,
+     455,   103,    39,    49,    61,    62,    66,    69,   189,   198,
+     200,   202,   206,   221,   224,   226,   445,   229,   445,   445,
+     445,   445,   103,   103,   150,   152,   182,   244,   381,   384,
+     387,   389,   392,   398,   455,   455,   445,   296,   295,    88,
+      93,   114,   171,   173,   367,   371,   375,   231,   438,   215,
+     457,   455,   455,   455,   455,   455,   455,   193,   445,   213,
+     230,   445,   445,   239,   457,   237,   457,   445,   445,   454,
+     454,   441,   103,   242,   244,   381,   384,   389,   392,   398,
+     401,   103,   242,   244,   398,   401,   103,   193,   242,   244,
+     381,   384,   389,   392,   102,   104,   232,   102,   104,   216,
+     114,   199,   201,   433,   203,   457,   114,   223,   414,   415,
+     416,   207,   457,   408,   457,    88,    93,   114,   225,   227,
+     445,   214,   441,   441,   445,   445,   445,   445,   445,   445,
+     441,   454,   102,   104,   204,   441,   105,   417,   418,    14,
+     420,   421,   102,   104,   208,   102,   104,   222,   454,   454,
+     441,   445,   233,   217,   445,   445,   439,   419,   105,   422,
+     445,   445,   445,    63,   103,   150,   152,   175,   182,   235,
+      80,   103,   150,   152,   175,   182,   219,   205,   425,   417,
+     421,   423,   439,   209,   205,   455,   445,   455,   445,   103,
+     106,   424,   425,    97,   103,   150,   152,   211,   238,   240,
+     103,   114,   234,   236,   434,    16,    17,    18,   114,   218,
+     220,   435,   436,     5,   456,   418,   455,   441,   454,   441,
+     454,   426,   439,   210,   457,   456,   456,   441,   107,   108,
+     456,    85,   427,   432,   456,   456,   109,   105,   456,   456,
+     110,    14,   428,   429,   456,   430,   105,   429,   439,   456,
+     431,   439,   456,   105,   456,   439
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1987,72 +1989,72 @@
      164,   165,   166,   166,   167,   167,   167,   167,   167,   168,
      169,   170,   170,   171,   172,   172,   173,   173,   173,   174,
      175,   176,   176,   176,   176,   177,   178,   179,   179,   180,
-     180,   180,   180,   180,   181,   182,   183,   184,   185,   185,
-     186,   186,   186,   186,   186,   186,   187,   188,   189,   190,
-     191,   191,   191,   191,   191,   191,   191,   192,   193,   194,
-     194,   195,   195,   195,   196,   196,   196,   196,   196,   196,
-     196,   196,   196,   197,   198,   199,   200,   200,   201,   202,
-     203,   203,   204,   204,   204,   204,   204,   205,   206,   207,
-     207,   208,   208,   208,   208,   208,   208,   209,   210,   211,
-     212,   212,   213,   214,   215,   215,   216,   216,   216,   216,
-     216,   216,   217,   218,   219,   219,   220,   221,   221,   222,
-     223,   224,   225,   226,   226,   226,   227,   228,   228,   229,
-     230,   231,   231,   232,   232,   232,   232,   232,   232,   233,
-     234,   235,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   246,   247,   247,   247,   247,   247,
-     247,   247,   247,   247,   248,   248,   248,   248,   248,   248,
-     248,   248,   249,   250,   251,   251,   252,   253,   252,   252,
-     254,   252,   252,   252,   252,   252,   252,   255,   252,   256,
-     252,   257,   252,   258,   252,   259,   252,   260,   261,   262,
-     263,   262,   262,   264,   262,   262,   265,   262,   262,   262,
-     262,   262,   262,   262,   266,   267,   268,   269,   268,   268,
-     270,   268,   268,   268,   271,   268,   268,   268,   268,   268,
-     268,   268,   268,   272,   273,   274,   275,   274,   274,   276,
-     274,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     277,   274,   278,   274,   279,   274,   280,   274,   281,   274,
-     282,   283,   284,   284,   285,   286,   285,   285,   285,   285,
-     285,   285,   285,   285,   287,   285,   288,   288,   289,   289,
-     289,   289,   289,   289,   289,   290,   291,   292,   292,   293,
-     294,   293,   293,   293,   293,   293,   295,   293,   296,   297,
-     298,   299,   300,   300,   301,   302,   301,   301,   303,   301,
-     301,   301,   301,   301,   301,   304,   305,   306,   306,   307,
-     308,   307,   307,   307,   307,   307,   309,   307,   310,   307,
-     311,   311,   312,   313,   314,   314,   315,   315,   315,   315,
-     315,   315,   315,   315,   315,   315,   315,   316,   316,   317,
-     318,   319,   319,   320,   321,   322,   323,   322,   322,   322,
-     322,   322,   324,   322,   325,   322,   326,   322,   327,   322,
-     328,   329,   330,   331,   332,   332,   333,   333,   333,   333,
-     333,   334,   333,   335,   333,   336,   333,   337,   333,   338,
-     339,   340,   341,   340,   342,   340,   343,   340,   344,   340,
-     345,   346,   347,   348,   349,   349,   350,   351,   350,   350,
-     350,   350,   350,   352,   350,   353,   350,   354,   350,   355,
-     356,   357,   357,   357,   357,   358,   358,   359,   359,   360,
-     361,   362,   362,   362,   364,   363,   365,   365,   366,   366,
-     366,   366,   366,   366,   366,   366,   366,   368,   367,   369,
-     369,   370,   370,   370,   370,   370,   372,   371,   373,   373,
-     374,   374,   374,   374,   374,   374,   374,   374,   375,   376,
-     377,   377,   378,   378,   378,   379,   380,   381,   381,   381,
-     382,   383,   384,   384,   384,   385,   386,   387,   388,   389,
-     389,   390,   391,   392,   392,   392,   393,   394,   395,   395,
-     395,   396,   397,   398,   398,   399,   400,   401,   401,   402,
-     402,   403,   404,   406,   405,   405,   407,   408,   409,   410,
-     410,   412,   411,   414,   413,   415,   413,   413,   416,   417,
-     418,   418,   419,   420,   421,   421,   422,   423,   423,   424,
-     424,   425,   426,   427,   428,   429,   429,   430,   430,   431,
-     432,   433,   433,   434,   434,   435,   435,   436,   436,   437,
-     437,   438,   438,   439,   439,   439,   440,   440,   441,   442,
-     443,   444,   444,   444,   445,   446,   447,   448,   448,   449,
+     180,   180,   180,   180,   181,   182,   183,   183,   184,   185,
+     186,   186,   187,   187,   187,   187,   187,   187,   188,   189,
+     190,   191,   192,   192,   192,   192,   192,   192,   192,   193,
+     194,   195,   195,   196,   196,   196,   197,   197,   197,   197,
+     197,   197,   197,   197,   197,   198,   199,   200,   201,   201,
+     202,   203,   204,   204,   205,   205,   205,   205,   205,   206,
+     207,   208,   208,   209,   209,   209,   209,   209,   209,   210,
+     211,   212,   213,   213,   214,   215,   216,   216,   217,   217,
+     217,   217,   217,   217,   218,   219,   220,   220,   221,   222,
+     222,   223,   224,   225,   226,   227,   227,   227,   228,   229,
+     229,   230,   231,   232,   232,   233,   233,   233,   233,   233,
+     233,   234,   235,   236,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   247,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   249,   249,   249,   249,
+     249,   249,   249,   249,   250,   251,   252,   252,   253,   254,
+     253,   253,   255,   253,   253,   253,   253,   253,   253,   256,
+     253,   257,   253,   258,   253,   259,   253,   260,   253,   261,
+     262,   263,   264,   263,   263,   265,   263,   263,   266,   263,
+     263,   263,   263,   263,   263,   263,   267,   268,   269,   270,
+     269,   269,   271,   269,   269,   269,   272,   269,   269,   269,
+     269,   269,   269,   269,   269,   273,   274,   275,   276,   275,
+     275,   277,   275,   275,   275,   275,   275,   275,   275,   275,
+     275,   275,   278,   275,   279,   275,   280,   275,   281,   275,
+     282,   275,   283,   284,   285,   285,   286,   287,   286,   286,
+     286,   286,   286,   286,   286,   286,   288,   286,   289,   289,
+     290,   290,   290,   290,   290,   290,   290,   291,   292,   293,
+     293,   294,   295,   294,   294,   294,   294,   294,   296,   294,
+     297,   298,   299,   300,   301,   301,   302,   303,   302,   302,
+     304,   302,   302,   302,   302,   302,   302,   305,   306,   307,
+     307,   308,   309,   308,   308,   308,   308,   308,   310,   308,
+     311,   308,   312,   312,   313,   314,   315,   315,   316,   316,
+     316,   316,   316,   316,   316,   316,   316,   316,   316,   317,
+     317,   318,   319,   320,   320,   321,   322,   323,   324,   323,
+     323,   323,   323,   323,   325,   323,   326,   323,   327,   323,
+     328,   323,   329,   330,   331,   332,   333,   333,   334,   334,
+     334,   334,   334,   335,   334,   336,   334,   337,   334,   338,
+     334,   339,   340,   341,   342,   341,   343,   341,   344,   341,
+     345,   341,   346,   347,   348,   349,   350,   350,   351,   352,
+     351,   351,   351,   351,   351,   353,   351,   354,   351,   355,
+     351,   356,   357,   358,   358,   358,   358,   359,   359,   360,
+     360,   361,   362,   363,   363,   363,   365,   364,   366,   366,
+     367,   367,   367,   367,   367,   367,   367,   367,   367,   369,
+     368,   370,   370,   371,   371,   371,   371,   371,   373,   372,
+     374,   374,   375,   375,   375,   375,   375,   375,   375,   375,
+     376,   377,   378,   378,   379,   379,   379,   380,   381,   382,
+     382,   382,   383,   384,   385,   385,   385,   386,   387,   388,
+     389,   390,   390,   391,   392,   393,   393,   393,   394,   395,
+     396,   396,   396,   397,   398,   399,   399,   400,   401,   402,
+     402,   403,   403,   404,   405,   407,   406,   406,   408,   409,
+     410,   411,   411,   413,   412,   415,   414,   416,   414,   414,
+     417,   418,   419,   419,   420,   421,   422,   422,   423,   424,
+     424,   425,   425,   426,   427,   428,   429,   430,   430,   431,
+     431,   432,   433,   434,   434,   435,   435,   436,   436,   437,
+     437,   438,   438,   439,   439,   440,   440,   440,   441,   441,
+     442,   443,   444,   445,   445,   445,   446,   447,   448,   449,
      449,   450,   450,   451,   451,   452,   452,   453,   453,   454,
-     455,   455,   457,   456,   456,   458,   458,   458,   458,   458,
-     458,   458,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   459,   459,   459,   459,   459,   459,   459,
-     459,   459,   459,   460,   461
+     454,   455,   456,   456,   458,   457,   457,   459,   459,   459,
+     459,   459,   459,   459,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   461,   462
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -2070,63 +2072,63 @@
        1,     4,     1,     4,     0,     3,     2,     2,     2,     1,
        4,     1,     4,     1,     0,     4,     2,     2,     1,     1,
        4,     2,     2,     2,     1,     1,     4,     1,     4,     0,
-       2,     2,     2,     2,     1,     4,     1,     4,     1,     4,
-       0,     2,     2,     2,     2,     2,     1,     4,     1,     7,
-       0,     3,     2,     2,     2,     2,     2,     4,     1,     1,
-       4,     1,     1,     1,     0,     2,     2,     2,     2,     2,
-       2,     3,     4,     0,     1,     4,     2,     1,     5,     1,
-       1,     4,     0,     2,     2,     2,     2,     5,     1,     1,
-       4,     0,     2,     2,     2,     2,     2,     1,     4,     3,
-       0,     3,     4,     1,     1,     4,     0,     2,     2,     2,
-       2,     2,     1,     4,     2,     1,     4,     1,     4,     1,
-       4,     1,     4,     2,     2,     1,     2,     0,     2,     5,
+       3,     2,     2,     2,     1,     4,     1,     3,     1,     4,
+       1,     4,     0,     2,     3,     2,     2,     2,     1,     4,
+       1,     7,     0,     3,     2,     2,     2,     2,     2,     4,
+       1,     1,     4,     1,     1,     1,     0,     2,     2,     2,
+       2,     2,     2,     3,     4,     0,     1,     4,     2,     1,
+       5,     1,     1,     4,     0,     2,     2,     2,     2,     5,
        1,     1,     4,     0,     2,     2,     2,     2,     2,     1,
-       4,     2,     1,     1,     4,     1,     4,     1,     4,     1,
-       4,     1,     4,     1,     4,     0,     2,     2,     2,     3,
-       3,     3,     3,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     4,     1,     4,     0,     0,     4,     2,
-       0,     4,     2,     2,     2,     2,     2,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     7,     1,     0,
-       0,     4,     2,     0,     4,     2,     0,     4,     2,     2,
-       2,     2,     2,     2,     1,     7,     0,     0,     4,     2,
-       0,     4,     2,     2,     0,     4,     2,     2,     2,     2,
-       2,     2,     2,     1,     7,     0,     0,     4,     2,     0,
-       4,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       1,     4,     1,     4,     0,     0,     4,     2,     2,     2,
-       2,     2,     2,     2,     0,     4,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     4,     1,     4,     0,
-       0,     4,     2,     2,     2,     2,     0,     4,     1,     4,
-       1,     4,     1,     4,     0,     0,     4,     2,     0,     4,
-       2,     2,     2,     2,     2,     1,     4,     1,     4,     0,
-       0,     4,     2,     2,     2,     2,     0,     4,     0,     4,
-       2,     1,     1,     4,     1,     4,     0,     3,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     1,     1,
-       7,     2,     1,     1,     7,     0,     0,     4,     2,     2,
+       4,     3,     0,     3,     4,     1,     1,     4,     0,     3,
+       2,     2,     2,     2,     1,     4,     2,     1,     4,     1,
+       4,     1,     4,     1,     4,     2,     2,     1,     2,     0,
+       2,     5,     1,     1,     4,     0,     3,     2,     2,     2,
+       2,     1,     4,     2,     1,     1,     4,     1,     4,     1,
+       4,     1,     4,     1,     4,     1,     4,     0,     2,     2,
+       2,     3,     3,     3,     3,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     4,     1,     4,     0,     0,
+       4,     3,     0,     4,     2,     2,     2,     2,     2,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     7,
+       1,     0,     0,     4,     3,     0,     4,     2,     0,     4,
+       2,     2,     2,     2,     2,     2,     1,     7,     0,     0,
+       4,     3,     0,     4,     2,     2,     0,     4,     2,     2,
+       2,     2,     2,     2,     2,     1,     7,     0,     0,     4,
+       3,     0,     4,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     0,     4,     0,     4,     0,     4,     0,     4,
-       1,     4,     1,     4,     1,     4,     0,     2,     2,     2,
-       2,     0,     4,     0,     4,     0,     4,     0,     4,     2,
-       5,     0,     0,     4,     0,     4,     0,     4,     0,     4,
-       2,     5,     1,     4,     1,     4,     0,     0,     4,     2,
-       2,     2,     2,     0,     4,     0,     4,     0,     4,     1,
-       7,     0,     2,     2,     4,     2,     1,     1,     2,     1,
-       3,     1,     1,     1,     0,     4,     1,     4,     0,     2,
-       3,     2,     2,     2,     2,     2,     2,     0,     4,     1,
-       4,     0,     2,     3,     2,     2,     0,     4,     1,     4,
-       0,     3,     2,     2,     2,     2,     2,     2,     1,     4,
-       1,     4,     0,     2,     2,     1,     4,     2,     2,     1,
-       1,     4,     2,     2,     1,     1,     4,     1,     4,     2,
-       1,     1,     4,     2,     2,     1,     1,     4,     2,     2,
-       1,     1,     4,     1,     4,     1,     4,     2,     1,     0,
-       3,     1,     4,     0,     3,     1,     1,     2,     2,     0,
-       2,     0,     3,     0,     2,     0,     2,     1,     3,     2,
-       0,     2,     3,     2,     0,     2,     2,     0,     2,     0,
-       6,     5,     5,     5,     4,     0,     2,     0,     5,     5,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
-       1,     1,     1,     2,     2,     1,     2,     4,     1,     1,
-       1,     0,     2,     2,     3,     2,     1,     0,     1,     1,
-       4,     0,     4,     2,     5,     1,     1,     0,     2,     2,
-       0,     1,     0,     3,     1,     1,     1,     1,     1,     1,
+       0,     4,     1,     4,     1,     4,     0,     0,     4,     3,
+       2,     2,     2,     2,     2,     2,     0,     4,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
+       4,     0,     0,     4,     3,     2,     2,     2,     0,     4,
+       1,     4,     1,     4,     1,     4,     0,     0,     4,     3,
+       0,     4,     2,     2,     2,     2,     2,     1,     4,     1,
+       4,     0,     0,     4,     3,     2,     2,     2,     0,     4,
+       0,     4,     2,     1,     1,     4,     1,     4,     0,     3,
+       3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     7,     2,     1,     1,     7,     0,     0,     4,
+       3,     2,     2,     2,     0,     4,     0,     4,     0,     4,
+       0,     4,     1,     4,     1,     4,     1,     4,     0,     3,
+       2,     2,     2,     0,     4,     0,     4,     0,     4,     0,
+       4,     2,     5,     0,     0,     4,     0,     4,     0,     4,
+       0,     4,     2,     5,     1,     4,     1,     4,     0,     0,
+       4,     3,     2,     2,     2,     0,     4,     0,     4,     0,
+       4,     1,     7,     0,     2,     2,     4,     2,     1,     1,
+       2,     1,     3,     1,     1,     1,     0,     4,     1,     4,
+       0,     2,     3,     2,     2,     2,     2,     2,     2,     0,
+       4,     1,     4,     0,     2,     3,     2,     2,     0,     4,
+       1,     4,     0,     3,     2,     2,     2,     2,     2,     2,
+       1,     4,     1,     4,     0,     2,     2,     1,     4,     2,
+       2,     1,     1,     4,     2,     2,     1,     1,     4,     1,
+       4,     2,     1,     1,     4,     2,     2,     1,     1,     4,
+       2,     2,     1,     1,     4,     1,     4,     1,     4,     2,
+       1,     0,     3,     1,     4,     0,     3,     1,     1,     2,
+       2,     0,     2,     0,     3,     0,     2,     0,     2,     1,
+       3,     2,     0,     2,     3,     2,     0,     2,     2,     0,
+       2,     0,     6,     5,     5,     5,     4,     0,     2,     0,
+       5,     5,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     1,     1,     1,     2,     2,     1,     2,     4,
+       1,     1,     1,     0,     2,     2,     3,     2,     1,     0,
+       1,     1,     4,     0,     4,     2,     5,     1,     1,     0,
+       2,     2,     0,     1,     0,     3,     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,
@@ -2135,7 +2137,7 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     1,     1
 };
 
 
@@ -2637,25 +2639,25 @@
 
         break;
 
-    case 206: /* pattern_arg_str  */
+    case 207: /* pattern_arg_str  */
 
       { free(((*yyvaluep).str)); }
 
         break;
 
-    case 441: /* semicolom  */
+    case 442: /* semicolom  */
 
       { free(((*yyvaluep).str)); }
 
         break;
 
-    case 443: /* curly_bracket_open  */
+    case 444: /* curly_bracket_open  */
 
       { free(((*yyvaluep).str)); }
 
         break;
 
-    case 447: /* string_opt_part1  */
+    case 448: /* string_opt_part1  */
 
       { free(((*yyvaluep).str)); }
 
@@ -3783,20 +3785,6 @@
 
     break;
 
-  case 120:
-
-    { void *feature;
-
-                                        feature = actual;
-                                        YANG_ADDELEM(((struct lys_feature *)actual)->iffeature,
-                                                     ((struct lys_feature *)actual)->iffeature_size);
-                                        ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;
-                                        s = NULL;
-                                        actual = feature;
-                                      }
-
-    break;
-
   case 121:
 
     { if (((struct lys_feature *)actual)->flags & LYS_STATUS_MASK) {
@@ -3830,13 +3818,71 @@
 
   case 124:
 
-    { backup_type = actual_type;
+    { (yyval.backup_token).token = actual_type;
+                         (yyval.backup_token).actual = actual;
+                         switch (actual_type) {
+                         case FEATURE_KEYWORD:
+                           YANG_ADDELEM(((struct lys_feature *)actual)->iffeature,
+                                        ((struct lys_feature *)actual)->iffeature_size);
+                           break;
+                         case IDENTITY_KEYWORD:
+                           if (trg->version < 2) {
+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "identity");
+                             free(s);
+                             YYABORT;
+                           }
+                           YANG_ADDELEM(((struct lys_ident *)actual)->iffeature,
+                                        ((struct lys_ident *)actual)->iffeature_size);
+                           break;
+                         case ENUM_KEYWORD:
+                           if (trg->version < 2) {
+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");
+                             free(s);
+                             YYABORT;
+                           }
+                           YANG_ADDELEM(((struct lys_type_enum *)actual)->iffeature,
+                                        ((struct lys_type_enum *)actual)->iffeature_size);
+                           break;
+                         case BIT_KEYWORD:
+                           if (trg->version < 2) {
+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "bit");
+                             free(s);
+                             YYABORT;
+                           }
+                           YANG_ADDELEM(((struct lys_type_bit *)actual)->iffeature,
+                                        ((struct lys_type_bit *)actual)->iffeature_size);
+                           break;
+                         case REFINE_KEYWORD:
+                           if (trg->version < 2) {
+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");
+                             free(s);
+                             YYABORT;
+                           }
+                           YANG_ADDELEM(((struct lys_refine *)actual)->iffeature,
+                                        ((struct lys_refine *)actual)->iffeature_size);
+                           break;
+                         default:
+                           /* lys_node_* */
+                           YANG_ADDELEM(((struct lys_node *)actual)->iffeature,
+                                        ((struct lys_node *)actual)->iffeature_size);
+                           break;
+                         }
+                         ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;
+                         s = NULL;
                          actual_type = IF_FEATURE_KEYWORD;
                        }
 
     break;
 
-  case 126:
+  case 125:
+
+    { actual = (yyvsp[-1].backup_token).actual;
+                   actual_type = (yyvsp[-1].backup_token).token;
+                 }
+
+    break;
+
+  case 128:
 
     { const char *tmp;
 
@@ -3846,15 +3892,26 @@
                                          lydict_remove(trg->ctx, tmp);
                                          YYABORT;
                                        }
+                                       (yyval.backup_token).token = actual_type;
+                                       (yyval.backup_token).actual = actual;
                                        YANG_ADDELEM(trg->ident, trg->ident_size);
                                        ((struct lys_ident *)actual)->name = tmp;
                                        ((struct lys_ident *)actual)->module = trg;
+                                       actual_type = IDENTITY_KEYWORD;
                                      }
 
     break;
 
   case 129:
 
+    { actual = (yyvsp[-1].backup_token).actual;
+                 actual_type = (yyvsp[-1].backup_token).token;
+               }
+
+    break;
+
+  case 131:
+
     { void *tmp;
 
            if (((struct lys_ident *)actual)->base_size) {
@@ -3880,7 +3937,7 @@
 
     break;
 
-  case 131:
+  case 133:
 
     { void *identity;
 
@@ -3899,25 +3956,7 @@
 
     break;
 
-  case 132:
-
-    { void *identity;
-
-                                         if (trg->version < 2) {
-                                           LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "identity");
-                                           YYABORT;
-                                         }
-                                         identity = actual;
-                                         YANG_ADDELEM(((struct lys_ident *)actual)->iffeature,
-                                                      ((struct lys_ident *)actual)->iffeature_size);
-                                         ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;
-                                         s = NULL;
-                                         actual = identity;
-                                       }
-
-    break;
-
-  case 133:
+  case 135:
 
     { if (((struct lys_ident *)actual)->flags & LYS_STATUS_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "identity");
@@ -3928,7 +3967,7 @@
 
     break;
 
-  case 134:
+  case 136:
 
     { if (yang_read_description(trg, actual, s, "identity", NODE)) {
                                             YYABORT;
@@ -3938,7 +3977,7 @@
 
     break;
 
-  case 135:
+  case 137:
 
     { if (yang_read_reference(trg, actual, s, "identity", NODE)) {
                                           YYABORT;
@@ -3948,7 +3987,7 @@
 
     break;
 
-  case 136:
+  case 138:
 
     { backup_type = actual_type;
                                    actual_type = BASE_KEYWORD;
@@ -3956,7 +3995,7 @@
 
     break;
 
-  case 138:
+  case 140:
 
     { tpdf_parent = actual;
                                       if (lyp_check_identifier(s, LY_IDENT_TYPE, trg, tpdf_parent)) {
@@ -4009,7 +4048,7 @@
 
     break;
 
-  case 139:
+  case 141:
 
     { if (!((yyvsp[-1].nodes).node.flag & LYS_TYPE_DEF)) {
                       LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "type", "typedef");
@@ -4020,7 +4059,7 @@
 
     break;
 
-  case 140:
+  case 142:
 
     { (yyval.nodes).node.ptr_tpdf = actual;
                             (yyval.nodes).node.flag = 0;
@@ -4028,7 +4067,7 @@
 
     break;
 
-  case 141:
+  case 143:
 
     { actual = (yyvsp[-2].nodes).node.ptr_tpdf;
                                        actual_type = TYPEDEF_KEYWORD;
@@ -4038,13 +4077,13 @@
 
     break;
 
-  case 142:
+  case 144:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, TYPEDEF_KEYWORD)) {YYABORT;} s = NULL; }
 
     break;
 
-  case 143:
+  case 145:
 
     { if (yang_read_default(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, TYPEDEF_KEYWORD)) {
                                     YYABORT;
@@ -4055,7 +4094,7 @@
 
     break;
 
-  case 144:
+  case 146:
 
     { if (yang_check_flags((uint16_t*)&(yyvsp[-1].nodes).node.ptr_tpdf->flags, LYS_STATUS_MASK, "status", "typedef", (yyvsp[0].i), 0)) {
                                    YYABORT;
@@ -4064,7 +4103,7 @@
 
     break;
 
-  case 145:
+  case 147:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, "typedef", NODE)) {
                                         YYABORT;
@@ -4074,7 +4113,7 @@
 
     break;
 
-  case 146:
+  case 148:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, "typedef", NODE)) {
                                       YYABORT;
@@ -4084,7 +4123,7 @@
 
     break;
 
-  case 148:
+  case 150:
 
     { if (!(actual = yang_read_type(trg, actual, s, actual_type))) {
                                          YYABORT;
@@ -4094,7 +4133,7 @@
 
     break;
 
-  case 151:
+  case 153:
 
     { if (((struct yang_type *)actual)->base == LY_TYPE_STRING &&
                                          ((struct yang_type *)actual)->type->info.str.pat_count) {
@@ -4134,7 +4173,7 @@
 
     break;
 
-  case 155:
+  case 157:
 
     { if (yang_read_require_instance(actual, (yyvsp[0].i))) {
                                                  YYABORT;
@@ -4143,7 +4182,7 @@
 
     break;
 
-  case 156:
+  case 158:
 
     { /* leafref_specification */
                                    if (yang_read_leafref_path(trg, actual, s)) {
@@ -4154,7 +4193,7 @@
 
     break;
 
-  case 157:
+  case 159:
 
     { /* identityref_specification */
                                    if (((struct yang_type *)actual)->base && ((struct yang_type *)actual)->base != LY_TYPE_IDENT) {
@@ -4172,13 +4211,13 @@
 
     break;
 
-  case 162:
+  case 164:
 
     { actual = (yyvsp[-2].v); }
 
     break;
 
-  case 163:
+  case 165:
 
     { struct yang_type *stype = (struct yang_type *)actual;
 
@@ -4199,7 +4238,7 @@
 
     break;
 
-  case 164:
+  case 166:
 
     { (yyval.uint) = (yyvsp[0].uint);
                                                backup_type = actual_type;
@@ -4208,7 +4247,7 @@
 
     break;
 
-  case 165:
+  case 167:
 
     { if (yang_read_fraction(actual, (yyvsp[-1].uint))) {
                                   YYABORT;
@@ -4217,13 +4256,13 @@
 
     break;
 
-  case 166:
+  case 168:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 167:
+  case 169:
 
     { char *endptr = NULL;
                unsigned long val;
@@ -4243,7 +4282,7 @@
 
     break;
 
-  case 168:
+  case 170:
 
     { actual = (yyvsp[-2].v);
                                                                     actual_type = TYPE_KEYWORD;
@@ -4251,7 +4290,7 @@
 
     break;
 
-  case 169:
+  case 171:
 
     { (yyval.v) = actual;
                          if (!(actual = yang_read_length(trg, actual, s))) {
@@ -4263,7 +4302,7 @@
 
     break;
 
-  case 172:
+  case 174:
 
     { switch (actual_type) {
                                case MUST_KEYWORD:
@@ -4284,7 +4323,7 @@
 
     break;
 
-  case 173:
+  case 175:
 
     { if (yang_read_message(trg, actual, s, (yyvsp[-1].str), ERROR_MESSAGE_KEYWORD)) {
                                              YYABORT;
@@ -4294,7 +4333,7 @@
 
     break;
 
-  case 174:
+  case 176:
 
     { if (yang_read_message(trg, actual, s, (yyvsp[-1].str), ERROR_APP_TAG_KEYWORD)) {
                                              YYABORT;
@@ -4304,7 +4343,7 @@
 
     break;
 
-  case 175:
+  case 177:
 
     { if (yang_read_description(trg, actual, s, (yyvsp[-1].str), NODE)) {
                                            YYABORT;
@@ -4314,7 +4353,7 @@
 
     break;
 
-  case 176:
+  case 178:
 
     { if (yang_read_reference(trg, actual, s, (yyvsp[-1].str), NODE)) {
                                          YYABORT;
@@ -4324,7 +4363,7 @@
 
     break;
 
-  case 177:
+  case 179:
 
     { if (yang_read_pattern(trg, actual, (yyvsp[-2].str), (yyvsp[-1].ch))) {
                                                                           YYABORT;
@@ -4335,7 +4374,7 @@
 
     break;
 
-  case 178:
+  case 180:
 
     { if (((struct yang_type *)actual)->base != 0 && ((struct yang_type *)actual)->base != LY_TYPE_STRING) {
                             free(s);
@@ -4352,25 +4391,25 @@
 
     break;
 
-  case 179:
+  case 181:
 
     { (yyval.ch) = 0x06; }
 
     break;
 
-  case 180:
+  case 182:
 
     { (yyval.ch) = (yyvsp[-1].ch); }
 
     break;
 
-  case 181:
+  case 183:
 
     { (yyval.ch) = 0x06; /* ACK */ }
 
     break;
 
-  case 182:
+  case 184:
 
     { if (trg->version < 2) {
                                         LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "modifier");
@@ -4385,7 +4424,7 @@
 
     break;
 
-  case 183:
+  case 185:
 
     { if (yang_read_message(trg, actual, s, "pattern", ERROR_MESSAGE_KEYWORD)) {
                                              YYABORT;
@@ -4395,7 +4434,7 @@
 
     break;
 
-  case 184:
+  case 186:
 
     { if (yang_read_message(trg, actual, s, "pattern", ERROR_APP_TAG_KEYWORD)) {
                                              YYABORT;
@@ -4405,7 +4444,7 @@
 
     break;
 
-  case 185:
+  case 187:
 
     { if (yang_read_description(trg, actual, s, "pattern", NODE)) {
                                            YYABORT;
@@ -4415,7 +4454,7 @@
 
     break;
 
-  case 186:
+  case 188:
 
     { if (yang_read_reference(trg, actual, s, "pattern", NODE)) {
                                          YYABORT;
@@ -4425,7 +4464,7 @@
 
     break;
 
-  case 187:
+  case 189:
 
     { backup_type = actual_type;
                        actual_type = MODIFIER_KEYWORD;
@@ -4433,7 +4472,7 @@
 
     break;
 
-  case 188:
+  case 190:
 
     { if (!strcmp(s, "invert-match")) {
                                                              (yyval.ch) = 0x15;
@@ -4448,7 +4487,7 @@
 
     break;
 
-  case 189:
+  case 191:
 
     { struct lys_type_enum * tmp;
 
@@ -4464,7 +4503,7 @@
 
     break;
 
-  case 192:
+  case 194:
 
     { if (yang_check_enum(yang_type, actual, &cnt_val, is_value)) {
                YYABORT;
@@ -4475,7 +4514,7 @@
 
     break;
 
-  case 193:
+  case 195:
 
     { yang_type = actual;
                        YANG_ADDELEM(((struct yang_type *)actual)->type->info.enums.enm, ((struct yang_type *)actual)->type->info.enums.count);
@@ -4484,11 +4523,12 @@
                        }
                        s = NULL;
                        is_value = 0;
+                       actual_type = ENUM_KEYWORD;
                      }
 
     break;
 
-  case 195:
+  case 197:
 
     { if (((struct lys_type_enum *)actual)->iffeature_size) {
              struct lys_iffeature *tmp;
@@ -4505,24 +4545,7 @@
 
     break;
 
-  case 197:
-
-    { if (trg->version < 2) {
-                                       LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");
-                                       free(s);
-                                       YYABORT;
-                                     }
-                                     (yyval.v) = actual;
-                                     YANG_ADDELEM(((struct lys_type_enum *)actual)->iffeature,
-                                                  ((struct lys_type_enum *)actual)->iffeature_size);
-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                     actual = (yyval.v);
-                                     s = NULL;
-                                   }
-
-    break;
-
-  case 198:
+  case 200:
 
     { if (is_value) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "value", "enum");
@@ -4533,7 +4556,7 @@
 
     break;
 
-  case 199:
+  case 201:
 
     { if (yang_check_flags((uint16_t*)&((struct lys_type_enum *)actual)->flags, LYS_STATUS_MASK, "status", "enum", (yyvsp[0].i), 1)) {
                                    YYABORT;
@@ -4542,7 +4565,7 @@
 
     break;
 
-  case 200:
+  case 202:
 
     { if (yang_read_description(trg, actual, s, "enum", NODE)) {
                                         YYABORT;
@@ -4552,7 +4575,7 @@
 
     break;
 
-  case 201:
+  case 203:
 
     { if (yang_read_reference(trg, actual, s, "enum", NODE)) {
                                       YYABORT;
@@ -4562,7 +4585,7 @@
 
     break;
 
-  case 202:
+  case 204:
 
     { (yyval.i) = (yyvsp[0].i);
                                    backup_type = actual_type;
@@ -4571,7 +4594,7 @@
 
     break;
 
-  case 203:
+  case 205:
 
     { ((struct lys_type_enum *)actual)->value = (yyvsp[-1].i);
 
@@ -4584,13 +4607,13 @@
 
     break;
 
-  case 204:
+  case 206:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 205:
+  case 207:
 
     { /* convert it to int32_t */
                 int64_t val;
@@ -4609,7 +4632,7 @@
 
     break;
 
-  case 206:
+  case 208:
 
     { actual = (yyvsp[-1].v);
                                                         actual_type = RANGE_KEYWORD;
@@ -4617,7 +4640,7 @@
 
     break;
 
-  case 209:
+  case 211:
 
     { backup_type = actual_type;
                          actual_type = PATH_KEYWORD;
@@ -4625,7 +4648,7 @@
 
     break;
 
-  case 211:
+  case 213:
 
     { (yyval.i) = (yyvsp[0].i);
                                                  backup_type = actual_type;
@@ -4634,25 +4657,25 @@
 
     break;
 
-  case 212:
+  case 214:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 213:
+  case 215:
 
     { (yyval.i) = 1; }
 
     break;
 
-  case 214:
+  case 216:
 
     { (yyval.i) = -1; }
 
     break;
 
-  case 215:
+  case 217:
 
     { if (!strcmp(s,"true")) {
                   (yyval.i) = 1;
@@ -4669,7 +4692,7 @@
 
     break;
 
-  case 216:
+  case 218:
 
     { struct lys_type_bit * tmp;
 
@@ -4685,7 +4708,7 @@
 
     break;
 
-  case 219:
+  case 221:
 
     { if (yang_check_bit(yang_type, actual, &cnt_val, is_value)) {
                       YYABORT;
@@ -4696,7 +4719,7 @@
 
     break;
 
-  case 220:
+  case 222:
 
     { yang_type = actual;
                                   YANG_ADDELEM(((struct yang_type *)actual)->type->info.bits.bit,
@@ -4706,11 +4729,12 @@
                                   }
                                   s = NULL;
                                   is_value = 0;
+                                  actual_type = BIT_KEYWORD;
                                 }
 
     break;
 
-  case 222:
+  case 224:
 
     { if (((struct lys_type_bit *)actual)->iffeature_size) {
              struct lys_iffeature *tmp;
@@ -4727,24 +4751,7 @@
 
     break;
 
-  case 224:
-
-    { if (trg->version < 2) {
-                                      LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "bit");
-                                      free(s);
-                                      YYABORT;
-                                    }
-                                    (yyval.v) = actual;
-                                    YANG_ADDELEM(((struct lys_type_bit *)actual)->iffeature,
-                                                 ((struct lys_type_bit *)actual)->iffeature_size);
-                                    ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                    actual = (yyval.v);
-                                    s = NULL;
-                                  }
-
-    break;
-
-  case 225:
+  case 227:
 
     { if (is_value) {
                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "position", "bit");
@@ -4755,7 +4762,7 @@
 
     break;
 
-  case 226:
+  case 228:
 
     { if (yang_check_flags((uint16_t*)&((struct lys_type_bit *)actual)->flags,
                                                      LYS_STATUS_MASK, "status", "bit", (yyvsp[0].i), 1)) {
@@ -4765,7 +4772,7 @@
 
     break;
 
-  case 227:
+  case 229:
 
     { if (yang_read_description(trg, actual, s, "bit", NODE)) {
                                        YYABORT;
@@ -4775,7 +4782,7 @@
 
     break;
 
-  case 228:
+  case 230:
 
     { if (yang_read_reference(trg, actual, s, "bit", NODE)) {
                                      YYABORT;
@@ -4785,7 +4792,7 @@
 
     break;
 
-  case 229:
+  case 231:
 
     { (yyval.uint) = (yyvsp[0].uint);
                                              backup_type = actual_type;
@@ -4794,7 +4801,7 @@
 
     break;
 
-  case 230:
+  case 232:
 
     { ((struct lys_type_bit *)actual)->pos = (yyvsp[-1].uint);
 
@@ -4807,13 +4814,13 @@
 
     break;
 
-  case 231:
+  case 233:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 232:
+  case 234:
 
     { /* convert it to uint32_t */
                 unsigned long val;
@@ -4833,7 +4840,7 @@
 
     break;
 
-  case 233:
+  case 235:
 
     { backup_type = actual_type;
                             actual_type = ERROR_MESSAGE_KEYWORD;
@@ -4841,7 +4848,7 @@
 
     break;
 
-  case 235:
+  case 237:
 
     { backup_type = actual_type;
                             actual_type = ERROR_APP_TAG_KEYWORD;
@@ -4849,7 +4856,7 @@
 
     break;
 
-  case 237:
+  case 239:
 
     { backup_type = actual_type;
                     actual_type = UNITS_KEYWORD;
@@ -4857,7 +4864,7 @@
 
     break;
 
-  case 239:
+  case 241:
 
     { backup_type = actual_type;
                       actual_type = DEFAULT_KEYWORD;
@@ -4865,7 +4872,7 @@
 
     break;
 
-  case 241:
+  case 243:
 
     { (yyval.backup_token).token = actual_type;
                                        (yyval.backup_token).actual = actual;
@@ -4879,7 +4886,7 @@
 
     break;
 
-  case 242:
+  case 244:
 
     { LOGDBG("YANG: finished parsing grouping statement \"%s\"", data_node->name);
                  actual_type = (yyvsp[-1].backup_token).token;
@@ -4888,13 +4895,13 @@
 
     break;
 
-  case 245:
+  case 247:
 
     { (yyval.nodes).grouping = actual; }
 
     break;
 
-  case 246:
+  case 248:
 
     { if ((yyvsp[-1].nodes).grouping->flags & LYS_STATUS_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).grouping, "status", "grouping");
@@ -4905,7 +4912,7 @@
 
     break;
 
-  case 247:
+  case 249:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).grouping, s, "grouping", NODE_PRINT)) {
                                             YYABORT;
@@ -4915,7 +4922,7 @@
 
     break;
 
-  case 248:
+  case 250:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).grouping, s, "grouping", NODE_PRINT)) {
                                           YYABORT;
@@ -4925,22 +4932,6 @@
 
     break;
 
-  case 249:
-
-    { actual = (yyvsp[-2].nodes).grouping;
-                                               actual_type = GROUPING_KEYWORD;
-                                             }
-
-    break;
-
-  case 250:
-
-    { actual = (yyvsp[-2].nodes).grouping;
-                                              actual_type = GROUPING_KEYWORD;
-                                            }
-
-    break;
-
   case 251:
 
     { actual = (yyvsp[-2].nodes).grouping;
@@ -4952,12 +4943,28 @@
   case 252:
 
     { actual = (yyvsp[-2].nodes).grouping;
+                                              actual_type = GROUPING_KEYWORD;
+                                            }
+
+    break;
+
+  case 253:
+
+    { actual = (yyvsp[-2].nodes).grouping;
+                                               actual_type = GROUPING_KEYWORD;
+                                             }
+
+    break;
+
+  case 254:
+
+    { actual = (yyvsp[-2].nodes).grouping;
                                              actual_type = GROUPING_KEYWORD;
                                            }
 
     break;
 
-  case 253:
+  case 255:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                                    actual_type = GROUPING_KEYWORD;
@@ -4969,7 +4976,7 @@
 
     break;
 
-  case 262:
+  case 264:
 
     { (yyval.backup_token).token = actual_type;
                                         (yyval.backup_token).actual = actual;
@@ -4983,7 +4990,7 @@
 
     break;
 
-  case 263:
+  case 265:
 
     { LOGDBG("YANG: finished parsing container statement \"%s\"", data_node->name);
                   actual_type = (yyvsp[-1].backup_token).token;
@@ -4993,7 +5000,7 @@
 
     break;
 
-  case 265:
+  case 267:
 
     { void *tmp;
 
@@ -5018,32 +5025,14 @@
 
     break;
 
-  case 266:
+  case 268:
 
     { (yyval.nodes).container = actual; }
 
     break;
 
-  case 267:
-
-    { actual = (yyvsp[-1].nodes).container;
-                                    actual_type = CONTAINER_KEYWORD;
-                                  }
-
-    break;
-
   case 269:
 
-    { YANG_ADDELEM((yyvsp[-1].nodes).container->iffeature, (yyvsp[-1].nodes).container->iffeature_size);
-                                          ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                          actual = (yyvsp[-1].nodes).container;
-                                          s = NULL;
-                                        }
-
-    break;
-
-  case 270:
-
     { actual = (yyvsp[-1].nodes).container;
                                     actual_type = CONTAINER_KEYWORD;
                                   }
@@ -5052,6 +5041,14 @@
 
   case 272:
 
+    { actual = (yyvsp[-1].nodes).container;
+                                    actual_type = CONTAINER_KEYWORD;
+                                  }
+
+    break;
+
+  case 274:
+
     { if (yang_read_presence(trg, (yyvsp[-1].nodes).container, s)) {
                                           YYABORT;
                                         }
@@ -5060,7 +5057,7 @@
 
     break;
 
-  case 273:
+  case 275:
 
     { if ((yyvsp[-1].nodes).container->flags & LYS_CONFIG_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).container, "config", "container");
@@ -5071,7 +5068,7 @@
 
     break;
 
-  case 274:
+  case 276:
 
     { if ((yyvsp[-1].nodes).container->flags & LYS_STATUS_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).container, "status", "container");
@@ -5082,7 +5079,7 @@
 
     break;
 
-  case 275:
+  case 277:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).container, s, "container", NODE_PRINT)) {
                                              YYABORT;
@@ -5092,7 +5089,7 @@
 
     break;
 
-  case 276:
+  case 278:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).container, s, "container", NODE_PRINT)) {
                                            YYABORT;
@@ -5102,7 +5099,7 @@
 
     break;
 
-  case 277:
+  case 279:
 
     { actual = (yyvsp[-1].nodes).container;
                                         actual_type = CONTAINER_KEYWORD;
@@ -5111,7 +5108,7 @@
 
     break;
 
-  case 279:
+  case 281:
 
     { actual = (yyvsp[-1].nodes).container;
                                       actual_type = CONTAINER_KEYWORD;
@@ -5120,7 +5117,7 @@
 
     break;
 
-  case 281:
+  case 283:
 
     { actual = (yyvsp[-1].nodes).container;
                                             actual_type = CONTAINER_KEYWORD;
@@ -5133,7 +5130,7 @@
 
     break;
 
-  case 283:
+  case 285:
 
     { actual = (yyvsp[-1].nodes).container;
                                        actual_type = CONTAINER_KEYWORD;
@@ -5141,7 +5138,7 @@
 
     break;
 
-  case 285:
+  case 287:
 
     { actual = (yyvsp[-1].nodes).container;
                                         actual_type = CONTAINER_KEYWORD;
@@ -5150,7 +5147,7 @@
 
     break;
 
-  case 287:
+  case 289:
 
     { void *tmp;
 
@@ -5191,7 +5188,7 @@
 
     break;
 
-  case 288:
+  case 290:
 
     { (yyval.backup_token).token = actual_type;
                                    (yyval.backup_token).actual = actual;
@@ -5205,7 +5202,7 @@
 
     break;
 
-  case 289:
+  case 291:
 
     { (yyval.nodes).node.ptr_leaf = actual;
                             (yyval.nodes).node.flag = 0;
@@ -5213,7 +5210,7 @@
 
     break;
 
-  case 290:
+  case 292:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -5221,17 +5218,7 @@
 
     break;
 
-  case 292:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_leaf->iffeature, (yyvsp[-1].nodes).node.ptr_leaf->iffeature_size);
-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                     actual = (yyvsp[-1].nodes).node.ptr_leaf;
-                                     s = NULL;
-                                   }
-
-    break;
-
-  case 293:
+  case 295:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -5240,13 +5227,13 @@
 
     break;
 
-  case 294:
+  case 296:
 
     { (yyval.nodes) = (yyvsp[-3].nodes);}
 
     break;
 
-  case 295:
+  case 297:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, LEAF_KEYWORD)) {
                                   YYABORT;
@@ -5256,7 +5243,7 @@
 
     break;
 
-  case 296:
+  case 298:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -5264,7 +5251,7 @@
 
     break;
 
-  case 298:
+  case 300:
 
     { if (yang_read_default(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, LEAF_KEYWORD)) {
                                     YYABORT;
@@ -5274,7 +5261,7 @@
 
     break;
 
-  case 299:
+  case 301:
 
     { if ((yyvsp[-1].nodes).node.ptr_leaf->flags & LYS_CONFIG_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaf, "config", "leaf");
@@ -5285,7 +5272,7 @@
 
     break;
 
-  case 300:
+  case 302:
 
     { if ((yyvsp[-1].nodes).node.ptr_leaf->flags & LYS_MAND_MASK) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaf, "mandatory", "leaf");
@@ -5296,7 +5283,7 @@
 
     break;
 
-  case 301:
+  case 303:
 
     { if ((yyvsp[-1].nodes).node.ptr_leaf->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaf, "status", "leaf");
@@ -5307,7 +5294,7 @@
 
     break;
 
-  case 302:
+  case 304:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, "leaf", NODE_PRINT)) {
                                         YYABORT;
@@ -5317,7 +5304,7 @@
 
     break;
 
-  case 303:
+  case 305:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, "leaf", NODE_PRINT)) {
                                       YYABORT;
@@ -5327,7 +5314,7 @@
 
     break;
 
-  case 304:
+  case 306:
 
     { (yyval.backup_token).token = actual_type;
                                         (yyval.backup_token).actual = actual;
@@ -5341,7 +5328,7 @@
 
     break;
 
-  case 305:
+  case 307:
 
     { void *tmp;
 
@@ -5397,7 +5384,7 @@
 
     break;
 
-  case 306:
+  case 308:
 
     { (yyval.nodes).node.ptr_leaflist = actual;
                                  (yyval.nodes).node.flag = 0;
@@ -5405,7 +5392,7 @@
 
     break;
 
-  case 307:
+  case 309:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5413,18 +5400,7 @@
 
     break;
 
-  case 309:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_leaflist->iffeature,
-                                                       (yyvsp[-1].nodes).node.ptr_leaflist->iffeature_size);
-                                          ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                          actual = (yyvsp[-1].nodes).node.ptr_leaflist;
-                                          s = NULL;
-                                        }
-
-    break;
-
-  case 310:
+  case 312:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5433,13 +5409,13 @@
 
     break;
 
-  case 311:
+  case 313:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 312:
+  case 314:
 
     { if (trg->version < 2) {
                                          free(s);
@@ -5455,7 +5431,7 @@
 
     break;
 
-  case 313:
+  case 315:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, LEAF_LIST_KEYWORD)) {
                                        YYABORT;
@@ -5465,7 +5441,7 @@
 
     break;
 
-  case 314:
+  case 316:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5473,7 +5449,7 @@
 
     break;
 
-  case 316:
+  case 318:
 
     { if ((yyvsp[-1].nodes).node.ptr_leaflist->flags & LYS_CONFIG_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaflist, "config", "leaf-list");
@@ -5484,7 +5460,7 @@
 
     break;
 
-  case 317:
+  case 319:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MIN_ELEMENTS) {
                                               LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaflist, "min-elements", "leaf-list");
@@ -5502,7 +5478,7 @@
 
     break;
 
-  case 318:
+  case 320:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MAX_ELEMENTS) {
                                               LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaflist, "max-elements", "leaf-list");
@@ -5520,7 +5496,7 @@
 
     break;
 
-  case 319:
+  case 321:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_ORDERED_MASK) {
                                             LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaflist, "ordered by", "leaf-list");
@@ -5535,7 +5511,7 @@
 
     break;
 
-  case 320:
+  case 322:
 
     { if ((yyvsp[-1].nodes).node.ptr_leaflist->flags & LYS_STATUS_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_leaflist, "status", "leaf-list");
@@ -5546,7 +5522,7 @@
 
     break;
 
-  case 321:
+  case 323:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list", NODE_PRINT)) {
                                              YYABORT;
@@ -5556,7 +5532,7 @@
 
     break;
 
-  case 322:
+  case 324:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list", NODE_PRINT)) {
                                            YYABORT;
@@ -5566,7 +5542,7 @@
 
     break;
 
-  case 323:
+  case 325:
 
     { (yyval.backup_token).token = actual_type;
                                    (yyval.backup_token).actual = actual;
@@ -5580,7 +5556,7 @@
 
     break;
 
-  case 324:
+  case 326:
 
     { void *tmp;
 
@@ -5628,7 +5604,7 @@
 
     break;
 
-  case 325:
+  case 327:
 
     { (yyval.nodes).node.ptr_list = actual;
                             (yyval.nodes).node.flag = 0;
@@ -5636,27 +5612,8 @@
 
     break;
 
-  case 326:
-
-    { actual = (yyvsp[-1].nodes).node.ptr_list;
-                               actual_type = LIST_KEYWORD;
-                             }
-
-    break;
-
   case 328:
 
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_list->iffeature,
-                                                  (yyvsp[-1].nodes).node.ptr_list->iffeature_size);
-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                     actual = (yyvsp[-1].nodes).node.ptr_list;
-                                     s = NULL;
-                                   }
-
-    break;
-
-  case 329:
-
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                actual_type = LIST_KEYWORD;
                              }
@@ -5665,6 +5622,14 @@
 
   case 331:
 
+    { actual = (yyvsp[-1].nodes).node.ptr_list;
+                               actual_type = LIST_KEYWORD;
+                             }
+
+    break;
+
+  case 333:
+
     { if ((yyvsp[-1].nodes).node.ptr_list->keys) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "key", "list");
                                   free(s);
@@ -5677,7 +5642,7 @@
 
     break;
 
-  case 332:
+  case 334:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_list->unique, (yyvsp[-1].nodes).node.ptr_list->unique_size);
                                  ((struct lys_unique *)actual)->expr = (const char **)s;
@@ -5688,7 +5653,7 @@
 
     break;
 
-  case 333:
+  case 335:
 
     { if ((yyvsp[-1].nodes).node.ptr_list->flags & LYS_CONFIG_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "config", "list");
@@ -5699,7 +5664,7 @@
 
     break;
 
-  case 334:
+  case 336:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MIN_ELEMENTS) {
                                          LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "min-elements", "list");
@@ -5717,7 +5682,7 @@
 
     break;
 
-  case 335:
+  case 337:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MAX_ELEMENTS) {
                                          LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "max-elements", "list");
@@ -5735,7 +5700,7 @@
 
     break;
 
-  case 336:
+  case 338:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_ORDERED_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "ordered by", "list");
@@ -5750,7 +5715,7 @@
 
     break;
 
-  case 337:
+  case 339:
 
     { if ((yyvsp[-1].nodes).node.ptr_list->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "status", "list");
@@ -5761,7 +5726,7 @@
 
     break;
 
-  case 338:
+  case 340:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list", NODE_PRINT)) {
                                         YYABORT;
@@ -5771,7 +5736,7 @@
 
     break;
 
-  case 339:
+  case 341:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list", NODE_PRINT)) {
                                       YYABORT;
@@ -5781,7 +5746,7 @@
 
     break;
 
-  case 340:
+  case 342:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                   actual_type = LIST_KEYWORD;
@@ -5789,7 +5754,7 @@
 
     break;
 
-  case 342:
+  case 344:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5798,7 +5763,7 @@
 
     break;
 
-  case 344:
+  case 346:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                  actual_type = LIST_KEYWORD;
@@ -5807,7 +5772,7 @@
 
     break;
 
-  case 346:
+  case 348:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                        actual_type = LIST_KEYWORD;
@@ -5820,7 +5785,7 @@
 
     break;
 
-  case 348:
+  case 350:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5830,13 +5795,13 @@
 
     break;
 
-  case 349:
+  case 351:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 350:
+  case 352:
 
     { (yyval.backup_token).token = actual_type;
                                      (yyval.backup_token).actual = actual;
@@ -5850,7 +5815,7 @@
 
     break;
 
-  case 351:
+  case 353:
 
     { LOGDBG("YANG: finished parsing choice statement \"%s\"", data_node->name);
                actual_type = (yyvsp[-1].backup_token).token;
@@ -5860,7 +5825,7 @@
 
     break;
 
-  case 353:
+  case 355:
 
     { struct lys_iffeature *tmp;
 
@@ -5882,7 +5847,7 @@
 
     break;
 
-  case 354:
+  case 356:
 
     { (yyval.nodes).node.ptr_choice = actual;
                               (yyval.nodes).node.flag = 0;
@@ -5890,7 +5855,7 @@
 
     break;
 
-  case 355:
+  case 357:
 
     { actual = (yyvsp[-1].nodes).node.ptr_choice;
                                  actual_type = CHOICE_KEYWORD;
@@ -5898,24 +5863,13 @@
 
     break;
 
-  case 356:
+  case 358:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 357:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_choice->iffeature,
-                                                    (yyvsp[-1].nodes).node.ptr_choice->iffeature_size);
-                                       ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                       actual = (yyvsp[-1].nodes).node.ptr_choice;
-                                       s = NULL;
-                                     }
-
-    break;
-
-  case 358:
+  case 360:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_CHOICE_DEFAULT) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_choice, "default", "choice");
@@ -5930,7 +5884,7 @@
 
     break;
 
-  case 359:
+  case 361:
 
     { if ((yyvsp[-1].nodes).node.ptr_choice->flags & LYS_CONFIG_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_choice, "config", "choice");
@@ -5942,7 +5896,7 @@
 
     break;
 
-  case 360:
+  case 362:
 
     { if ((yyvsp[-1].nodes).node.ptr_choice->flags & LYS_MAND_MASK) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_choice, "mandatory", "choice");
@@ -5954,7 +5908,7 @@
 
     break;
 
-  case 361:
+  case 363:
 
     { if ((yyvsp[-1].nodes).node.ptr_choice->flags & LYS_STATUS_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_choice, "status", "choice");
@@ -5966,7 +5920,7 @@
 
     break;
 
-  case 362:
+  case 364:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_choice, s, "choice", NODE_PRINT)) {
                                           YYABORT;
@@ -5977,7 +5931,7 @@
 
     break;
 
-  case 363:
+  case 365:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_choice, s, "choice", NODE_PRINT)) {
                                         YYABORT;
@@ -5988,7 +5942,7 @@
 
     break;
 
-  case 364:
+  case 366:
 
     { actual = (yyvsp[-1].nodes).node.ptr_choice;
                                             actual_type = CHOICE_KEYWORD;
@@ -5997,13 +5951,13 @@
 
     break;
 
-  case 365:
+  case 367:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 374:
+  case 376:
 
     { if (trg->version < 2 ) {
                      LOGVAL(LYE_INSTMT, LY_VLOG_LYS, actual, "choice");
@@ -6013,7 +5967,7 @@
 
     break;
 
-  case 375:
+  case 377:
 
     { (yyval.backup_token).token = actual_type;
                                    (yyval.backup_token).actual = actual;
@@ -6027,7 +5981,7 @@
 
     break;
 
-  case 376:
+  case 378:
 
     { LOGDBG("YANG: finished parsing case statement \"%s\"", data_node->name);
              actual_type = (yyvsp[-1].backup_token).token;
@@ -6037,7 +5991,7 @@
 
     break;
 
-  case 378:
+  case 380:
 
     { struct lys_iffeature *tmp;
 
@@ -6053,13 +6007,13 @@
 
     break;
 
-  case 379:
+  case 381:
 
     { (yyval.nodes).cs = actual; }
 
     break;
 
-  case 380:
+  case 382:
 
     { actual = (yyvsp[-1].nodes).cs;
                                actual_type = CASE_KEYWORD;
@@ -6067,17 +6021,7 @@
 
     break;
 
-  case 382:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).cs->iffeature, (yyvsp[-1].nodes).cs->iffeature_size);
-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                     actual = (yyvsp[-1].nodes).cs;
-                                     s = NULL;
-                                   }
-
-    break;
-
-  case 383:
+  case 385:
 
     { if ((yyvsp[-1].nodes).cs->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).cs, "status", "case");
@@ -6088,7 +6032,7 @@
 
     break;
 
-  case 384:
+  case 386:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).cs, s, "case", NODE_PRINT)) {
                                         YYABORT;
@@ -6098,7 +6042,7 @@
 
     break;
 
-  case 385:
+  case 387:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).cs, s, "case", NODE_PRINT)) {
                                       YYABORT;
@@ -6108,7 +6052,7 @@
 
     break;
 
-  case 386:
+  case 388:
 
     { actual = (yyvsp[-1].nodes).cs;
                                    actual_type = CASE_KEYWORD;
@@ -6117,7 +6061,7 @@
 
     break;
 
-  case 388:
+  case 390:
 
     { (yyval.backup_token).token = actual_type;
                                      (yyval.backup_token).actual = actual;
@@ -6131,7 +6075,7 @@
 
     break;
 
-  case 389:
+  case 391:
 
     { LOGDBG("YANG: finished parsing anyxml statement \"%s\"", data_node->name);
                actual_type = (yyvsp[-1].backup_token).token;
@@ -6141,7 +6085,7 @@
 
     break;
 
-  case 390:
+  case 392:
 
     { (yyval.backup_token).token = actual_type;
                                       (yyval.backup_token).actual = actual;
@@ -6155,7 +6099,7 @@
 
     break;
 
-  case 391:
+  case 393:
 
     { LOGDBG("YANG: finished parsing anydata statement \"%s\"", data_node->name);
                 actual_type = (yyvsp[-1].backup_token).token;
@@ -6165,7 +6109,7 @@
 
     break;
 
-  case 393:
+  case 395:
 
     { void *tmp;
 
@@ -6190,7 +6134,7 @@
 
     break;
 
-  case 394:
+  case 396:
 
     { (yyval.nodes).node.ptr_anydata = actual;
                               (yyval.nodes).node.flag = actual_type;
@@ -6198,27 +6142,8 @@
 
     break;
 
-  case 395:
-
-    { actual = (yyvsp[-1].nodes).node.ptr_anydata;
-                                 actual_type = (yyvsp[-1].nodes).node.flag;
-                               }
-
-    break;
-
   case 397:
 
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_anydata->iffeature,
-                                                    (yyvsp[-1].nodes).node.ptr_anydata->iffeature_size);
-                                       ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                       actual = (yyvsp[-1].nodes).node.ptr_anydata;
-                                       s = NULL;
-                                     }
-
-    break;
-
-  case 398:
-
     { actual = (yyvsp[-1].nodes).node.ptr_anydata;
                                  actual_type = (yyvsp[-1].nodes).node.flag;
                                }
@@ -6227,6 +6152,14 @@
 
   case 400:
 
+    { actual = (yyvsp[-1].nodes).node.ptr_anydata;
+                                 actual_type = (yyvsp[-1].nodes).node.flag;
+                               }
+
+    break;
+
+  case 402:
+
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_CONFIG_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "config",
                                             ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata");
@@ -6237,7 +6170,7 @@
 
     break;
 
-  case 401:
+  case 403:
 
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_MAND_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "mandatory",
@@ -6249,7 +6182,7 @@
 
     break;
 
-  case 402:
+  case 404:
 
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_STATUS_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "status",
@@ -6261,7 +6194,7 @@
 
     break;
 
-  case 403:
+  case 405:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata", NODE_PRINT)) {
                                           YYABORT;
@@ -6271,7 +6204,7 @@
 
     break;
 
-  case 404:
+  case 406:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata", NODE_PRINT)) {
                                         YYABORT;
@@ -6281,7 +6214,7 @@
 
     break;
 
-  case 405:
+  case 407:
 
     { (yyval.backup_token).token = actual_type;
                                        (yyval.backup_token).actual = actual;
@@ -6295,7 +6228,7 @@
 
     break;
 
-  case 406:
+  case 408:
 
     { LOGDBG("YANG: finished parsing uses statement \"%s\"", data_node->name);
              actual_type = (yyvsp[-1].backup_token).token;
@@ -6305,7 +6238,7 @@
 
     break;
 
-  case 408:
+  case 410:
 
     { void *tmp;
 
@@ -6339,13 +6272,13 @@
 
     break;
 
-  case 409:
+  case 411:
 
     { (yyval.nodes).uses = actual; }
 
     break;
 
-  case 410:
+  case 412:
 
     { actual = (yyvsp[-1].nodes).uses;
                                actual_type = USES_KEYWORD;
@@ -6353,17 +6286,7 @@
 
     break;
 
-  case 412:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).uses->iffeature, (yyvsp[-1].nodes).uses->iffeature_size);
-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                     actual = (yyvsp[-1].nodes).uses;
-                                     s = NULL;
-                                   }
-
-    break;
-
-  case 413:
+  case 415:
 
     { if ((yyvsp[-1].nodes).uses->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).uses, "status", "uses");
@@ -6374,7 +6297,7 @@
 
     break;
 
-  case 414:
+  case 416:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).uses, s, "uses", NODE_PRINT)) {
                                         YYABORT;
@@ -6384,7 +6307,7 @@
 
     break;
 
-  case 415:
+  case 417:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).uses, s, "uses", NODE_PRINT)) {
                                       YYABORT;
@@ -6394,7 +6317,7 @@
 
     break;
 
-  case 416:
+  case 418:
 
     { actual = (yyvsp[-1].nodes).uses;
                                  actual_type = USES_KEYWORD;
@@ -6402,7 +6325,7 @@
 
     break;
 
-  case 418:
+  case 420:
 
     { actual = (yyvsp[-1].nodes).uses;
                                        actual_type = USES_KEYWORD;
@@ -6411,7 +6334,7 @@
 
     break;
 
-  case 422:
+  case 424:
 
     { YANG_ADDELEM(((struct lys_node_uses *)actual)->refine,
                                                ((struct lys_node_uses *)actual)->refine_size);
@@ -6425,7 +6348,7 @@
 
     break;
 
-  case 425:
+  case 427:
 
     { void *tmp;
 
@@ -6460,7 +6383,7 @@
 
     break;
 
-  case 426:
+  case 428:
 
     { (yyval.nodes).refine = actual;
                                     actual_type = REFINE_KEYWORD;
@@ -6468,7 +6391,7 @@
 
     break;
 
-  case 427:
+  case 429:
 
     { actual = (yyvsp[-2].nodes).refine;
                                                actual_type = REFINE_KEYWORD;
@@ -6487,36 +6410,27 @@
 
     break;
 
-  case 428:
+  case 430:
 
-    { if (trg->version < 2) {
-                                               free(s);
-                                               LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");
-                                               YYABORT;
-                                             }
-                                             YANG_ADDELEM((yyvsp[-1].nodes).refine->iffeature, (yyvsp[-1].nodes).refine->iffeature_size);
-                                             ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                             actual = (yyvsp[-1].nodes).refine;
-                                             s = NULL;
-                                             /* leaf, leaf-list, list, container or anyxml */
-                                             /* check possibility of statements combination */
-                                             if ((yyvsp[-1].nodes).refine->target_type) {
-                                               if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA)) {
-                                                 (yyvsp[-1].nodes).refine->target_type &= (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA);
-                                               } else {
-                                                 free(s);
-                                                 LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "if-feature", "refine");
-                                                 LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");
-                                                 YYABORT;
-                                               }
-                                             } else {
-                                               (yyvsp[-1].nodes).refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA;
-                                             }
-                                           }
+    { /* leaf, leaf-list, list, container or anyxml */
+               /* check possibility of statements combination */
+               if ((yyvsp[-2].nodes).refine->target_type) {
+                 if ((yyvsp[-2].nodes).refine->target_type & (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA)) {
+                   (yyvsp[-2].nodes).refine->target_type &= (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA);
+                 } else {
+                   free(s);
+                   LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "if-feature", "refine");
+                   LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");
+                   YYABORT;
+                 }
+               } else {
+                 (yyvsp[-2].nodes).refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA;
+               }
+             }
 
     break;
 
-  case 429:
+  case 431:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                              if ((yyvsp[-1].nodes).refine->target_type & LYS_CONTAINER) {
@@ -6543,7 +6457,7 @@
 
     break;
 
-  case 430:
+  case 432:
 
     { int i;
 
@@ -6599,7 +6513,7 @@
 
     break;
 
-  case 431:
+  case 433:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                            if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_CHOICE | LYS_LIST | LYS_CONTAINER | LYS_LEAFLIST)) {
@@ -6621,7 +6535,7 @@
 
     break;
 
-  case 432:
+  case 434:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                               if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_CHOICE | LYS_ANYXML)) {
@@ -6643,7 +6557,7 @@
 
     break;
 
-  case 433:
+  case 435:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                                  if ((yyvsp[-1].nodes).refine->target_type & (LYS_LIST | LYS_LEAFLIST)) {
@@ -6669,7 +6583,7 @@
 
     break;
 
-  case 434:
+  case 436:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                                  if ((yyvsp[-1].nodes).refine->target_type & (LYS_LIST | LYS_LEAFLIST)) {
@@ -6695,7 +6609,7 @@
 
     break;
 
-  case 435:
+  case 437:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).refine, s, "refine", NODE)) {
                                                 YYABORT;
@@ -6705,7 +6619,7 @@
 
     break;
 
-  case 436:
+  case 438:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).refine, s, "refine", NODE)) {
                                               YYABORT;
@@ -6715,7 +6629,7 @@
 
     break;
 
-  case 439:
+  case 441:
 
     { void *parent;
 
@@ -6734,7 +6648,7 @@
 
     break;
 
-  case 440:
+  case 442:
 
     { LOGDBG("YANG: finished parsing augment statement \"%s\"", data_node->name);
                          actual_type = (yyvsp[-4].backup_token).token;
@@ -6744,7 +6658,7 @@
 
     break;
 
-  case 443:
+  case 445:
 
     { (yyval.backup_token).token = actual_type;
                                (yyval.backup_token).actual = actual;
@@ -6759,7 +6673,7 @@
 
     break;
 
-  case 444:
+  case 446:
 
     { LOGDBG("YANG: finished parsing augment statement \"%s\"", data_node->name);
                     actual_type = (yyvsp[-4].backup_token).token;
@@ -6769,13 +6683,13 @@
 
     break;
 
-  case 445:
+  case 447:
 
     { (yyval.nodes).augment = actual; }
 
     break;
 
-  case 446:
+  case 448:
 
     { actual = (yyvsp[-1].nodes).augment;
                                   actual_type = AUGMENT_KEYWORD;
@@ -6783,17 +6697,7 @@
 
     break;
 
-  case 448:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).augment->iffeature, (yyvsp[-1].nodes).augment->iffeature_size);
-                                        ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                        actual = (yyvsp[-1].nodes).augment;
-                                        s = NULL;
-                                      }
-
-    break;
-
-  case 449:
+  case 451:
 
     { if ((yyvsp[-1].nodes).augment->flags & LYS_STATUS_MASK) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).augment, "status", "augment");
@@ -6804,7 +6708,7 @@
 
     break;
 
-  case 450:
+  case 452:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).augment, s, "augment", NODE_PRINT)) {
                                            YYABORT;
@@ -6814,7 +6718,7 @@
 
     break;
 
-  case 451:
+  case 453:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).augment, s, "augment", NODE_PRINT)) {
                                          YYABORT;
@@ -6824,7 +6728,7 @@
 
     break;
 
-  case 452:
+  case 454:
 
     { actual = (yyvsp[-1].nodes).augment;
                                       actual_type = AUGMENT_KEYWORD;
@@ -6833,7 +6737,7 @@
 
     break;
 
-  case 454:
+  case 456:
 
     { actual = (yyvsp[-1].nodes).augment;
                                     actual_type = AUGMENT_KEYWORD;
@@ -6842,7 +6746,7 @@
 
     break;
 
-  case 456:
+  case 458:
 
     { actual = (yyvsp[-1].nodes).augment;
                                           actual_type = AUGMENT_KEYWORD;
@@ -6855,7 +6759,7 @@
 
     break;
 
-  case 458:
+  case 460:
 
     { actual = (yyvsp[-1].nodes).augment;
                                   actual_type = AUGMENT_KEYWORD;
@@ -6864,7 +6768,7 @@
 
     break;
 
-  case 460:
+  case 462:
 
     { if (param->module->version != 2) {
                                        LOGVAL(LYE_INSTMT, LY_VLOG_LYS, actual, "action");
@@ -6883,7 +6787,7 @@
 
     break;
 
-  case 461:
+  case 463:
 
     { LOGDBG("YANG: finished parsing action statement \"%s\"", data_node->name);
                actual_type = (yyvsp[-1].backup_token).token;
@@ -6893,7 +6797,7 @@
 
     break;
 
-  case 462:
+  case 464:
 
     { (yyval.backup_token).token = actual_type;
                                   (yyval.backup_token).actual = actual;
@@ -6907,7 +6811,7 @@
 
     break;
 
-  case 463:
+  case 465:
 
     { LOGDBG("YANG: finished parsing rpc statement \"%s\"", data_node->name);
             actual_type = (yyvsp[-1].backup_token).token;
@@ -6917,7 +6821,7 @@
 
     break;
 
-  case 465:
+  case 467:
 
     { void *tmp;
 
@@ -6942,7 +6846,7 @@
 
     break;
 
-  case 466:
+  case 468:
 
     { (yyval.nodes).node.ptr_rpc = actual;
                            (yyval.nodes).node.flag = 0;
@@ -6950,18 +6854,7 @@
 
     break;
 
-  case 467:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_rpc->iffeature,
-                                                 (yyvsp[-1].nodes).node.ptr_rpc->iffeature_size);
-                                    ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                    actual = (yyvsp[-1].nodes).node.ptr_rpc;
-                                    s = NULL;
-                                  }
-
-    break;
-
-  case 468:
+  case 470:
 
     { if ((yyvsp[-1].nodes).node.ptr_rpc->flags & LYS_STATUS_MASK) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_rpc, "status", "rpc");
@@ -6972,7 +6865,7 @@
 
     break;
 
-  case 469:
+  case 471:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc", NODE_PRINT)) {
                                        YYABORT;
@@ -6982,7 +6875,7 @@
 
     break;
 
-  case 470:
+  case 472:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc", NODE_PRINT)) {
                                      YYABORT;
@@ -6992,7 +6885,7 @@
 
     break;
 
-  case 471:
+  case 473:
 
     { actual = (yyvsp[-1].nodes).node.ptr_rpc;
                                  actual_type = RPC_KEYWORD;
@@ -7000,7 +6893,7 @@
 
     break;
 
-  case 473:
+  case 475:
 
     { actual = (yyvsp[-1].nodes).node.ptr_rpc;
                                   actual_type = RPC_KEYWORD;
@@ -7009,7 +6902,7 @@
 
     break;
 
-  case 475:
+  case 477:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_RPC_INPUT) {
                                  LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_rpc, "input", "rpc");
@@ -7023,13 +6916,13 @@
 
     break;
 
-  case 476:
+  case 478:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 477:
+  case 479:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_RPC_OUTPUT) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_rpc, "output", "rpc");
@@ -7043,13 +6936,13 @@
 
     break;
 
-  case 478:
+  case 480:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 479:
+  case 481:
 
     { (yyval.backup_token).token = actual_type;
                                   (yyval.backup_token).actual = actual;
@@ -7068,7 +6961,7 @@
 
     break;
 
-  case 480:
+  case 482:
 
     { void *tmp;
 
@@ -7098,7 +6991,7 @@
 
     break;
 
-  case 481:
+  case 483:
 
     { (yyval.nodes).inout = actual;
                                     actual_type = INPUT_KEYWORD;
@@ -7106,7 +6999,7 @@
 
     break;
 
-  case 482:
+  case 484:
 
     { actual = (yyvsp[-1].nodes).inout;
                                        actual_type = INPUT_KEYWORD;
@@ -7114,7 +7007,7 @@
 
     break;
 
-  case 484:
+  case 486:
 
     { actual = (yyvsp[-1].nodes).inout;
                                           actual_type = INPUT_KEYWORD;
@@ -7122,15 +7015,6 @@
 
     break;
 
-  case 486:
-
-    { actual = (yyvsp[-1].nodes).inout;
-                                           actual_type = INPUT_KEYWORD;
-                                           data_node = actual;
-                                         }
-
-    break;
-
   case 488:
 
     { actual = (yyvsp[-1].nodes).inout;
@@ -7142,6 +7026,15 @@
 
   case 490:
 
+    { actual = (yyvsp[-1].nodes).inout;
+                                           actual_type = INPUT_KEYWORD;
+                                           data_node = actual;
+                                         }
+
+    break;
+
+  case 492:
+
     { (yyval.backup_token).token = actual_type;
                                     (yyval.backup_token).actual = actual;
                                     s = strdup("output");
@@ -7159,7 +7052,7 @@
 
     break;
 
-  case 491:
+  case 493:
 
     { void *tmp;
 
@@ -7189,7 +7082,7 @@
 
     break;
 
-  case 492:
+  case 494:
 
     { (yyval.backup_token).token = actual_type;
                                            (yyval.backup_token).actual = actual;
@@ -7202,7 +7095,7 @@
 
     break;
 
-  case 493:
+  case 495:
 
     { LOGDBG("YANG: finished parsing notification statement \"%s\"", data_node->name);
                      actual_type = (yyvsp[-1].backup_token).token;
@@ -7212,7 +7105,7 @@
 
     break;
 
-  case 495:
+  case 497:
 
     { void *tmp;
 
@@ -7246,7 +7139,7 @@
 
     break;
 
-  case 496:
+  case 498:
 
     { (yyval.nodes).notif = actual;
                                     actual_type = NOTIFICATION_KEYWORD;
@@ -7254,7 +7147,7 @@
 
     break;
 
-  case 497:
+  case 499:
 
     { actual = (yyvsp[-1].nodes).notif;
                                        actual_type = NOTIFICATION_KEYWORD;
@@ -7262,17 +7155,7 @@
 
     break;
 
-  case 499:
-
-    { YANG_ADDELEM((yyvsp[-1].nodes).notif->iffeature, (yyvsp[-1].nodes).notif->iffeature_size);
-                                             ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
-                                             actual = (yyvsp[-1].nodes).notif;
-                                             s = NULL;
-                                           }
-
-    break;
-
-  case 500:
+  case 502:
 
     { if ((yyvsp[-1].nodes).notif->flags & LYS_STATUS_MASK) {
                                            LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).notif, "status", "notification");
@@ -7283,7 +7166,7 @@
 
     break;
 
-  case 501:
+  case 503:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).notif, s, "notification", NODE_PRINT)) {
                                                 YYABORT;
@@ -7293,7 +7176,7 @@
 
     break;
 
-  case 502:
+  case 504:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).notif, s, "notification", NODE_PRINT)) {
                                               YYABORT;
@@ -7303,7 +7186,7 @@
 
     break;
 
-  case 503:
+  case 505:
 
     { actual = (yyvsp[-1].nodes).notif;
                                           actual_type = NOTIFICATION_KEYWORD;
@@ -7311,15 +7194,6 @@
 
     break;
 
-  case 505:
-
-    { actual = (yyvsp[-1].nodes).notif;
-                                           actual_type = NOTIFICATION_KEYWORD;
-                                           data_node = actual;
-                                         }
-
-    break;
-
   case 507:
 
     { actual = (yyvsp[-1].nodes).notif;
@@ -7331,6 +7205,15 @@
 
   case 509:
 
+    { actual = (yyvsp[-1].nodes).notif;
+                                           actual_type = NOTIFICATION_KEYWORD;
+                                           data_node = actual;
+                                         }
+
+    break;
+
+  case 511:
+
     { YANG_ADDELEM(trg->deviation, trg->deviation_size);
                                    ((struct lys_deviation *)actual)->target_name = transform_schema2json(trg, s);
                                    free(s);
@@ -7342,7 +7225,7 @@
 
     break;
 
-  case 510:
+  case 512:
 
     { void *tmp;
 
@@ -7361,7 +7244,7 @@
 
     break;
 
-  case 511:
+  case 513:
 
     { (yyval.dev) = actual;
                                  actual_type = DEVIATION_KEYWORD;
@@ -7369,7 +7252,7 @@
 
     break;
 
-  case 512:
+  case 514:
 
     { if (yang_read_description(trg, (yyvsp[-1].dev), s, "deviation", NODE)) {
                                              YYABORT;
@@ -7380,7 +7263,7 @@
 
     break;
 
-  case 513:
+  case 515:
 
     { if (yang_read_reference(trg, (yyvsp[-1].dev), s, "deviation", NODE)) {
                                            YYABORT;
@@ -7391,7 +7274,7 @@
 
     break;
 
-  case 514:
+  case 516:
 
     { actual = (yyvsp[-3].dev);
                                                                 actual_type = DEVIATION_KEYWORD;
@@ -7400,7 +7283,7 @@
 
     break;
 
-  case 517:
+  case 519:
 
     { if (yang_read_deviate_unsupported(actual)) {
                        YYABORT;
@@ -7409,7 +7292,7 @@
 
     break;
 
-  case 519:
+  case 521:
 
     {  backup_type = actual_type;
                                                 actual_type = NOT_SUPPORTED_KEYWORD;
@@ -7417,7 +7300,7 @@
 
     break;
 
-  case 524:
+  case 526:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_ADD))) {
                                          YYABORT;
@@ -7426,7 +7309,7 @@
 
     break;
 
-  case 527:
+  case 529:
 
     { void *tmp;
 
@@ -7460,7 +7343,7 @@
 
     break;
 
-  case 528:
+  case 530:
 
     { (yyval.deviate) = actual;
                                    actual_type = ADD_KEYWORD;
@@ -7468,7 +7351,7 @@
 
     break;
 
-  case 529:
+  case 531:
 
     { if (yang_read_units(trg, actual, s, ADD_KEYWORD)) {
                                          YYABORT;
@@ -7479,7 +7362,7 @@
 
     break;
 
-  case 530:
+  case 532:
 
     { actual = (yyvsp[-2].deviate);
                                               actual_type = ADD_KEYWORD;
@@ -7488,7 +7371,7 @@
 
     break;
 
-  case 531:
+  case 533:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->unique, (yyvsp[-1].deviate)->unique_size);
                                         ((struct lys_unique *)actual)->expr = (const char **)s;
@@ -7499,7 +7382,7 @@
 
     break;
 
-  case 532:
+  case 534:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                          *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7510,7 +7393,7 @@
 
     break;
 
-  case 533:
+  case 535:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_CONFIG_MASK) {
                                           LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "config", "deviate");
@@ -7522,7 +7405,7 @@
 
     break;
 
-  case 534:
+  case 536:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_MAND_MASK) {
                                              LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "mandatory", "deviate");
@@ -7534,7 +7417,7 @@
 
     break;
 
-  case 535:
+  case 537:
 
     { if ((yyvsp[-1].deviate)->min_set) {
                                                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "min-elements", "deviation");
@@ -7547,7 +7430,7 @@
 
     break;
 
-  case 536:
+  case 538:
 
     { if ((yyvsp[-1].deviate)->max_set) {
                                                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "max-elements", "deviation");
@@ -7560,7 +7443,7 @@
 
     break;
 
-  case 537:
+  case 539:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_DEL))) {
                                                YYABORT;
@@ -7569,7 +7452,7 @@
 
     break;
 
-  case 540:
+  case 542:
 
     { void *tmp;
 
@@ -7603,7 +7486,7 @@
 
     break;
 
-  case 541:
+  case 543:
 
     { (yyval.deviate) = actual;
                                       actual_type = DELETE_KEYWORD;
@@ -7611,7 +7494,7 @@
 
     break;
 
-  case 542:
+  case 544:
 
     { if (yang_read_units(trg, actual, s, DELETE_KEYWORD)) {
                                             YYABORT;
@@ -7622,7 +7505,7 @@
 
     break;
 
-  case 543:
+  case 545:
 
     { actual = (yyvsp[-2].deviate);
                                                  actual_type = DELETE_KEYWORD;
@@ -7631,7 +7514,7 @@
 
     break;
 
-  case 544:
+  case 546:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->unique, (yyvsp[-1].deviate)->unique_size);
                                            ((struct lys_unique *)actual)->expr = (const char **)s;
@@ -7642,7 +7525,7 @@
 
     break;
 
-  case 545:
+  case 547:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                             *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7653,7 +7536,7 @@
 
     break;
 
-  case 546:
+  case 548:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_RPL))) {
                                                  YYABORT;
@@ -7662,7 +7545,7 @@
 
     break;
 
-  case 549:
+  case 551:
 
     { void *tmp;
 
@@ -7678,7 +7561,7 @@
 
     break;
 
-  case 550:
+  case 552:
 
     { (yyval.deviate) = actual;
                                        actual_type = REPLACE_KEYWORD;
@@ -7686,7 +7569,7 @@
 
     break;
 
-  case 551:
+  case 553:
 
     { actual = (yyvsp[-2].deviate);
                                                   actual_type = REPLACE_KEYWORD;
@@ -7694,7 +7577,7 @@
 
     break;
 
-  case 552:
+  case 554:
 
     { if (yang_read_units(trg, actual, s, DELETE_KEYWORD)) {
                                              YYABORT;
@@ -7705,7 +7588,7 @@
 
     break;
 
-  case 553:
+  case 555:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                              *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7716,7 +7599,7 @@
 
     break;
 
-  case 554:
+  case 556:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_CONFIG_MASK) {
                                               LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "config", "deviate");
@@ -7728,7 +7611,7 @@
 
     break;
 
-  case 555:
+  case 557:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_MAND_MASK) {
                                                  LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "mandatory", "deviate");
@@ -7740,7 +7623,7 @@
 
     break;
 
-  case 556:
+  case 558:
 
     { if ((yyvsp[-1].deviate)->min_set) {
                                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "min-elements", "deviation");
@@ -7753,7 +7636,7 @@
 
     break;
 
-  case 557:
+  case 559:
 
     { if ((yyvsp[-1].deviate)->max_set) {
                                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "max-elements", "deviation");
@@ -7766,7 +7649,7 @@
 
     break;
 
-  case 558:
+  case 560:
 
     { if (!(actual=yang_read_when(trg, actual, actual_type, s))) {
                           YYABORT;
@@ -7777,7 +7660,7 @@
 
     break;
 
-  case 563:
+  case 565:
 
     { if (yang_read_description(trg, actual, s, "when", NODE)) {
                                         YYABORT;
@@ -7787,7 +7670,7 @@
 
     break;
 
-  case 564:
+  case 566:
 
     { if (yang_read_reference(trg, actual, s, "when", NODE)) {
                                       YYABORT;
@@ -7797,7 +7680,7 @@
 
     break;
 
-  case 565:
+  case 567:
 
     { (yyval.i) = (yyvsp[0].i);
                              backup_type = actual_type;
@@ -7806,25 +7689,25 @@
 
     break;
 
-  case 566:
+  case 568:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 567:
+  case 569:
 
     { (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET; }
 
     break;
 
-  case 568:
+  case 570:
 
     { (yyval.i) = LYS_CONFIG_R | LYS_CONFIG_SET; }
 
     break;
 
-  case 569:
+  case 571:
 
     { if (!strcmp(s, "true")) {
                   (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET;
@@ -7841,7 +7724,7 @@
 
     break;
 
-  case 570:
+  case 572:
 
     { (yyval.i) = (yyvsp[0].i);
                                    backup_type = actual_type;
@@ -7850,25 +7733,25 @@
 
     break;
 
-  case 571:
+  case 573:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 572:
+  case 574:
 
     { (yyval.i) = LYS_MAND_TRUE; }
 
     break;
 
-  case 573:
+  case 575:
 
     { (yyval.i) = LYS_MAND_FALSE; }
 
     break;
 
-  case 574:
+  case 576:
 
     { if (!strcmp(s, "true")) {
                   (yyval.i) = LYS_MAND_TRUE;
@@ -7885,7 +7768,7 @@
 
     break;
 
-  case 575:
+  case 577:
 
     { backup_type = actual_type;
                        actual_type = PRESENCE_KEYWORD;
@@ -7893,7 +7776,7 @@
 
     break;
 
-  case 577:
+  case 579:
 
     { (yyval.uint) = (yyvsp[0].uint);
                                    backup_type = actual_type;
@@ -7902,20 +7785,20 @@
 
     break;
 
-  case 578:
-
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
-  case 579:
-
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
   case 580:
 
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
+  case 581:
+
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
+  case 582:
+
     { if (strlen(s) == 1 && s[0] == '0') {
                   (yyval.uint) = 0;
                 } else {
@@ -7938,7 +7821,7 @@
 
     break;
 
-  case 581:
+  case 583:
 
     { (yyval.uint) = (yyvsp[0].uint);
                                    backup_type = actual_type;
@@ -7947,18 +7830,6 @@
 
     break;
 
-  case 582:
-
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
-  case 583:
-
-    { (yyval.uint) = 0; }
-
-    break;
-
   case 584:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
@@ -7967,6 +7838,18 @@
 
   case 585:
 
+    { (yyval.uint) = 0; }
+
+    break;
+
+  case 586:
+
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
+  case 587:
+
     { if (!strcmp(s, "unbounded")) {
                   (yyval.uint) = 0;
                 } else {
@@ -7989,7 +7872,7 @@
 
     break;
 
-  case 586:
+  case 588:
 
     { (yyval.i) = (yyvsp[0].i);
                                      backup_type = actual_type;
@@ -7998,25 +7881,25 @@
 
     break;
 
-  case 587:
+  case 589:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 588:
+  case 590:
 
     { (yyval.i) = LYS_USERORDERED; }
 
     break;
 
-  case 589:
+  case 591:
 
     { (yyval.i) = LYS_SYSTEMORDERED; }
 
     break;
 
-  case 590:
+  case 592:
 
     { if (!strcmp(s, "user")) {
                   (yyval.i) = LYS_USERORDERED;
@@ -8032,7 +7915,7 @@
 
     break;
 
-  case 591:
+  case 593:
 
     { switch (actual_type) {
                        case CONTAINER_KEYWORD:
@@ -8099,7 +7982,7 @@
 
     break;
 
-  case 595:
+  case 597:
 
     { backup_type = actual_type;
                              actual_type = UNIQUE_KEYWORD;
@@ -8107,7 +7990,7 @@
 
     break;
 
-  case 601:
+  case 603:
 
     { backup_type = actual_type;
                        actual_type = KEY_KEYWORD;
@@ -8115,7 +7998,7 @@
 
     break;
 
-  case 603:
+  case 605:
 
     { s = strdup(yyget_text(scanner));
                                if (!s) {
@@ -8126,7 +8009,7 @@
 
     break;
 
-  case 606:
+  case 608:
 
     { (yyval.v) = actual;
                         if (!(actual = yang_read_range(trg, actual, s))) {
@@ -8138,7 +8021,7 @@
 
     break;
 
-  case 607:
+  case 609:
 
     { if (s) {
                                                 s = ly_realloc(s,strlen(s) + yyget_leng(scanner) + 2);
@@ -8161,7 +8044,7 @@
 
     break;
 
-  case 611:
+  case 613:
 
     { if (s) {
                                               s = ly_realloc(s,strlen(s) + yyget_leng(scanner) + 1);
@@ -8181,13 +8064,13 @@
 
     break;
 
-  case 613:
+  case 615:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 614:
+  case 616:
 
     { s = strdup(tmp_s);
                                                                 if (!s) {
@@ -8199,13 +8082,13 @@
 
     break;
 
-  case 615:
+  case 617:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 616:
+  case 618:
 
     { s = strdup(tmp_s);
                                                       if (!s) {
@@ -8217,7 +8100,7 @@
 
     break;
 
-  case 640:
+  case 642:
 
     { /* convert it to uint32_t */
                                                 unsigned long val;
@@ -8232,25 +8115,25 @@
 
     break;
 
-  case 641:
+  case 643:
 
     { (yyval.uint) = 0; }
 
     break;
 
-  case 642:
+  case 644:
 
     { (yyval.uint) = (yyvsp[0].uint); }
 
     break;
 
-  case 643:
+  case 645:
 
     { (yyval.i) = 0; }
 
     break;
 
-  case 644:
+  case 646:
 
     { /* convert it to int32_t */
                              int64_t val;
@@ -8265,7 +8148,7 @@
 
     break;
 
-  case 650:
+  case 652:
 
     { if (lyp_check_identifier(s, LY_IDENT_SIMPLE, trg, NULL)) {
                     free(s);
@@ -8275,7 +8158,7 @@
 
     break;
 
-  case 655:
+  case 657:
 
     { char *tmp;
 
@@ -8303,19 +8186,19 @@
 
     break;
 
-  case 656:
+  case 658:
 
     { s = (yyvsp[-1].str); }
 
     break;
 
-  case 657:
+  case 659:
 
     { s = (yyvsp[-3].str); }
 
     break;
 
-  case 658:
+  case 660:
 
     { actual_type = backup_type;
                  backup_type = NODE;
@@ -8325,7 +8208,7 @@
 
     break;
 
-  case 659:
+  case 661:
 
     { actual_type = backup_type;
                            backup_type = NODE;
@@ -8333,7 +8216,7 @@
 
     break;
 
-  case 660:
+  case 662:
 
     { (yyval.str) = s;
                           s = NULL;
@@ -8341,7 +8224,7 @@
 
     break;
 
-  case 665:
+  case 667:
 
     { if (!yang_read_ext(trg, actual, (yyvsp[-1].str), s, actual_type, backup_type)) {
                                                   YYABORT;
@@ -8351,13 +8234,13 @@
 
     break;
 
-  case 666:
+  case 668:
 
     { (yyval.str) = s; s = NULL; }
 
     break;
 
-  case 682:
+  case 684:
 
     { s = strdup(yyget_text(scanner));
                   if (!s) {
@@ -8368,7 +8251,7 @@
 
     break;
 
-  case 773:
+  case 775:
 
     { s = strdup(yyget_text(scanner));
                           if (!s) {
@@ -8379,7 +8262,7 @@
 
     break;
 
-  case 774:
+  case 776:
 
     { s = strdup(yyget_text(scanner));
                                     if (!s) {
diff --git a/src/yang.y.in b/src/yang.y.in
index 8fd05db..86193b0 100644
--- a/src/yang.y.in
+++ b/src/yang.y.in
@@ -280,6 +280,8 @@
 %type <backup_token> notification_arg_str

 %type <backup_token> extension_arg_str

 %type <backup_token> feature_arg_str

+%type <backup_token> identity_arg_str

+%type <backup_token> if_feature_arg

 

 %destructor { free($$); } pattern_arg_str string_opt_part1 semicolom curly_bracket_open

 %destructor { free(($$) ? *$$ : NULL); } tmp_string

@@ -915,15 +917,7 @@
         }

 

 feature_opt_stmt: @EMPTYDIR@

-  |  feature_opt_stmt if_feature_stmt { void *feature;

-

-                                        feature = actual;

-                                        YANG_ADDELEM(((struct lys_feature *)actual)->iffeature,

-                                                     ((struct lys_feature *)actual)->iffeature_size);

-                                        ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;

-                                        s = NULL;

-                                        actual = feature;

-                                      }

+  |  feature_opt_stmt if_feature_stmt stmtsep

   |  feature_opt_stmt status_stmt { if (((struct lys_feature *)actual)->flags & LYS_STATUS_MASK) {

                                       LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "feature");

                                       YYABORT;

@@ -941,11 +935,67 @@
                                        s = NULL;

                                      }

 

-if_feature_arg: string { backup_type = actual_type;

+if_feature_arg: string { $$.token = actual_type;

+                         $$.actual = actual;

+                         switch (actual_type) {

+                         case FEATURE_KEYWORD:

+                           YANG_ADDELEM(((struct lys_feature *)actual)->iffeature,

+                                        ((struct lys_feature *)actual)->iffeature_size);

+                           break;

+                         case IDENTITY_KEYWORD:

+                           if (trg->version < 2) {

+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "identity");

+                             free(s);

+                             YYABORT;

+                           }

+                           YANG_ADDELEM(((struct lys_ident *)actual)->iffeature,

+                                        ((struct lys_ident *)actual)->iffeature_size);

+                           break;

+                         case ENUM_KEYWORD:

+                           if (trg->version < 2) {

+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");

+                             free(s);

+                             YYABORT;

+                           }

+                           YANG_ADDELEM(((struct lys_type_enum *)actual)->iffeature,

+                                        ((struct lys_type_enum *)actual)->iffeature_size);

+                           break;

+                         case BIT_KEYWORD:

+                           if (trg->version < 2) {

+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "bit");

+                             free(s);

+                             YYABORT;

+                           }

+                           YANG_ADDELEM(((struct lys_type_bit *)actual)->iffeature,

+                                        ((struct lys_type_bit *)actual)->iffeature_size);

+                           break;

+                         case REFINE_KEYWORD:

+                           if (trg->version < 2) {

+                             LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");

+                             free(s);

+                             YYABORT;

+                           }

+                           YANG_ADDELEM(((struct lys_refine *)actual)->iffeature,

+                                        ((struct lys_refine *)actual)->iffeature_size);

+                           break;

+                         default:

+                           /* lys_node_* */

+                           YANG_ADDELEM(((struct lys_node *)actual)->iffeature,

+                                        ((struct lys_node *)actual)->iffeature_size);

+                           break;

+                         }

+                         ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;

+                         s = NULL;

                          actual_type = IF_FEATURE_KEYWORD;

                        }

 

-if_feature_stmt: IF_FEATURE_KEYWORD sep if_feature_arg stmtend;

+if_feature_stmt: IF_FEATURE_KEYWORD sep if_feature_arg if_feature_end

+                 { actual = $3.actual;

+                   actual_type = $3.token;

+                 }

+

+if_feature_end: ';'

+  | '{' stmtsep '}'

 

 identity_arg_str: identifier_arg_str { const char *tmp;

 

@@ -955,12 +1005,18 @@
                                          lydict_remove(trg->ctx, tmp);

                                          YYABORT;

                                        }

+                                       $$.token = actual_type;

+                                       $$.actual = actual;

                                        YANG_ADDELEM(trg->ident, trg->ident_size);

                                        ((struct lys_ident *)actual)->name = tmp;

                                        ((struct lys_ident *)actual)->module = trg;

+                                       actual_type = IDENTITY_KEYWORD;

                                      }

 

-identity_stmt: IDENTITY_KEYWORD sep identity_arg_str identity_end;

+identity_stmt: IDENTITY_KEYWORD sep identity_arg_str identity_end

+               { actual = $3.actual;

+                 actual_type = $3.token;

+               }

 

 identity_end: ';'

   |  '{' stmtsep

@@ -1003,19 +1059,7 @@
                                    s = NULL;

                                    actual = identity;

                                  }

-  |  identity_opt_stmt if_feature_stmt { void *identity;

-

-                                         if (trg->version < 2) {

-                                           LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "identity");

-                                           YYABORT;

-                                         }

-                                         identity = actual;

-                                         YANG_ADDELEM(((struct lys_ident *)actual)->iffeature,

-                                                      ((struct lys_ident *)actual)->iffeature_size);

-                                         ((struct lys_iffeature *)actual)->features = (struct lys_feature **)s;

-                                         s = NULL;

-                                         actual = identity;

-                                       }

+  |  identity_opt_stmt if_feature_stmt stmtsep

   |  identity_opt_stmt status_stmt { if (((struct lys_ident *)actual)->flags & LYS_STATUS_MASK) {

                                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "identity");

                                        YYABORT;

@@ -1415,6 +1459,7 @@
                        }

                        s = NULL;

                        is_value = 0;

+                       actual_type = ENUM_KEYWORD;

                      }

 

 enum_end: ';'

@@ -1434,18 +1479,7 @@
          }

 

 enum_opt_stmt: @EMPTYDIR@

-  |  enum_opt_stmt if_feature_stmt { if (trg->version < 2) {

-                                       LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");

-                                       free(s);

-                                       YYABORT;

-                                     }

-                                     $$ = actual;

-                                     YANG_ADDELEM(((struct lys_type_enum *)actual)->iffeature,

-                                                  ((struct lys_type_enum *)actual)->iffeature_size);

-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                     actual = $$;

-                                     s = NULL;

-                                   }

+  |  enum_opt_stmt if_feature_stmt stmtsep

   |  enum_opt_stmt value_stmt { if (is_value) {

                                   LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "value", "enum");

                                   YYABORT;

@@ -1568,6 +1602,7 @@
                                   }

                                   s = NULL;

                                   is_value = 0;

+                                  actual_type = BIT_KEYWORD;

                                 }

 

 bit_end: ';'

@@ -1587,18 +1622,7 @@
          }

 

 bit_opt_stmt: @EMPTYDIR@

-  |  bit_opt_stmt if_feature_stmt { if (trg->version < 2) {

-                                      LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "bit");

-                                      free(s);

-                                      YYABORT;

-                                    }

-                                    $$ = actual;

-                                    YANG_ADDELEM(((struct lys_type_bit *)actual)->iffeature,

-                                                 ((struct lys_type_bit *)actual)->iffeature_size);

-                                    ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                    actual = $$;

-                                    s = NULL;

-                                  }

+  |  bit_opt_stmt if_feature_stmt stmtsep

   |  bit_opt_stmt position_stmt { if (is_value) {

                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "position", "bit");

                                     YYABORT;

@@ -1791,11 +1815,7 @@
                                     actual_type = CONTAINER_KEYWORD;

                                   }

      stmtsep

-  |  container_opt_stmt if_feature_stmt { YANG_ADDELEM($1.container->iffeature, $1.container->iffeature_size);

-                                          ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                          actual = $1.container;

-                                          s = NULL;

-                                        }

+  |  container_opt_stmt if_feature_stmt stmtsep

   |  container_opt_stmt must_stmt { actual = $1.container;

                                     actual_type = CONTAINER_KEYWORD;

                                   }

@@ -1913,11 +1933,7 @@
                                actual_type = LEAF_KEYWORD;

                              }

        stmtsep

-  |  leaf_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_leaf->iffeature, $1.node.ptr_leaf->iffeature_size);

-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                     actual = $1.node.ptr_leaf;

-                                     s = NULL;

-                                   }

+  |  leaf_opt_stmt if_feature_stmt stmtsep

   |  leaf_opt_stmt type_stmt { actual = $1.node.ptr_leaf;

                                actual_type = LEAF_KEYWORD;

                                $1.node.flag |= LYS_TYPE_DEF;

@@ -2038,12 +2054,7 @@
                                     actual_type = LEAF_LIST_KEYWORD;

                                   }

      stmtsep

-  |  leaf_list_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_leaflist->iffeature,

-                                                       $1.node.ptr_leaflist->iffeature_size);

-                                          ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                          actual = $1.node.ptr_leaflist;

-                                          s = NULL;

-                                        }

+  |  leaf_list_opt_stmt if_feature_stmt stmtsep

   |  leaf_list_opt_stmt type_stmt { actual = $1.node.ptr_leaflist;

                                     actual_type = LEAF_LIST_KEYWORD;

                                     $1.node.flag |= LYS_TYPE_DEF;

@@ -2192,12 +2203,7 @@
                                actual_type = LIST_KEYWORD;

                              }

      stmtsep

-  |  list_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_list->iffeature,

-                                                  $1.node.ptr_list->iffeature_size);

-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                     actual = $1.node.ptr_list;

-                                     s = NULL;

-                                   }

+  |  list_opt_stmt if_feature_stmt stmtsep

   |  list_opt_stmt must_stmt { actual = $1.node.ptr_list;

                                actual_type = LIST_KEYWORD;

                              }

@@ -2350,12 +2356,7 @@
                                  actual_type = CHOICE_KEYWORD;

                                }

      stmtsep { $$ = $1; }

-  |  choice_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_choice->iffeature,

-                                                    $1.node.ptr_choice->iffeature_size);

-                                       ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                       actual = $1.node.ptr_choice;

-                                       s = NULL;

-                                     }

+  |  choice_opt_stmt if_feature_stmt stmtsep

   |  choice_opt_stmt default_stmt { if ($1.node.flag & LYS_CHOICE_DEFAULT) {

                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.node.ptr_choice, "default", "choice");

                                       free(s);

@@ -2459,11 +2460,7 @@
                                actual_type = CASE_KEYWORD;

                              }

      stmtsep

-  |  case_opt_stmt if_feature_stmt { YANG_ADDELEM($1.cs->iffeature, $1.cs->iffeature_size);

-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                     actual = $1.cs;

-                                     s = NULL;

-                                   }

+  |  case_opt_stmt if_feature_stmt stmtsep

   |  case_opt_stmt status_stmt { if ($1.cs->flags & LYS_STATUS_MASK) {

                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.cs, "status", "case");

                                    YYABORT;

@@ -2552,12 +2549,7 @@
                                  actual_type = $1.node.flag;

                                }

      stmtsep

-  |  anyxml_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_anydata->iffeature,

-                                                    $1.node.ptr_anydata->iffeature_size);

-                                       ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                       actual = $1.node.ptr_anydata;

-                                       s = NULL;

-                                     }

+  |  anyxml_opt_stmt if_feature_stmt stmtsep

   |  anyxml_opt_stmt must_stmt { actual = $1.node.ptr_anydata;

                                  actual_type = $1.node.flag;

                                }

@@ -2649,11 +2641,7 @@
                                actual_type = USES_KEYWORD;

                              }

      stmtsep

-  |  uses_opt_stmt if_feature_stmt { YANG_ADDELEM($1.uses->iffeature, $1.uses->iffeature_size);

-                                     ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                     actual = $1.uses;

-                                     s = NULL;

-                                   }

+  |  uses_opt_stmt if_feature_stmt stmtsep

   |  uses_opt_stmt status_stmt { if ($1.uses->flags & LYS_STATUS_MASK) {

                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.uses, "status", "uses");

                                    YYABORT;

@@ -2747,30 +2735,22 @@
                                                  $1.refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYXML;

                                                }

                                              }

-  |  refine_body_opt_stmts if_feature_stmt { if (trg->version < 2) {

-                                               free(s);

-                                               LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");

-                                               YYABORT;

-                                             }

-                                             YANG_ADDELEM($1.refine->iffeature, $1.refine->iffeature_size);

-                                             ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                             actual = $1.refine;

-                                             s = NULL;

-                                             /* leaf, leaf-list, list, container or anyxml */

-                                             /* check possibility of statements combination */

-                                             if ($1.refine->target_type) {

-                                               if ($1.refine->target_type & (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA)) {

-                                                 $1.refine->target_type &= (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA);

-                                               } else {

-                                                 free(s);

-                                                 LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "if-feature", "refine");

-                                                 LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");

-                                                 YYABORT;

-                                               }

-                                             } else {

-                                               $1.refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA;

-                                             }

-                                           }

+  |  refine_body_opt_stmts if_feature_stmt

+     stmtsep { /* leaf, leaf-list, list, container or anyxml */

+               /* check possibility of statements combination */

+               if ($1.refine->target_type) {

+                 if ($1.refine->target_type & (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA)) {

+                   $1.refine->target_type &= (LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA);

+                 } else {

+                   free(s);

+                   LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "if-feature", "refine");

+                   LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Invalid refine target nodetype for the substatements.");

+                   YYABORT;

+                 }

+               } else {

+                 $1.refine->target_type = LYS_LEAF | LYS_LIST | LYS_LEAFLIST | LYS_CONTAINER | LYS_ANYDATA;

+               }

+             }

   |  refine_body_opt_stmts presence_stmt { if ($1.refine->target_type) {

                                              if ($1.refine->target_type & LYS_CONTAINER) {

                                                if ($1.refine->mod.presence) {

@@ -2987,11 +2967,7 @@
                                   actual_type = AUGMENT_KEYWORD;

                                 }

      stmtsep

-  |  augment_opt_stmt if_feature_stmt { YANG_ADDELEM($1.augment->iffeature, $1.augment->iffeature_size);

-                                        ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                        actual = $1.augment;

-                                        s = NULL;

-                                      }

+  |  augment_opt_stmt if_feature_stmt stmtsep

   |  augment_opt_stmt status_stmt { if ($1.augment->flags & LYS_STATUS_MASK) {

                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.augment, "status", "augment");

                                       YYABORT;

@@ -3100,12 +3076,7 @@
 rpc_opt_stmt: @EMPTYDIR@ { $$.node.ptr_rpc = actual;

                            $$.node.flag = 0;

                          }

-  |  rpc_opt_stmt if_feature_stmt { YANG_ADDELEM($1.node.ptr_rpc->iffeature,

-                                                 $1.node.ptr_rpc->iffeature_size);

-                                    ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                    actual = $1.node.ptr_rpc;

-                                    s = NULL;

-                                  }

+  |  rpc_opt_stmt if_feature_stmt stmtsep

   |  rpc_opt_stmt status_stmt { if ($1.node.ptr_rpc->flags & LYS_STATUS_MASK) {

                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.node.ptr_rpc, "status", "rpc");

                                   YYABORT;

@@ -3318,11 +3289,7 @@
                                        actual_type = NOTIFICATION_KEYWORD;

                                      }

      stmtsep

-  |  notification_opt_stmt if_feature_stmt { YANG_ADDELEM($1.notif->iffeature, $1.notif->iffeature_size);

-                                             ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;

-                                             actual = $1.notif;

-                                             s = NULL;

-                                           }

+  |  notification_opt_stmt if_feature_stmt stmtsep

   |  notification_opt_stmt status_stmt { if ($1.notif->flags & LYS_STATUS_MASK) {

                                            LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, $1.notif, "status", "notification");

                                            YYABORT;