parsers CHANGE optimalize parsing module

if module exists in context, it not will parse other substatements of module. It returns pointer of module, which is already stored in context.
diff --git a/src/parser.c b/src/parser.c
index 8494d7c..9214821 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -2522,91 +2522,92 @@
 }
 
 int
-lyp_ctx_add_module(struct lys_module **module)
+lyp_ctx_check_module(struct lys_module *module)
 {
     struct ly_ctx *ctx;
-    struct lys_module **newlist = NULL;
-    struct lys_module *mod;
     int i, match_i = -1, to_implement;
-    int ret = EXIT_SUCCESS;
 
     assert(module);
-    mod = (*module);
     to_implement = 0;
-    ctx = mod->ctx;
+    ctx = module->ctx;
 
     for (i = 0; i < ctx->models.used; i++) {
         /* check name (name/revision) and namespace uniqueness */
-        if (!strcmp(ctx->models.list[i]->name, mod->name)) {
+        if (!strcmp(ctx->models.list[i]->name, module->name)) {
             if (to_implement) {
                 if (i == match_i) {
                     continue;
                 }
                 LOGERR(LY_EINVAL, "Module \"%s\" in another revision already implemented.", ctx->models.list[i]->name);
-                return EXIT_FAILURE;
-            } else if (!ctx->models.list[i]->rev_size && mod->rev_size) {
+                return -1;
+            } else if (!ctx->models.list[i]->rev_size && module->rev_size) {
                 LOGERR(LY_EINVAL, "Module \"%s\" without revision already in context.", ctx->models.list[i]->name);
-                return EXIT_FAILURE;
-            } else if (ctx->models.list[i]->rev_size && !mod->rev_size) {
+                return -1;
+            } else if (ctx->models.list[i]->rev_size && !module->rev_size) {
                 LOGERR(LY_EINVAL, "Module \"%s\" with revision already in context.", ctx->models.list[i]->name);
-                return EXIT_FAILURE;
-            } else if ((!mod->rev_size && !ctx->models.list[i]->rev_size)
-                    || !strcmp(ctx->models.list[i]->rev[0].date, mod->rev[0].date)) {
+                return -1;
+            } else if ((!module->rev_size && !ctx->models.list[i]->rev_size)
+                    || !strcmp(ctx->models.list[i]->rev[0].date, module->rev[0].date)) {
 
                 LOGVRB("Module \"%s\" already in context.", ctx->models.list[i]->name);
-                to_implement = mod->implemented;
+                to_implement = module->implemented;
                 match_i = i;
                 if (to_implement && !ctx->models.list[i]->implemented) {
                     /* check first that it is okay to change it to implemented */
                     i = -1;
                     continue;
                 }
-                goto already_in_context;
+                return 1;
 
-            } else if (mod->implemented && ctx->models.list[i]->implemented) {
+            } else if (module->implemented && ctx->models.list[i]->implemented) {
                 LOGERR(LY_EINVAL, "Module \"%s\" in another revision already implemented.", ctx->models.list[i]->name);
-                return EXIT_FAILURE;
+                return -1;
             }
             /* else keep searching, for now the caller is just adding
              * another revision of an already present schema
              */
-        } else if (!strcmp(ctx->models.list[i]->ns, mod->ns)) {
+        } else if (!strcmp(ctx->models.list[i]->ns, module->ns)) {
             LOGERR(LY_EINVAL, "Two different modules (\"%s\" and \"%s\") have the same namespace \"%s\".",
-                   ctx->models.list[i]->name, mod->name, mod->ns);
-            return EXIT_FAILURE;
+                   ctx->models.list[i]->name, module->name, module->ns);
+            return -1;
         }
     }
 
     if (to_implement) {
-        i = match_i;
-        if (lys_set_implemented(ctx->models.list[i])) {
-            ret = EXIT_FAILURE;
+        if (lys_set_implemented(ctx->models.list[match_i])) {
+            return -1;
         }
-        goto already_in_context;
+        return 1;
     }
 
+    return 0;
+}
+
+int
+lyp_ctx_add_module(struct lys_module *module)
+{
+    struct lys_module **newlist = NULL;
+    int i;
+
+    assert(!lyp_ctx_check_module(module));
+
     /* add to the context's list of modules */
-    if (ctx->models.used == ctx->models.size) {
-        newlist = realloc(ctx->models.list, (2 * ctx->models.size) * sizeof *newlist);
+    if (module->ctx->models.used == module->ctx->models.size) {
+        newlist = realloc(module->ctx->models.list, (2 * module->ctx->models.size) * sizeof *newlist);
         if (!newlist) {
             LOGMEM;
-            return EXIT_FAILURE;
+            return -1;
         }
-        for (i = ctx->models.size; i < ctx->models.size * 2; i++) {
+        for (i = module->ctx->models.size; i < module->ctx->models.size * 2; i++) {
             newlist[i] = NULL;
         }
-        ctx->models.size *= 2;
-        ctx->models.list = newlist;
+        module->ctx->models.size *= 2;
+        module->ctx->models.list = newlist;
     }
-    ctx->models.list[ctx->models.used++] = mod;
-    ctx->models.module_set_id++;
-    return EXIT_SUCCESS;
+    module->ctx->models.list[module->ctx->models.used++] = module;
+    module->ctx->models.module_set_id++;
 
-already_in_context:
-    lys_sub_module_remove_devs_augs(mod);
-    lys_free(mod, NULL, 1);
-    (*module) = ctx->models.list[i];
-    return ret;
+    return 0;
 }
 
 /**
diff --git a/src/parser.h b/src/parser.h
index 52fd7dd..f5ae270 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -112,12 +112,14 @@
  *
  * @param module Main module
  * @param inc Filled include structure
- * @param line
  * @return 0 for success, 1 for failure
  */
 int lyp_propagate_submodule(struct lys_module *module, struct lys_include *inc);
 
-int lyp_ctx_add_module(struct lys_module **module);
+/* return: -1 = error, 0 = succes, 1 = already there */
+int lyp_ctx_check_module(struct lys_module *module);
+
+int lyp_ctx_add_module(struct lys_module *module);
 
 /**
  * @brief mmap() wrapper for parsers. To unmap, use lyp_munmap().
diff --git a/src/parser_yang.c b/src/parser_yang.c
index 1b8d608..39da41f 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -2216,7 +2216,7 @@
     unsigned int size;
     YY_BUFFER_STATE bp;
     yyscan_t scanner = NULL;
-    int ret = EXIT_SUCCESS, remove_import = 1;
+    int ret = 0;
     struct lys_module *trg;
     struct yang_parameter param;
 
@@ -2228,16 +2228,17 @@
     param.submodule = submodule;
     param.unres = unres;
     param.node = node;
-    param.remove_import = &remove_import;
+    param.remove_import = 1;
+    param.exist_module = 0;
     if (yyparse(scanner, &param)) {
-        if (remove_import) {
+        if (param.remove_import) {
             trg = (submodule) ? (struct lys_module *)submodule : module;
             yang_free_import(trg->ctx, trg->imp, 0, trg->imp_size);
             yang_free_include(trg->ctx, trg->inc, 0, trg->inc_size);
             trg->inc_size = 0;
             trg->imp_size = 0;
         }
-        ret = EXIT_FAILURE;
+        ret = (param.exist_module) ? 1 : -1;
     }
     yy_delete_buffer(bp, scanner);
     yylex_destroy(scanner);
@@ -2248,9 +2249,10 @@
 yang_read_module(struct ly_ctx *ctx, const char* data, unsigned int size, const char *revision, int implement)
 {
 
-    struct lys_module *module = NULL;
+    struct lys_module *module = NULL, *tmp_mod;
     struct unres_schema *unres = NULL;
     struct lys_node *node = NULL;
+    int ret;
 
     unres = calloc(1, sizeof *unres);
     if (!unres) {
@@ -2269,17 +2271,25 @@
     module->type = 0;
     module->implemented = (implement ? 1 : 0);
 
-    if (yang_parse_mem(module, NULL, unres, data, size, &node)) {
+    ret = yang_parse_mem(module, NULL, unres, data, size, &node);
+    if (ret == -1) {
         free_yang_common(module, node);
         goto error;
-    }
+    } else if (ret == 1 ) {
+        assert(!unres->count);
+    } else {
+        if (yang_check_sub_module(module, unres, node)) {
+            goto error;
+        }
 
-    if (yang_check_sub_module(module, unres, node)) {
-        goto error;
-    }
+        if (module && unres->count && resolve_unres_schema(module, unres)) {
+            goto error;
+        }
 
-    if (module && unres->count && resolve_unres_schema(module, unres)) {
-        goto error;
+        /* check correctness of includes */
+        if (lyp_check_include_missing(module)) {
+            goto error;
+        }
     }
 
     if (revision) {
@@ -2291,22 +2301,29 @@
         }
     }
 
-    /* check correctness of includes */
-    if (lyp_check_include_missing(module)) {
-        goto error;
-    }
-
-    if (lyp_ctx_add_module(&module)) {
-        goto error;
-    }
-
-    if (module->deviation_size && !module->implemented) {
-        LOGVRB("Module \"%s\" includes deviations, changing its conformance to \"implement\".", module->name);
-        /* deviations always causes target to be made implemented,
-         * but augents and leafrefs not, so we have to apply them now */
-        if (lys_set_implemented(module)) {
+    /* add into context if not already there */
+    if (!ret) {
+        if (lyp_ctx_add_module(module)) {
             goto error;
         }
+
+        if (module->deviation_size && !module->implemented) {
+            LOGVRB("Module \"%s\" includes deviations, changing its conformance to \"implement\".", module->name);
+            /* deviations always causes target to be made implemented,
+             * but augents and leafrefs not, so we have to apply them now */
+            if (lys_set_implemented(module)) {
+                goto error;
+            }
+        }
+    } else {
+        tmp_mod = module;
+
+        /* get the model from the context */
+        module = (struct lys_module *)ly_ctx_get_module(ctx, module->name, revision);
+        assert(module);
+
+        /* free what was parsed */
+        lys_free(tmp_mod, NULL, 0);
     }
 
     unres_schema_free(NULL, &unres);
@@ -2347,6 +2364,7 @@
     submodule->type = 1;
     submodule->belongsto = module;
 
+    /* module cannot be changed in this case and 1 cannot be returned */
     if (yang_parse_mem(module, submodule, unres, data, size, &node)) {
         free_yang_common((struct lys_module *)submodule, node);
         goto error;
diff --git a/src/parser_yang.h b/src/parser_yang.h
index a73b163..a54ed94 100644
--- a/src/parser_yang.h
+++ b/src/parser_yang.h
@@ -58,9 +58,10 @@
     struct unres_schema *unres;
     struct lys_node **node;
     char **value;
-    int *remove_import;
     void **data_node;
     void **actual_node;
+    uint8_t remove_import;
+    uint8_t exist_module;
 };
 
 struct yang_type {
@@ -171,7 +172,7 @@
  * @param[in] data Pointer to a NULL-terminated string containing YANG data to parse.
  * @param[in] size_data Size of input string
  * @param[in/out] node Pointer to node
- * @return 0 on success, 1 on error.
+ * @return 0 on success, -1 on error, 1 on module is already in context.
  */
 int yang_parse_mem(struct lys_module *module, struct lys_submodule *submodule, struct unres_schema *unres,
                    const char *data, unsigned int size_data, struct lys_node **node);
diff --git a/src/parser_yang_bis.c b/src/parser_yang_bis.c
index ac43bf4..3d396b1 100644
--- a/src/parser_yang_bis.c
+++ b/src/parser_yang_bis.c
@@ -539,16 +539,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3222
+#define YYLAST   3132
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  111
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  318
+#define YYNNTS  317
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  744
+#define YYNRULES  743
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  1202
+#define YYNSTATES  1201
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -606,79 +606,79 @@
 {
        0,   259,   259,   260,   262,   285,   288,   290,   289,   313,
      324,   334,   344,   345,   351,   356,   359,   370,   380,   393,
-     394,   400,   402,   404,   406,   412,   413,   414,   417,   422,
-     429,   430,   431,   442,   453,   460,   467,   469,   470,   474,
-     475,   486,   497,   504,   514,   528,   533,   539,   540,   545,
-     550,   555,   561,   563,   565,   567,   569,   582,   586,   587,
-     589,   590,   595,   596,   601,   608,   608,   615,   621,   660,
-     661,   664,   665,   666,   667,   668,   669,   670,   671,   672,
-     673,   676,   692,   694,   695,   699,   700,   707,   714,   723,
-     733,   733,   735,   736,   740,   741,   743,   744,   745,   754,
-     756,   757,   758,   759,   774,   785,   787,   788,   803,   804,
-     813,   819,   824,   830,   832,   845,   847,   848,   873,   874,
-     888,   901,   907,   912,   918,   920,   969,   979,   982,   987,
-     988,   994,   998,  1003,  1010,  1012,  1018,  1019,  1024,  1059,
-    1060,  1063,  1064,  1068,  1074,  1087,  1088,  1089,  1090,  1091,
-    1093,  1110,  1116,  1117,  1133,  1137,  1145,  1146,  1151,  1163,
-    1168,  1173,  1178,  1184,  1191,  1204,  1205,  1209,  1210,  1220,
-    1225,  1230,  1235,  1241,  1252,  1264,  1265,  1268,  1276,  1285,
-    1286,  1301,  1302,  1314,  1321,  1325,  1330,  1336,  1346,  1347,
-    1362,  1367,  1368,  1373,  1375,  1377,  1378,  1379,  1392,  1404,
-    1405,  1407,  1415,  1425,  1426,  1441,  1442,  1454,  1461,  1466,
-    1471,  1477,  1487,  1488,  1504,  1506,  1508,  1510,  1512,  1519,
-    1522,  1523,  1528,  1531,  1537,  1542,  1547,  1550,  1553,  1556,
-    1559,  1567,  1568,  1569,  1570,  1571,  1572,  1573,  1574,  1577,
-    1584,  1587,  1588,  1611,  1614,  1614,  1618,  1623,  1623,  1627,
-    1632,  1638,  1644,  1649,  1654,  1654,  1659,  1659,  1664,  1664,
-    1673,  1673,  1677,  1677,  1683,  1720,  1728,  1732,  1732,  1736,
-    1741,  1741,  1746,  1751,  1751,  1755,  1760,  1766,  1772,  1778,
-    1783,  1789,  1796,  1848,  1852,  1852,  1856,  1862,  1862,  1867,
-    1878,  1883,  1883,  1887,  1893,  1906,  1919,  1929,  1935,  1940,
-    1946,  1953,  1997,  2001,  2001,  2005,  2011,  2011,  2015,  2024,
-    2030,  2036,  2049,  2062,  2072,  2078,  2083,  2088,  2088,  2092,
-    2092,  2097,  2097,  2102,  2102,  2111,  2111,  2118,  2125,  2128,
-    2129,  2149,  2153,  2153,  2157,  2163,  2173,  2180,  2187,  2194,
-    2200,  2206,  2206,  2212,  2213,  2216,  2217,  2218,  2219,  2220,
-    2221,  2222,  2229,  2236,  2239,  2240,  2254,  2257,  2257,  2261,
-    2266,  2272,  2277,  2282,  2282,  2289,  2297,  2300,  2308,  2311,
-    2312,  2335,  2338,  2338,  2342,  2348,  2348,  2352,  2359,  2366,
-    2373,  2378,  2384,  2391,  2394,  2395,  2427,  2430,  2430,  2434,
-    2439,  2445,  2450,  2455,  2455,  2459,  2459,  2465,  2466,  2468,
-    2478,  2480,  2481,  2515,  2518,  2532,  2556,  2578,  2629,  2646,
-    2663,  2684,  2705,  2710,  2716,  2717,  2720,  2732,  2737,  2738,
-    2740,  2748,  2753,  2756,  2756,  2760,  2765,  2771,  2776,  2781,
-    2781,  2786,  2786,  2791,  2791,  2800,  2800,  2806,  2820,  2824,
-    2833,  2837,  2838,  2862,  2866,  2872,  2878,  2883,  2888,  2888,
-    2892,  2892,  2897,  2897,  2907,  2907,  2918,  2918,  2954,  2957,
-    2957,  2961,  2961,  2965,  2965,  2970,  2970,  2976,  2976,  3012,
-    3020,  3022,  3023,  3057,  3060,  3060,  3064,  3069,  3075,  3080,
-    3085,  3085,  3089,  3089,  3094,  3094,  3100,  3109,  3127,  3130,
-    3136,  3142,  3147,  3148,  3150,  3155,  3157,  3159,  3160,  3161,
-    3163,  3163,  3169,  3170,  3202,  3205,  3211,  3215,  3221,  3227,
-    3234,  3241,  3249,  3258,  3258,  3264,  3265,  3297,  3300,  3306,
-    3310,  3316,  3323,  3323,  3329,  3330,  3344,  3347,  3350,  3356,
-    3362,  3369,  3376,  3384,  3393,  3400,  3402,  3403,  3407,  3408,
-    3413,  3419,  3421,  3422,  3423,  3436,  3438,  3439,  3440,  3453,
-    3455,  3457,  3458,  3478,  3480,  3481,  3482,  3502,  3504,  3505,
-    3506,  3518,  3581,  3583,  3584,  3589,  3591,  3592,  3594,  3595,
-    3597,  3599,  3599,  3606,  3609,  3617,  3636,  3638,  3639,  3642,
-    3642,  3659,  3659,  3666,  3666,  3673,  3676,  3678,  3680,  3681,
-    3683,  3685,  3687,  3688,  3690,  3692,  3693,  3695,  3696,  3698,
-    3700,  3703,  3707,  3709,  3710,  3712,  3713,  3715,  3717,  3728,
-    3729,  3732,  3733,  3744,  3745,  3747,  3748,  3750,  3751,  3757,
-    3758,  3761,  3762,  3763,  3787,  3788,  3791,  3792,  3793,  3796,
-    3796,  3802,  3804,  3805,  3807,  3808,  3809,  3811,  3812,  3814,
-    3815,  3817,  3818,  3820,  3821,  3823,  3824,  3827,  3828,  3831,
-    3833,  3834,  3837,  3837,  3844,  3846,  3847,  3848,  3849,  3850,
-    3851,  3852,  3854,  3855,  3856,  3857,  3858,  3859,  3860,  3861,
-    3862,  3863,  3864,  3865,  3866,  3867,  3868,  3869,  3870,  3871,
-    3872,  3873,  3874,  3875,  3876,  3877,  3878,  3879,  3880,  3881,
-    3882,  3883,  3884,  3885,  3886,  3887,  3888,  3889,  3890,  3891,
-    3892,  3893,  3894,  3895,  3896,  3897,  3898,  3899,  3900,  3901,
-    3902,  3903,  3904,  3905,  3906,  3907,  3908,  3909,  3910,  3911,
-    3912,  3913,  3914,  3915,  3916,  3917,  3918,  3919,  3920,  3921,
-    3922,  3923,  3924,  3925,  3926,  3927,  3928,  3929,  3930,  3931,
-    3932,  3933,  3934,  3937,  3944
+     394,   400,   402,   404,   406,   407,   408,   410,   415,   422,
+     423,   424,   435,   446,   453,   460,   462,   463,   467,   468,
+     479,   490,   497,   507,   521,   526,   532,   533,   538,   543,
+     548,   554,   556,   558,   560,   562,   575,   579,   580,   582,
+     583,   588,   589,   594,   601,   601,   608,   614,   653,   672,
+     675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
+     687,   703,   705,   706,   710,   711,   718,   725,   734,   744,
+     744,   746,   747,   751,   752,   754,   755,   756,   765,   767,
+     768,   769,   770,   785,   796,   798,   799,   814,   815,   824,
+     830,   835,   841,   843,   856,   858,   859,   884,   885,   899,
+     912,   918,   923,   929,   931,   980,   990,   993,   998,   999,
+    1005,  1009,  1014,  1021,  1023,  1029,  1030,  1035,  1070,  1071,
+    1074,  1075,  1079,  1085,  1098,  1099,  1100,  1101,  1102,  1104,
+    1121,  1127,  1128,  1144,  1148,  1156,  1157,  1162,  1174,  1179,
+    1184,  1189,  1195,  1202,  1215,  1216,  1220,  1221,  1231,  1236,
+    1241,  1246,  1252,  1263,  1275,  1276,  1279,  1287,  1296,  1297,
+    1312,  1313,  1325,  1332,  1336,  1341,  1347,  1357,  1358,  1373,
+    1378,  1379,  1384,  1386,  1388,  1389,  1390,  1403,  1415,  1416,
+    1418,  1426,  1436,  1437,  1452,  1453,  1465,  1472,  1477,  1482,
+    1488,  1498,  1499,  1515,  1517,  1519,  1521,  1523,  1530,  1533,
+    1534,  1539,  1542,  1548,  1553,  1558,  1561,  1564,  1567,  1570,
+    1578,  1579,  1580,  1581,  1582,  1583,  1584,  1585,  1588,  1595,
+    1598,  1599,  1622,  1625,  1625,  1629,  1634,  1634,  1638,  1643,
+    1649,  1655,  1660,  1665,  1665,  1670,  1670,  1675,  1675,  1684,
+    1684,  1688,  1688,  1694,  1731,  1739,  1743,  1743,  1747,  1752,
+    1752,  1757,  1762,  1762,  1766,  1771,  1777,  1783,  1789,  1794,
+    1800,  1807,  1859,  1863,  1863,  1867,  1873,  1873,  1878,  1889,
+    1894,  1894,  1898,  1904,  1917,  1930,  1940,  1946,  1951,  1957,
+    1964,  2008,  2012,  2012,  2016,  2022,  2022,  2026,  2035,  2041,
+    2047,  2060,  2073,  2083,  2089,  2094,  2099,  2099,  2103,  2103,
+    2108,  2108,  2113,  2113,  2122,  2122,  2129,  2136,  2139,  2140,
+    2160,  2164,  2164,  2168,  2174,  2184,  2191,  2198,  2205,  2211,
+    2217,  2217,  2223,  2224,  2227,  2228,  2229,  2230,  2231,  2232,
+    2233,  2240,  2247,  2250,  2251,  2265,  2268,  2268,  2272,  2277,
+    2283,  2288,  2293,  2293,  2300,  2308,  2311,  2319,  2322,  2323,
+    2346,  2349,  2349,  2353,  2359,  2359,  2363,  2370,  2377,  2384,
+    2389,  2395,  2402,  2405,  2406,  2438,  2441,  2441,  2445,  2450,
+    2456,  2461,  2466,  2466,  2470,  2470,  2476,  2477,  2479,  2489,
+    2491,  2492,  2526,  2529,  2543,  2567,  2589,  2640,  2657,  2674,
+    2695,  2716,  2721,  2727,  2728,  2731,  2743,  2748,  2749,  2751,
+    2759,  2764,  2767,  2767,  2771,  2776,  2782,  2787,  2792,  2792,
+    2797,  2797,  2802,  2802,  2811,  2811,  2817,  2831,  2835,  2844,
+    2848,  2849,  2873,  2877,  2883,  2889,  2894,  2899,  2899,  2903,
+    2903,  2908,  2908,  2918,  2918,  2929,  2929,  2965,  2968,  2968,
+    2972,  2972,  2976,  2976,  2981,  2981,  2987,  2987,  3023,  3031,
+    3033,  3034,  3068,  3071,  3071,  3075,  3080,  3086,  3091,  3096,
+    3096,  3100,  3100,  3105,  3105,  3111,  3120,  3138,  3141,  3147,
+    3153,  3158,  3159,  3161,  3166,  3168,  3170,  3171,  3172,  3174,
+    3174,  3180,  3181,  3213,  3216,  3222,  3226,  3232,  3238,  3245,
+    3252,  3260,  3269,  3269,  3275,  3276,  3308,  3311,  3317,  3321,
+    3327,  3334,  3334,  3340,  3341,  3355,  3358,  3361,  3367,  3373,
+    3380,  3387,  3395,  3404,  3411,  3413,  3414,  3418,  3419,  3424,
+    3430,  3432,  3433,  3434,  3447,  3449,  3450,  3451,  3464,  3466,
+    3468,  3469,  3489,  3491,  3492,  3493,  3513,  3515,  3516,  3517,
+    3529,  3592,  3594,  3595,  3600,  3602,  3603,  3605,  3606,  3608,
+    3610,  3610,  3617,  3620,  3628,  3647,  3649,  3650,  3653,  3653,
+    3670,  3670,  3677,  3677,  3684,  3687,  3689,  3691,  3692,  3694,
+    3696,  3698,  3699,  3701,  3703,  3704,  3706,  3707,  3709,  3711,
+    3714,  3718,  3720,  3721,  3723,  3724,  3726,  3728,  3739,  3740,
+    3743,  3744,  3755,  3756,  3758,  3759,  3761,  3762,  3768,  3769,
+    3772,  3773,  3774,  3798,  3799,  3802,  3803,  3804,  3807,  3807,
+    3813,  3815,  3816,  3818,  3819,  3820,  3822,  3823,  3825,  3826,
+    3828,  3829,  3831,  3832,  3834,  3835,  3838,  3839,  3842,  3844,
+    3845,  3848,  3848,  3855,  3857,  3858,  3859,  3860,  3861,  3862,
+    3863,  3865,  3866,  3867,  3868,  3869,  3870,  3871,  3872,  3873,
+    3874,  3875,  3876,  3877,  3878,  3879,  3880,  3881,  3882,  3883,
+    3884,  3885,  3886,  3887,  3888,  3889,  3890,  3891,  3892,  3893,
+    3894,  3895,  3896,  3897,  3898,  3899,  3900,  3901,  3902,  3903,
+    3904,  3905,  3906,  3907,  3908,  3909,  3910,  3911,  3912,  3913,
+    3914,  3915,  3916,  3917,  3918,  3919,  3920,  3921,  3922,  3923,
+    3924,  3925,  3926,  3927,  3928,  3929,  3930,  3931,  3932,  3933,
+    3934,  3935,  3936,  3937,  3938,  3939,  3940,  3941,  3942,  3943,
+    3944,  3945,  3948,  3955
 };
 #endif
 
@@ -719,9 +719,9 @@
   "string_2", "$@1", "module_arg_str", "module_stmt",
   "module_header_stmts", "module_header_stmt", "submodule_arg_str",
   "submodule_stmt", "submodule_header_stmts", "submodule_header_stmt",
-  "yang_version_stmt", "namespace_stmt", "linkage_stmt", "linkage_stmts",
-  "import_stmt", "import_arg_str", "import_opt_stmt", "include_arg_str",
-  "include_stmt", "include_end", "include_opt_stmt", "revision_date_stmt",
+  "yang_version_stmt", "namespace_stmt", "linkage_stmts", "import_stmt",
+  "import_arg_str", "import_opt_stmt", "include_arg_str", "include_stmt",
+  "include_end", "include_opt_stmt", "revision_date_stmt",
   "belongs_to_arg_str", "belongs_to_stmt", "prefix_stmt", "meta_stmts",
   "organization_stmt", "contact_stmt", "description_stmt",
   "reference_stmt", "revision_stmts", "revision_arg_stmt", "revision_stmt",
@@ -817,12 +817,12 @@
 };
 # endif
 
-#define YYPACT_NINF -1058
+#define YYPACT_NINF -1020
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-1058)))
+  (!!((Yystate) == (-1020)))
 
-#define YYTABLE_NINF -598
+#define YYTABLE_NINF -597
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -831,127 +831,127 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-   -1058,    21, -1058, -1058,    90, -1058, -1058, -1058,   149,   149,
-   -1058, -1058,  3029,  3029,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,   -47,
-   -1058, -1058, -1058,   -44, -1058,   149, -1058,   149, -1058,   -31,
-     283,   283, -1058, -1058, -1058,   174, -1058, -1058, -1058,    24,
-     381,   149, -1058,   135,   149,   149,   149, -1058, -1058, -1058,
-   -1058,   149, -1058, -1058, -1058,   235,  2364, -1058,   465,   149,
-     149, -1058, -1058,  2459,  3029,  2459,   465,  3029, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058,   149,   149,   149,   149, -1058, -1058, -1058, -1058,
-   -1058,    11,  3029,  3029, -1058,   254, -1058, -1058,   254, -1058,
-     254, -1058,   -29, -1058,   149,   149,   149,   149,  2459,  2459,
-    2459,  2459,   -17,  1296,   149,    -9, -1058,   278, -1058, -1058,
-   -1058, -1058, -1058, -1058,   149, -1058,     7, -1058,  2173,    83,
-     254,   254,   254,   254, -1058,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   240, -1058, -1058, -1058, -1058,    12,   283,   149, -1058,
-     246, -1058, -1058,   149, -1058, -1058, -1058, -1058, -1058, -1058,
-     149,  3029,     3,  3029,  3029,  3029,     3,  3029,  3029,  3029,
-    3029,  3029,  3029,  3029,  3029,  3029,  2554,  3029,   283, -1058,
-   -1058,   305, -1058,   283,   283,   283, -1058,   149,    15,   328,
-     397,   343, -1058,  3124, -1058, -1058,   126, -1058, -1058,   359,
-   -1058,   385, -1058,   390, -1058, -1058,   129, -1058, -1058,   395,
-   -1058,   399, -1058,   405, -1058,   140, -1058,   145, -1058,   156,
-   -1058,   406, -1058,   417, -1058,   160, -1058, -1058, -1058,   423,
-   -1058, -1058, -1058,   343, -1058, -1058, -1058, -1058, -1058,   370,
-     208,   283, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058,    96,   149, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058,   149,   149, -1058,
-     149,   283,   283,   149, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058,   283,   149,   149,   149,   283,   283, -1058,
-     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
-     283,   283,   283,   283,    82,   240,   283,  2268,  1052,  1508,
-    1425,  1194,    99,   106,   566,  1051,   311,   294,  1358,   913,
-    1667,  1151,   287,   219, -1058, -1058, -1058,   254, -1058,   149,
-     149,   149,   149,   149,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058,   149,   149, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058,   149, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058,   149, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   149, -1058, -1058, -1058, -1058, -1058,   149, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058,   149, -1058, -1058, -1058, -1058,
-   -1058, -1058,   149,   149, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058,   149,   149,   149, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058,   149,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-     149,   149, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   149,    59,  2459,    74,  2459,   118,  2459, -1058, -1058,
-    3029,  3029, -1058, -1058, -1058, -1058, -1058,  2459, -1058, -1058,
-    2459, -1058, -1058, -1058, -1058, -1058, -1058, -1058,  3029,   282,
-     283,   283,   283,   283,   283,  2554,  2554,  2459, -1058, -1058,
-   -1058,    35,   189,    17, -1058, -1058, -1058,  2649,  2649, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-     149,   149, -1058, -1058, -1058, -1058,   283,  2649,  2649, -1058,
-   -1058, -1058, -1058, -1058, -1058,   254,   254, -1058, -1058, -1058,
-     254,   424, -1058, -1058, -1058, -1058, -1058,   254,   427, -1058,
-     283,   283,   431, -1058,   417, -1058,   283,   283,   283,   283,
-     283,   254,   283,   283,   254,   283,   283,   283,   283,   283,
-     283,   283, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058,   254,   438, -1058,   254,   283,   283,   283,
-   -1058, -1058, -1058,   254, -1058, -1058, -1058,   254, -1058, -1058,
-   -1058, -1058, -1058,   254,   283,   283,   283, -1058,   254, -1058,
-     254, -1058,    89, -1058,   283,   283,   283,   283,   283,   283,
-     283,   283,   283,   283,   283,   163,   168,   283,   283,   283,
-     283, -1058, -1058,   183, -1058, -1058, -1058,   469, -1058,   283,
-     283,   283,   149,   149, -1058, -1058,   149,   149, -1058, -1058,
-   -1058, -1058,   149,   149,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058,   474,   149,   149,    89,   149,
-     149, -1058, -1058, -1058, -1058, -1058,   149, -1058,   149, -1058,
-     149,   149,   149, -1058, -1058, -1058, -1058, -1058, -1058,  3124,
-   -1058, -1058, -1058, -1058,   149, -1058, -1058, -1058,   149,   283,
-     283,   283, -1058, -1058, -1058,   479,   502, -1058,   507,   376,
-     149,    89,    96,   283,   283,   283,   283,   143,   260,   402,
-     146,   283, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   149,   149,   173,   863, -1058, -1058, -1058, -1058, -1058,
-     300,  1254,  1584,   808,   149,   149, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   149,   196,   283,   283,   283,  3029,  2459, -1058,   149,
-     149,   149,   149,   149,   149, -1058,   227, -1058, -1058, -1058,
-   -1058, -1058, -1058,   283,   279, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058,  2459,  2459, -1058, -1058,    75, -1058,   413,
-      68,   773,   508, -1058,   511, -1058,    97,  2459,   120,  2459,
-    2459,    77, -1058,   283,   274, -1058, -1058, -1058, -1058, -1058,
-     283,   254,   254,   283,   283, -1058, -1058, -1058,   254, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,   254, -1058,
-     516, -1058, -1058,   254,   204,   298,   517, -1058,   521, -1058,
-   -1058, -1058, -1058,   254,   283, -1058,   283,   283,   283,   283,
-   -1058, -1058,   149,   149, -1058,   283,   283,   283,   283,   283,
-     283, -1058,   149, -1058, -1058, -1058, -1058,  3124, -1058, -1058,
-     214, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,   149,
-     149, -1058,   283,   411,   945,   283,   283, -1058,   204, -1058,
-    2744,   283,   283,   283,   149, -1058, -1058, -1058, -1058, -1058,
-   -1058,   149, -1058, -1058, -1058, -1058, -1058, -1058,   565,   228,
-   -1058, -1058, -1058,    93,   210,   597,   189,   178, -1058,   323,
-   -1058,   131,   149, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,   254, -1058, -1058, -1058, -1058, -1058,   254, -1058, -1058,
-   -1058,  3124, -1058,  2459, -1058,   149, -1058,   149,   323,   323,
-     254,   231,   233, -1058, -1058,   323,   266,   323, -1058,   323,
-     243,   252,   323,   323,   264,   350, -1058,   323, -1058, -1058,
-     272,  2839,   323, -1058, -1058, -1058,  2934, -1058,   280,   323,
-    3124, -1058
+   -1020,   112, -1020, -1020,    91, -1020, -1020, -1020,    73,    73,
+   -1020, -1020,  2939,  2939,    73, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,   -19,
+   -1020, -1020, -1020,    -2, -1020,    73, -1020,    73, -1020,    24,
+     135,   135, -1020, -1020, -1020,   193, -1020, -1020, -1020,    41,
+     297,    73,   100,    73,    73,    73, -1020, -1020, -1020,   100,
+      73, -1020, -1020, -1020,    53,  2274, -1020,    73,    73, -1020,
+   -1020,   174,  2369,  2939,  2369,   174,  2939, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020,  2939,  2939,    73,    73,    73,    73, -1020, -1020, -1020,
+   -1020, -1020,    62, -1020,   183, -1020, -1020,   183, -1020,   183,
+   -1020,    37, -1020,    73,    73,    73,    73,    71, -1020,   227,
+   -1020,  2369,  2369,  2369,  2369,    74,  1920,    73, -1020, -1020,
+   -1020, -1020, -1020,    73, -1020,    81, -1020,  1629,    95, -1020,
+   -1020, -1020, -1020,   183,   183,   183,   183, -1020,    73,    73,
+      73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
+      73,    73,    73,    73,    73, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020,   101,    55,   135,    73, -1020,   289,
+   -1020, -1020,    73, -1020, -1020,   135,   135,   135, -1020, -1020,
+   -1020, -1020,    73,  2939,     3,  2939,  2939,  2939,     3,  2939,
+    2939,  2939,  2939,  2939,  2939,  2939,  2939,  2939,  2464,  2939,
+     135, -1020, -1020,   265, -1020, -1020,    73,    98,   269,   332,
+      83,   325,   302, -1020,  3034, -1020, -1020,   106, -1020, -1020,
+     310, -1020,   327, -1020,   331, -1020, -1020,   134, -1020, -1020,
+     344, -1020,   363, -1020,   394, -1020,   142, -1020,   150, -1020,
+     172, -1020,   404, -1020,   420, -1020,   184, -1020, -1020, -1020,
+     428, -1020, -1020, -1020,   302, -1020, -1020, -1020, -1020, -1020,
+     135, -1020, -1020, -1020, -1020, -1020,    73, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020,   186,    73, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020,    73, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,    73,    73, -1020,    73,
+     135,   135,   135,    73,    73,    73,   101,   135,   135,   135,
+   -1020,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,    32,  2178,   183,   452,   950,
+     334,  1805,   136,    60,   320,  1259,   313,  1379,   411,  1483,
+    1056,  1002,   316,   164, -1020, -1020, -1020, -1020, -1020,    73,
+      73,    73,    73,    73,    73, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020,    73,    73, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,    73, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,    73, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020,    73, -1020, -1020, -1020, -1020, -1020,    73, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020,    73, -1020, -1020, -1020, -1020,
+   -1020, -1020,    73,    73, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,    73,    73,    73, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020,    73,    73, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+      73,    73, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+      73,    18,  2369,    43,  2369,   107,  2369, -1020, -1020,  2939,
+    2939, -1020, -1020, -1020, -1020, -1020,  2369, -1020, -1020,  2369,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020,  2939,   286,   135,
+     135,   135,   135,   135,  2464,  2464,  2369, -1020, -1020, -1020,
+      57,   242,    15, -1020, -1020, -1020,  2559,  2559, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,    73,
+      73, -1020, -1020, -1020, -1020,   135,  2559,  2559, -1020, -1020,
+   -1020, -1020, -1020, -1020,   183,   183, -1020, -1020, -1020,   183,
+     434, -1020, -1020, -1020, -1020, -1020,   183,   441, -1020,   135,
+     135,   449, -1020,   420, -1020,   135,   135,   135,   135,   135,
+     183,   135,   135,   183,   135,   135,   135,   135,   135,   135,
+     135, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020,   183,   472, -1020,   183,   135,   135,   135, -1020,
+   -1020, -1020,   183, -1020, -1020, -1020,   183, -1020, -1020, -1020,
+   -1020, -1020,   183,   135,   135,   135, -1020,   183, -1020,   183,
+   -1020,    68, -1020,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   196,   228,   135,   135,   135,   135,
+   -1020, -1020,   247, -1020, -1020, -1020,   473, -1020,   135,   135,
+     135,    73,    73, -1020, -1020,    73,    73, -1020, -1020, -1020,
+   -1020,    73,    73,    73, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020,   479,    73,    73,    68,    73,    73,
+   -1020, -1020, -1020, -1020, -1020,    73, -1020,    73, -1020,    73,
+      73,    73, -1020, -1020, -1020, -1020, -1020, -1020,  3034, -1020,
+   -1020, -1020, -1020,    73, -1020, -1020, -1020,    73,   135,   135,
+     135, -1020, -1020, -1020,   486,   487, -1020,   490,   488,    73,
+      68,   186,   135,   135,   135,   135,   387,   143,   733,   117,
+     135, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+      73,    73,   205,   771, -1020, -1020, -1020, -1020, -1020,  1301,
+    1324,  1840,   849,    73,    73, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+      73,   251,   135,   135,   135,  2939,  2369, -1020,    73,    73,
+      73,    73,    73,    73, -1020,   291, -1020, -1020, -1020, -1020,
+   -1020, -1020,   135,   350, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020,  2369,  2369, -1020, -1020,    76, -1020,   595,    75,
+     160,   491, -1020,   502, -1020,    87,  2369,   190,  2369,  2369,
+      78, -1020,   135,   346, -1020, -1020, -1020, -1020, -1020,   135,
+     183,   183,   135,   135, -1020, -1020, -1020,   183, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020,   183, -1020,   503,
+   -1020, -1020,   183,   285,   374,   517, -1020,   526, -1020, -1020,
+   -1020, -1020,   183,   135, -1020,   135,   135,   135,   135, -1020,
+   -1020,    73,    73, -1020,   135,   135,   135,   135,   135,   135,
+   -1020,    73, -1020, -1020, -1020, -1020,  3034, -1020, -1020,   290,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,    73,    73,
+   -1020,   135,   655,   674,   135,   135, -1020,   285, -1020,  2654,
+     135,   135,   135,    73, -1020, -1020, -1020, -1020, -1020, -1020,
+      73, -1020, -1020, -1020, -1020, -1020, -1020,   418,   311, -1020,
+   -1020, -1020,   159,   209,   584,   242,   272, -1020,   403, -1020,
+     252,    73, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+     183, -1020, -1020, -1020, -1020, -1020,   183, -1020, -1020, -1020,
+    3034, -1020,  2369, -1020,    73, -1020,    73,   403,   403,   183,
+     315,   322, -1020, -1020,   403,   339,   403, -1020,   403,   336,
+     329,   403,   403,   326,   436, -1020,   403, -1020, -1020,   356,
+    2749,   403, -1020, -1020, -1020,  2844, -1020,   357,   403,  3034,
+   -1020
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -959,201 +959,201 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-     647,     0,     2,     3,     0,     1,   645,   646,     0,     0,
-     648,   647,     0,     0,   649,   663,     4,   662,   664,   665,
-     666,   667,   668,   669,   670,   671,   672,   673,   674,   675,
-     676,   677,   678,   679,   680,   681,   682,   683,   684,   685,
-     686,   687,   688,   689,   690,   691,   692,   693,   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,   647,   618,     0,
-       9,   743,   647,     0,    16,     6,   626,   617,   626,     5,
-      12,    19,   647,   629,    25,    11,   628,   627,    25,    18,
-       0,   632,    47,    24,     0,     0,     0,    13,    14,    15,
-      47,     0,    20,    21,     7,     0,   634,   633,    58,     0,
-       0,    26,    27,     0,     0,     0,    58,     0,   647,   647,
-     639,   630,   647,   655,   658,   656,   660,   661,   659,   631,
-     647,   657,     0,     0,     0,     0,    48,    49,    50,    51,
-      69,    56,     0,     0,   654,     0,   652,   615,     0,   647,
-       0,    69,     0,    44,     8,   641,   637,   635,     0,     0,
-       0,     0,     0,    68,     0,     0,    29,     0,    35,   626,
-     626,    23,   647,    46,   616,    22,     0,   626,     0,   636,
-       0,     0,     0,     0,   647,     0,     0,     0,     0,     0,
+     646,     0,     2,     3,     0,     1,   644,   645,     0,     0,
+     647,   646,     0,     0,   648,   662,     4,   661,   663,   664,
+     665,   666,   667,   668,   669,   670,   671,   672,   673,   674,
+     675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
+     685,   686,   687,   688,   689,   690,   691,   692,   693,   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,   646,   617,     0,
+       9,   742,   646,     0,    16,     6,   625,   616,   625,     5,
+      12,    19,   646,   628,    24,    11,   627,   626,    24,    18,
+       0,   631,    46,     0,     0,     0,    13,    14,    15,    46,
+       0,    20,    21,     7,     0,   633,   632,     0,     0,    25,
+      26,    57,     0,     0,     0,    57,     0,   646,   646,   638,
+     629,   646,   654,   657,   655,   659,   660,   658,   630,   646,
+     656,     0,     0,     0,     0,     0,     0,    47,    48,    49,
+      50,    68,    55,   653,     0,   651,   614,     0,   646,     0,
+      68,     0,    43,     8,   640,   636,   634,     0,    28,     0,
+      34,     0,     0,     0,     0,     0,    67,     0,   625,   625,
+      23,   646,    45,   615,    22,     0,   625,     0,   635,   625,
+     625,    36,   625,     0,     0,     0,     0,   646,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   626,    71,    72,    73,    74,    75,    76,   231,
-     232,   233,   234,   235,   236,   237,   238,    77,    78,    79,
-      80,     0,   626,   626,    37,   626,     0,   624,   653,   647,
-       0,   620,   640,   632,   619,   647,    53,    54,    52,    55,
-      10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    70,    65,
-      67,     0,    57,    30,    39,    36,   626,    17,     0,     0,
-       0,     0,   365,     0,   419,   420,     0,   577,   647,     0,
-     327,     0,   239,     0,    81,   493,     0,   486,   647,     0,
-     104,     0,   218,     0,   114,     0,   265,     0,   281,     0,
-     300,     0,   469,     0,   439,     0,   125,   744,   623,     0,
-     382,   647,   647,     0,   367,   647,   626,    60,   626,     0,
-       0,   625,   626,   647,   647,   642,   647,   626,   369,   366,
-     575,   626,   576,   418,   626,   329,   328,   626,   241,   240,
-     626,    83,    82,   626,   492,   626,   106,   105,   626,   220,
-     219,   626,   116,   115,   626,   626,   626,   626,   471,   470,
-     626,   441,   440,   626,   626,   384,   383,   621,   622,   368,
-      66,    62,    59,     0,   626,    34,    31,    32,    33,    38,
-      42,    40,    41,    45,   641,   643,   638,   371,   422,   578,
-     331,   243,    85,   488,   108,   222,   118,   266,   283,   302,
-     473,   443,   127,   386,     0,     0,    28,     0,     0,     0,
+       0,     0,     0,     0,     0,   625,    70,    71,    72,    73,
+      74,    75,   230,   231,   232,   233,   234,   235,   236,   237,
+      76,    77,    78,    79,     0,     0,   623,   652,   646,     0,
+     619,   639,   631,   618,   646,    29,    38,    35,    52,    53,
+      51,    54,    10,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    61,    63,    64,     0,   647,     0,
-       0,     0,     0,     0,     0,   370,   380,   381,   379,   374,
-     372,   377,   378,   375,     0,     0,   421,   427,   428,   426,
-     425,   429,   435,   431,   433,   423,     0,   330,   339,   340,
-     338,   334,   335,   345,   346,   347,   348,   351,   341,   343,
-     344,   349,   350,   332,   336,   337,     0,   242,   252,   253,
-     251,   246,   260,   254,   262,   256,   258,   244,   250,   249,
-     247,     0,    84,    88,    89,    86,    87,     0,   487,   489,
-     490,   107,   111,   112,   110,   109,   221,   224,   225,   223,
-     626,   626,   626,   626,   626,     0,   117,   122,   123,   121,
-     120,   119,     0,     0,   264,   279,   280,   278,   269,   270,
-     272,   275,   267,   276,   277,   273,     0,     0,     0,   282,
-     298,   299,   297,   286,   287,   290,   289,   284,   293,   294,
-     295,   296,   291,     0,     0,   301,   315,   316,   314,   305,
-     317,   319,   325,   321,   323,   303,   310,   311,   312,   313,
-     306,   309,   308,   472,   478,   479,   477,   476,   480,   482,
-     484,   474,   647,   647,   442,   446,   447,   445,   444,   448,
-     450,   452,   454,   126,   132,   133,   131,   626,   129,   130,
-       0,     0,   385,   391,   392,   390,   389,   393,   395,   387,
-      43,   644,     0,     0,     0,     0,     0,     0,   626,   626,
-       0,     0,   626,   626,   626,   626,   626,     0,   626,   626,
-       0,   626,   626,   626,   626,   626,   626,   626,     0,     0,
-     227,   226,   228,   229,   230,     0,     0,     0,   626,   626,
-     626,     0,     0,     0,   626,   626,   626,     0,     0,   626,
-     626,   626,   626,   626,   626,   626,   626,   626,   626,   626,
-     456,   467,   626,   626,   626,   626,   128,     0,     0,   626,
-     626,   626,   647,   647,   544,     0,     0,   647,   647,   548,
-       0,     0,   561,   647,   647,   647,   103,     0,     0,   534,
-     373,   376,     0,   352,     0,   437,   430,   436,   432,   434,
-     424,     0,   342,   333,     0,   261,   255,   263,   257,   259,
-     245,   248,    90,   647,   647,   647,   647,   491,   494,   647,
-     497,   499,   498,     0,     0,   135,     0,   271,   268,   274,
-     608,   647,   556,     0,   647,   609,   552,     0,   610,   647,
-     647,   647,   560,     0,   288,   285,   292,   573,     0,   571,
-       0,   565,     0,   579,   318,   320,   326,   322,   324,   304,
-     307,   481,   483,   485,   475,     0,     0,   449,   451,   453,
-     455,   415,   416,     0,   647,   398,   399,     0,   647,   394,
-     396,   388,   543,   542,   541,   113,   547,   546,   545,   626,
-     563,   562,   100,   102,   101,    99,   626,   536,   535,   626,
-     354,   353,   438,   217,   549,     0,   500,   513,     0,   522,
-     495,   124,   626,   136,   134,   216,   554,   553,   555,   550,
-     551,   559,   558,   557,   570,   647,   567,   566,   569,     0,
-     577,   626,   626,   626,   414,   626,   401,   400,   397,   158,
-     538,   356,   626,    92,   626,     0,     0,   496,     0,   141,
-     572,     0,   580,   458,   458,   422,   403,     0,     0,     0,
-      94,    91,   626,   502,   501,   626,   515,   514,   626,   524,
-     523,     0,     0,     0,   138,   139,   626,   140,   199,   568,
-       0,     0,     0,     0,     0,     0,   564,   161,   162,   159,
-     160,   537,   539,   540,   355,   361,   362,   360,   359,   363,
-     357,     0,     0,   504,   517,   526,     0,     0,   137,     0,
-       0,     0,     0,     0,     0,   144,     0,   147,   145,   146,
-     626,   143,   142,   175,   198,   457,   461,   463,   465,   459,
-     468,   417,   402,   412,   413,   405,   407,   408,   409,   406,
-     410,   411,   626,     0,     0,   626,   626,     0,    93,     0,
-       0,     0,     0,   202,     0,   178,     0,     0,   581,     0,
-       0,     0,   626,   148,   174,   200,   626,   626,   626,   626,
-     404,     0,     0,   364,   358,   647,   647,    98,     0,   503,
-     505,   508,   509,   510,   511,   512,   626,   507,   516,   518,
-     521,   626,   520,   525,   626,   528,   529,   530,   531,   532,
-     533,   626,   203,   626,   626,   179,   177,   153,     0,   647,
-       0,   155,   585,     0,     0,     0,     0,   164,     0,   574,
-     647,   647,   197,     0,   149,   626,   462,   464,   466,   460,
-     215,   214,    97,    96,    95,   506,   519,   527,   205,   201,
-     181,   151,   152,   626,   156,   626,   193,     0,   588,   582,
-       0,   584,   592,   626,   165,   626,   626,   191,   190,   196,
-     195,   194,   176,     0,     0,   158,   154,   597,   587,   591,
-       0,   167,   163,   158,     0,   204,   209,   210,   208,   206,
-     207,     0,   180,   185,   186,   184,   182,   183,     0,   586,
-     589,   593,   590,   595,     0,     0,     0,     0,   157,   650,
-     594,     0,     0,   166,   171,   172,   168,   169,   170,   192,
-     213,     0,   647,   613,   614,   611,   189,     0,   647,   612,
-     651,     0,   596,     0,   211,   212,   187,   188,   650,   650,
-       0,     0,     0,   173,   598,   650,     0,   650,   599,   650,
-       0,     0,   650,   650,     0,     0,   607,   650,   600,   603,
-       0,     0,   650,   604,   605,   602,   650,   601,     0,   650,
-       0,   606
+      69,    64,    66,     0,    56,   625,    17,     0,     0,     0,
+       0,     0,     0,   364,     0,   418,   419,     0,   576,   646,
+       0,   326,     0,   238,     0,    80,   492,     0,   485,   646,
+       0,   103,     0,   217,     0,   113,     0,   264,     0,   280,
+       0,   299,     0,   468,     0,   438,     0,   124,   743,   622,
+       0,   381,   646,   646,     0,   366,   646,   625,    59,   625,
+     624,   625,   646,   646,   641,   646,     0,   625,    33,    30,
+      31,    32,    37,    41,    39,    40,   625,   368,   365,   574,
+     625,   575,   417,   625,   328,   327,   625,   240,   239,   625,
+      82,    81,   625,   491,   625,   105,   104,   625,   219,   218,
+     625,   115,   114,   625,   625,   625,   625,   470,   469,   625,
+     440,   439,   625,   625,   383,   382,   620,   621,   367,    65,
+      61,    58,    44,   640,   642,   637,     0,    27,   370,   421,
+     577,   330,   242,    84,   487,   107,   221,   117,   265,   282,
+     301,   472,   442,   126,   385,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    60,    62,    63,   646,    42,     0,
+       0,     0,     0,     0,     0,   369,   379,   380,   378,   373,
+     371,   376,   377,   374,     0,     0,   420,   426,   427,   425,
+     424,   428,   434,   430,   432,   422,     0,   329,   338,   339,
+     337,   333,   334,   344,   345,   346,   347,   350,   340,   342,
+     343,   348,   349,   331,   335,   336,     0,   241,   251,   252,
+     250,   245,   259,   253,   261,   255,   257,   243,   249,   248,
+     246,     0,    83,    87,    88,    85,    86,     0,   486,   488,
+     489,   106,   110,   111,   109,   108,   220,   223,   224,   222,
+     625,   625,   625,   625,   625,     0,   116,   121,   122,   120,
+     119,   118,     0,     0,   263,   278,   279,   277,   268,   269,
+     271,   274,   266,   275,   276,   272,     0,     0,     0,   281,
+     297,   298,   296,   285,   286,   289,   288,   283,   292,   293,
+     294,   295,   290,     0,     0,   300,   314,   315,   313,   304,
+     316,   318,   324,   320,   322,   302,   309,   310,   311,   312,
+     305,   308,   307,   471,   477,   478,   476,   475,   479,   481,
+     483,   473,   646,   646,   441,   445,   446,   444,   443,   447,
+     449,   451,   453,   125,   131,   132,   130,   625,   128,   129,
+       0,     0,   384,   390,   391,   389,   388,   392,   394,   386,
+     643,     0,     0,     0,     0,     0,     0,   625,   625,     0,
+       0,   625,   625,   625,   625,   625,     0,   625,   625,     0,
+     625,   625,   625,   625,   625,   625,   625,     0,     0,   226,
+     225,   227,   228,   229,     0,     0,     0,   625,   625,   625,
+       0,     0,     0,   625,   625,   625,     0,     0,   625,   625,
+     625,   625,   625,   625,   625,   625,   625,   625,   625,   455,
+     466,   625,   625,   625,   625,   127,     0,     0,   625,   625,
+     625,   646,   646,   543,     0,     0,   646,   646,   547,     0,
+       0,   560,   646,   646,   646,   102,     0,     0,   533,   372,
+     375,     0,   351,     0,   436,   429,   435,   431,   433,   423,
+       0,   341,   332,     0,   260,   254,   262,   256,   258,   244,
+     247,    89,   646,   646,   646,   646,   490,   493,   646,   496,
+     498,   497,     0,     0,   134,     0,   270,   267,   273,   607,
+     646,   555,     0,   646,   608,   551,     0,   609,   646,   646,
+     646,   559,     0,   287,   284,   291,   572,     0,   570,     0,
+     564,     0,   578,   317,   319,   325,   321,   323,   303,   306,
+     480,   482,   484,   474,     0,     0,   448,   450,   452,   454,
+     414,   415,     0,   646,   397,   398,     0,   646,   393,   395,
+     387,   542,   541,   540,   112,   546,   545,   544,   625,   562,
+     561,    99,   101,   100,    98,   625,   535,   534,   625,   353,
+     352,   437,   216,   548,     0,   499,   512,     0,   521,   494,
+     123,   625,   135,   133,   215,   553,   552,   554,   549,   550,
+     558,   557,   556,   569,   646,   566,   565,   568,     0,   576,
+     625,   625,   625,   413,   625,   400,   399,   396,   157,   537,
+     355,   625,    91,   625,     0,     0,   495,     0,   140,   571,
+       0,   579,   457,   457,   421,   402,     0,     0,     0,    93,
+      90,   625,   501,   500,   625,   514,   513,   625,   523,   522,
+       0,     0,     0,   137,   138,   625,   139,   198,   567,     0,
+       0,     0,     0,     0,     0,   563,   160,   161,   158,   159,
+     536,   538,   539,   354,   360,   361,   359,   358,   362,   356,
+       0,     0,   503,   516,   525,     0,     0,   136,     0,     0,
+       0,     0,     0,     0,   143,     0,   146,   144,   145,   625,
+     142,   141,   174,   197,   456,   460,   462,   464,   458,   467,
+     416,   401,   411,   412,   404,   406,   407,   408,   405,   409,
+     410,   625,     0,     0,   625,   625,     0,    92,     0,     0,
+       0,     0,   201,     0,   177,     0,     0,   580,     0,     0,
+       0,   625,   147,   173,   199,   625,   625,   625,   625,   403,
+       0,     0,   363,   357,   646,   646,    97,     0,   502,   504,
+     507,   508,   509,   510,   511,   625,   506,   515,   517,   520,
+     625,   519,   524,   625,   527,   528,   529,   530,   531,   532,
+     625,   202,   625,   625,   178,   176,   152,     0,   646,     0,
+     154,   584,     0,     0,     0,     0,   163,     0,   573,   646,
+     646,   196,     0,   148,   625,   461,   463,   465,   459,   214,
+     213,    96,    95,    94,   505,   518,   526,   204,   200,   180,
+     150,   151,   625,   155,   625,   192,     0,   587,   581,     0,
+     583,   591,   625,   164,   625,   625,   190,   189,   195,   194,
+     193,   175,     0,     0,   157,   153,   596,   586,   590,     0,
+     166,   162,   157,     0,   203,   208,   209,   207,   205,   206,
+       0,   179,   184,   185,   183,   181,   182,     0,   585,   588,
+     592,   589,   594,     0,     0,     0,     0,   156,   649,   593,
+       0,     0,   165,   170,   171,   167,   168,   169,   191,   212,
+       0,   646,   612,   613,   610,   188,     0,   646,   611,   650,
+       0,   595,     0,   210,   211,   186,   187,   649,   649,     0,
+       0,     0,   172,   597,   649,     0,   649,   598,   649,     0,
+       0,   649,   649,     0,     0,   606,   649,   599,   602,     0,
+       0,   649,   603,   604,   601,   649,   600,     0,   649,     0,
+     605
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-   -1058, -1058, -1058,    44, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058,   273, -1058,   277, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058,    41, -1058, -1058,  -242,   288,
-   -1058, -1058,   334,   726,   289, -1058, -1058, -1058, -1058,     1,
-   -1058,   265, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058,  -411, -1058, -1058, -1058, -1058, -1058,  -387,
-   -1058, -1058, -1058, -1058,  -463, -1058,  -178, -1058,  -445, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1057,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058,  -550, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-    -502, -1058, -1058, -1058, -1058, -1058,  -667,  -658,  -402,  -348,
-   -1058,  -167, -1058, -1058,  -181, -1058,    37, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058,    46, -1058, -1058, -1058,
-   -1058, -1058, -1058,    58, -1058, -1058, -1058, -1058, -1058,    64,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,    94,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058,   104, -1058, -1058,
-   -1058, -1058, -1058,   119, -1058,   150,   172, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,  -356, -1058,
-   -1058, -1058, -1058, -1058, -1058,  -421, -1058, -1058,  -176, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058,  -312, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058,  -144, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058, -1058,
-   -1058,  -369, -1058, -1058,  -316, -1058,  -438, -1058,  -332,  -417,
-   -1058,  -405, -1058,   151, -1058, -1058,  -373, -1058,  -849, -1058,
-    -290, -1058, -1058, -1058, -1058,  -340,   329,  -256,  -694, -1058,
-   -1058, -1058, -1058,  -486,  -512, -1058, -1058,  -476, -1058, -1058,
-   -1058,  -498, -1058, -1058, -1058,  -555, -1058, -1058, -1058,  -673,
-    -496, -1058, -1058, -1058,   142,  -192,  -395,   499,  1096, -1058,
-   -1058,   375, -1058, -1058, -1058, -1058,   230, -1058,    -4,   -10,
-     430,   222,  -100, -1058,   526,   377,  -138, -1058
+   -1020, -1020, -1020,   283, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020,   349, -1020,   354, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020,   179, -1020, -1020,  -182,   352, -1020,
+   -1020,  -125,   726,   328, -1020, -1020, -1020, -1020,    89, -1020,
+     317, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020,  -411, -1020, -1020, -1020, -1020, -1020,  -394, -1020,
+   -1020, -1020, -1020,  -404, -1020,  -179, -1020,  -440, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1019, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,  -512, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,  -450,
+   -1020, -1020, -1020, -1020, -1020,  -615,  -607,  -403,  -376, -1020,
+    -172, -1020, -1020,  -194, -1020,   104, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020,   130, -1020, -1020, -1020, -1020,
+   -1020, -1020,   138, -1020, -1020, -1020, -1020, -1020,   156, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,   157, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020,   170, -1020, -1020, -1020,
+   -1020, -1020,   171, -1020,   176,   187, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020,  -367, -1020, -1020,
+   -1020, -1020, -1020, -1020,  -138, -1020, -1020,  -193, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020,  -346, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020,  -148, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+   -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020, -1020,
+    -359, -1020, -1020,  -434, -1020,  -422, -1020,  -370,  -421, -1020,
+    -406, -1020,   175, -1020, -1020,  -380, -1020,  -800, -1020,  -270,
+   -1020, -1020, -1020, -1020,  -362,   345,  -240,  -685, -1020, -1020,
+   -1020, -1020,  -476,  -507, -1020, -1020,  -475, -1020, -1020, -1020,
+    -497, -1020, -1020, -1020,  -553, -1020, -1020, -1020,  -661,  -496,
+   -1020, -1020, -1020,   938,  -175,  -235,   466,  1102, -1020, -1020,
+     376, -1020, -1020, -1020, -1020,   231, -1020,    -4,   -10,   435,
+     415,    90, -1020,   506,   206,  -140, -1020
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    97,    98,   109,   148,    99,     2,   114,   115,
-     103,     3,   118,   119,   127,   128,   122,   123,   141,   195,
-     349,   197,   142,   255,   350,   405,   182,   133,   129,   138,
-     166,   167,   927,   928,   170,   291,   171,   348,   434,   292,
-     345,   192,   193,   232,   313,   233,   372,   442,   525,   845,
-     884,   942,  1018,   479,   727,   319,   234,   377,   444,   480,
-     323,   235,   383,   446,   551,   335,   966,   452,   559,   764,
-     854,   913,   914,   956,   957,  1048,   958,  1050,  1085,   897,
-     959,  1056,  1095,  1134,  1146,   915,  1004,   916,   994,  1046,
-    1104,  1127,  1157,   960,  1098,   961,   962,  1063,   917,   964,
-     918,   992,  1043,  1103,  1120,  1151,   929,   930,   560,   492,
-     321,   967,   380,   445,   481,   311,   239,   369,   441,   666,
-     667,   662,   664,   665,   661,   663,   240,   325,   447,   679,
-     678,   680,   327,   241,   448,   685,   684,   686,   329,   242,
-     449,   694,   695,   689,   690,   692,   693,   691,   309,   243,
-     366,   440,   659,   658,   498,   499,   732,   482,   841,   899,
-     986,   985,   301,   244,   343,   245,   359,   438,   648,   649,
-     339,   246,   396,   453,   711,   709,   710,   816,   817,   637,
-     877,   923,   812,   813,   638,   305,   306,   247,   439,   656,
-     652,   654,   655,   653,   734,   483,   333,   248,   392,   451,
-     702,   703,   704,   705,   621,   805,   920,  1009,  1006,  1007,
-    1008,   622,   806,   331,   484,   389,   450,   699,   696,   697,
-     698,   316,   250,   443,   317,   757,   758,   759,   760,   885,
-     904,   989,   761,   886,   907,   990,   762,   888,   910,   991,
-     728,   485,   838,   898,   471,   715,   472,   720,   519,   579,
-     777,   580,   773,   581,   783,   721,   969,   831,   601,   791,
-     867,   602,   788,   865,  1058,   307,   308,   362,   792,   870,
-    1053,  1054,  1055,  1088,  1089,  1108,  1091,  1092,  1110,  1132,
-    1140,  1129,  1168,  1178,  1188,  1189,  1191,  1196,  1179,   778,
-     779,  1158,  1159,   178,   100,   793,   340,   868,   110,   116,
-     121,   135,   136,   159,   209,   151,   208,   355,   117,     4,
-     137,  1161,   175,   202,   176,   101,   102,   342
+      -1,     1,    97,    98,   109,   147,    99,     2,   114,   115,
+     103,     3,   118,   119,   126,   127,   122,   139,   187,   300,
+     189,   140,   212,   301,   358,   181,   132,   128,   141,   167,
+     168,   926,   927,   171,   293,   172,   349,   435,   294,   346,
+     195,   196,   235,   314,   236,   381,   442,   525,   844,   883,
+     941,  1017,   479,   726,   320,   237,   386,   444,   480,   324,
+     238,   392,   446,   551,   336,   965,   452,   559,   763,   853,
+     912,   913,   955,   956,  1047,   957,  1049,  1084,   896,   958,
+    1055,  1094,  1133,  1145,   914,  1003,   915,   993,  1045,  1103,
+    1126,  1156,   959,  1097,   960,   961,  1062,   916,   963,   917,
+     991,  1042,  1102,  1119,  1150,   928,   929,   560,   492,   322,
+     966,   389,   445,   481,   312,   242,   378,   441,   665,   666,
+     661,   663,   664,   660,   662,   243,   326,   447,   678,   677,
+     679,   328,   244,   448,   684,   683,   685,   330,   245,   449,
+     693,   694,   688,   689,   691,   692,   690,   310,   246,   375,
+     440,   658,   657,   498,   499,   731,   482,   840,   898,   985,
+     984,   302,   247,   344,   248,   368,   438,   647,   648,   340,
+     249,   405,   453,   710,   708,   709,   815,   816,   637,   876,
+     922,   811,   812,   638,   306,   307,   250,   439,   655,   651,
+     653,   654,   652,   733,   483,   334,   251,   401,   451,   701,
+     702,   703,   704,   621,   804,   919,  1008,  1005,  1006,  1007,
+     622,   805,   332,   484,   398,   450,   698,   695,   696,   697,
+     317,   253,   443,   318,   756,   757,   758,   759,   884,   903,
+     988,   760,   885,   906,   989,   761,   887,   909,   990,   727,
+     485,   837,   897,   471,   714,   472,   719,   519,   579,   776,
+     580,   772,   581,   782,   720,   968,   830,   601,   790,   866,
+     602,   787,   864,  1057,   308,   309,   371,   791,   869,  1052,
+    1053,  1054,  1087,  1088,  1107,  1090,  1091,  1109,  1131,  1139,
+    1128,  1167,  1177,  1187,  1188,  1190,  1195,  1178,   777,   778,
+    1157,  1158,   177,   100,   792,   341,   867,   110,   116,   121,
+     134,   135,   158,   208,   150,   207,   354,   117,     4,   136,
+    1160,   174,   201,   175,   101,   102,   343
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1161,235 +1161,226 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      10,    14,   505,   574,    11,    11,   179,   627,   774,   564,
-      10,    16,   238,   814,   818,   236,   263,     6,   298,     7,
-     515,     5,   419,   113,   543,    16,   237,   468,   593,   490,
-     510,   526,   597,   534,   539,   549,   557,   572,   588,   606,
-     617,   626,   635,    16,   598,   180,   575,   131,  1128,   249,
-     628,   469,   770,   491,   511,   106,  1135,   535,   108,   550,
-     558,   573,   589,   607,   618,   473,   636,    16,   520,   470,
-     112,   503,   517,   207,   565,   582,   600,   611,   562,   577,
-     595,   194,    16,    16,   639,    16,   214,   105,   210,   211,
-     212,   213,   107,   252,     6,     6,     7,     7,   486,   561,
-     576,    10,   120,    10,   629,    16,   126,   406,   303,   780,
-     259,   360,   781,   163,   770,   296,    10,    11,   352,   521,
-      11,    11,    11,   462,   504,   518,    16,    11,    16,   771,
-     163,   563,   578,   596,  -583,    11,    11,   163,   184,   185,
-    1027,  1032,   186,   527,     8,   584,   553,   712,   341,   165,
-     187,     6,   713,     7,     6,   104,     7,   113,    11,    11,
-      11,    11,   717,  1015,     9,  1060,   165,   718,  1016,   204,
-    1061,  1028,   463,   165,   163,   891,   924,   925,   139,   140,
-      10,    10,    10,    10,   265,   454,    16,   174,   177,   174,
-      11,   199,   258,   200,  1153,  1154,  1155,    16,  -597,  -597,
-      10,   303,   522,   723,   270,   724,   770,   775,   725,   528,
-     165,    11,    11,    11,    11,    11,    11,    11,    11,    11,
-      11,    11,    11,    11,    11,    11,    11,    11,   361,   941,
-     124,   373,   174,   174,   174,   174,  1087,  1139,   125,   163,
-     630,   163,   384,   924,   925,   263,   926,   385,    16,   297,
-     163,     6,   289,     7,    10,   300,   126,   113,   386,    11,
-     514,   460,   393,   512,   542,   871,    10,   540,   592,   610,
-     872,   590,   608,   619,   513,   165,   948,   165,   541,   403,
-     763,   765,   591,   609,   620,   873,   165,   631,     6,   183,
-       7,   163,   463,    10,   113,   290,    10,   516,   363,   988,
-     464,   544,   552,   911,   215,   594,   912,  1142,   374,  1087,
-     125,   409,  1090,  1143,   196,   198,   304,   486,   163,  1109,
-     315,   459,   632,  1049,   486,   163,   217,   165,  1160,   218,
-     338,   397,   398,   545,  1139,   400,   460,   149,  1174,   150,
-     222,  1175,   163,   414,   415,   461,   416,   224,   225,   462,
-     226,  1177,  1182,   460,   165,   462,   199,  1183,   200,    10,
-     463,   165,   552,   931,  1187,   553,   753,   463,   754,   552,
-      10,   755,   553,   756,  1186,   464,   229,  1192,   165,   230,
-     253,     6,   254,     7,   463,  1199,     6,   113,     7,   134,
-     623,   410,   132,    10,    10,   130,    10,   554,   231,    11,
-     911,   163,     6,   965,     7,   356,   215,   346,   912,   347,
-      10,    10,    10,   302,   546,   310,   312,   314,   146,   320,
-     322,   324,   326,   328,   330,   332,   334,   336,   217,   344,
-     353,   218,   354,   163,   125,   181,   457,   165,    12,    13,
-     459,   403,   163,   486,   460,   357,   206,   358,   641,   224,
-     225,   955,   226,   460,  1065,    11,    11,    11,    11,    11,
-      11,   364,  1005,   365,   461,   566,   567,  1147,   462,   165,
-      11,    11,   168,   404,  1114,   463,  1148,   493,   165,   290,
-     168,   230,    11,   464,   463,   978,   494,   367,   937,   368,
-     584,   553,   370,   162,   371,   789,   163,   375,   495,   376,
-     231,   378,    11,   379,   496,   934,   980,   381,   387,   382,
-     388,  1002,   938,   161,  1115,   399,  1019,    11,   981,   390,
-     161,   391,   161,    11,   164,   394,   829,   395,   830,   836,
-     940,   837,   165,   839,   497,   840,   975,   341,   341,   922,
-     852,    11,   853,   716,   500,   722,  1034,   729,    11,    11,
-     982,  1023,   419,  1038,   143,   144,   145,   741,   842,   501,
-     744,   147,    11,    11,    11,   161,   161,   161,   161,   172,
-     173,   875,  1024,   876,  1039,   976,   882,   766,   883,    11,
-      11,   902,   921,   903,  1025,   264,  1040,  1020,  1029,  1035,
-     502,   979,   188,   189,   190,   191,   163,   163,   924,   925,
-     599,   919,   700,   701,   905,   318,   906,   977,   460,   908,
-    1041,   909,  1042,  1044,   892,  1045,  1026,  1031,  1083,  1093,
-    1084,  1094,  1130,  1096,   251,  1097,    11,    11,   163,  1162,
-     924,   925,   165,   165,  1131,  1141,  1193,    10,   299,   463,
-    1152,  1021,  1030,  1036,   437,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   160,     0,   165,     0,     0,     0,  1138,   531,
-       0,     0,     0,  1022,   201,  1037,     0,   203,     0,   205,
-     264,     0,     0,   407,   411,     0,   714,   174,   719,   174,
-     726,   174,  1118,  1125,     0,     0,    10,    10,     0,     0,
-    1149,   174,   822,   823,   174,     0,     0,   826,   827,   266,
-     267,   268,   269,   832,   833,   834,  1119,  1126,   939,   338,
-     338,   174,     0,     0,     0,   772,   776,   782,     0,     0,
-       0,   787,   790,     0,     0,     0,     0,     0,     0,   968,
-     968,     0,     0,   846,   847,   848,   849,     0,     0,   850,
-       0,   811,   815,     0,     0,     0,     0,     0,     0,     0,
-       0,   856,     0,     0,   858,     0,     0,     0,   455,   860,
-     861,   862,   466,   477,   488,   508,   523,   529,   532,   537,
-     547,   555,   570,   586,   604,   615,   624,   633,    11,     0,
-       0,     0,   733,   735,     0,     0,     0,     0,     0,     0,
-     459,     0,     0,   486,   874,     0,     0,     0,   878,     0,
-     752,     0,     0,     0,   264,     0,     0,     0,    10,    10,
-       0,     0,    10,    10,   461,   566,   567,     0,    10,    10,
-      10,     0,     0,   435,     0,   459,     0,     0,   486,   163,
-       0,     0,    10,    10,    10,    10,    10,   995,   552,     0,
-     460,   553,    10,     0,    10,   890,    10,    10,    10,   461,
-     566,   567,     0,   462,   169,     0,     0,     0,     0,     0,
-      10,     0,   169,   506,    10,   165,  1033,     0,     0,     0,
-       0,     0,     0,  1011,  1012,   545,    10,    11,     0,   642,
-     643,   644,   645,   646,   647,  1107,     0,  1051,     0,  1057,
-    1059,     0,   949,     0,   650,   651,     0,    11,    11,     0,
-       0,   972,   950,     0,     0,     0,   657,   215,  1133,     0,
-      11,    11,     0,     0,   951,   952,     0,     0,     0,   953,
-       0,     0,   954,     0,     0,     0,   660,    11,  -150,   217,
-     459,     0,   218,     0,   163,    11,    11,    11,    11,    11,
-      11,   668,     0,   222,     0,   460,   640,   669,     0,   583,
-     224,   225,     0,   226,     0,   566,   567,     0,   462,  1169,
-     227,   568,     0,     0,     0,   675,   163,     0,     0,     0,
-     165,     0,   676,   677,     0,     0,   463,   460,     0,   229,
-     584,   174,   230,     0,   464,     0,   681,   682,   683,  1194,
-       0,     0,     0,     0,  1197,  1072,  1073,     0,  1201,   475,
-       0,   231,   165,   687,   688,     0,   585,     0,   463,     0,
-     161,     0,   161,     0,   161,  1121,     0,   174,   174,     0,
-       0,  1017,     0,     0,   161,     0,     0,   161,     0,  1082,
-    1047,   174,  1052,   174,   174,  1062,     0,     0,  1122,     0,
-    1099,  1100,     0,     0,   161,   215,     0,     0,     0,     0,
-     707,   708,     0,  1170,   264,   264,     0,     0,    10,    10,
-       0,     0,     0,     0,     0,   408,   412,   217,    10,   459,
-     218,     0,   163,   163,   264,   264,     0,     0,   993,     0,
-       0,   222,     0,     0,   460,    10,    10,     0,   224,   225,
-       0,   226,     0,   461,     0,     0,     0,   462,   227,     0,
-      11,     0,     0,     0,     0,     0,     0,    11,   165,   165,
-       0,     0,     0,     0,   463,   463,     0,   229,     0,     0,
-     230,     0,     0,   464,     0,     0,     0,     0,    11,     0,
-       0,     0,  1165,     0,     0,     0,     0,   475,  1167,   231,
-       0,     0,     0,     0,   536,   465,     0,     0,     0,     0,
-     456,    10,     0,    10,   467,   478,   489,   509,   524,   530,
+      10,    14,   241,   178,    11,    11,   504,   518,   574,   420,
+      10,    16,   627,   563,   578,   596,   169,   239,   505,   773,
+     169,   813,   817,    16,   240,   564,    16,   468,   597,   490,
+     510,   526,   262,   534,   539,   549,   557,   572,   588,   606,
+     617,   626,   635,   598,   469,   575,   491,   511,   252,   628,
+     535,    16,   550,   558,   573,   589,   607,   618,   473,   636,
+       6,   520,     7,   164,   130,    16,   113,   565,   582,   600,
+     611,   561,   576,     6,   769,     7,   629,   297,     6,   470,
+       7,   503,   517,   106,    16,  1127,    16,   105,   562,   577,
+     595,   164,   107,  1134,   639,    16,     6,   527,     7,   166,
+     108,    10,   120,    10,   769,   486,   711,   779,   304,    16,
+     780,   712,     5,   291,   164,    16,    10,    11,   359,    11,
+      11,    11,     6,   125,     7,   112,    11,   166,   113,   369,
+     462,   716,   197,    11,    11,   454,   717,   183,   184,   206,
+       6,   185,     7,   137,   138,     8,   113,   124,   342,   186,
+     166,   770,   584,   553,   356,   148,   521,   149,   295,    11,
+      11,    11,    11,   528,  1014,     9,  1059,   164,   203,  1015,
+     198,  1060,   199,   209,   164,   360,   364,   217,  1027,    10,
+      10,    10,    10,   890,   258,   630,   357,   459,  1026,  1031,
+     486,   257,   722,    11,   723,   164,   264,   724,    16,    10,
+     940,   351,   163,   166,  -582,   164,   460,   272,   370,   463,
+     166,   461,   566,   567,    11,    11,    11,    11,    11,    11,
+      11,    11,    11,    11,    11,    11,    11,    11,    11,    11,
+      11,   166,   631,   165,   179,   552,   382,   463,   553,   522,
+     164,   166,   923,   924,   393,   464,   930,   514,   296,   123,
+      16,   542,   394,    10,   299,   592,   610,   124,    11,   769,
+     774,   262,   512,  1032,  -596,  -596,   540,   632,    10,   513,
+     590,   608,   619,   541,   395,   125,   166,   591,   609,   620,
+      16,   213,   214,   215,   216,   198,   402,   199,  1152,  1153,
+    1154,   304,    10,   516,     6,    10,     7,   544,   870,   372,
+     113,   594,     6,   515,     7,   133,  1141,   543,   947,   383,
+     455,   593,  1142,   466,   477,   488,   508,   523,   529,   532,
+     537,   547,   555,   570,   586,   604,   615,   624,   633,   210,
+     871,   211,   406,   407,  1048,   545,   409,     6,   218,     7,
+     355,   160,   413,   414,   164,   415,   486,   164,   160,   872,
+     160,   164,    11,   124,   987,   460,   164,  1086,  1138,   474,
+     220,   459,   460,   221,   486,   164,   552,   347,    10,   348,
+     752,   352,   753,   353,   910,   754,   460,   755,   911,    10,
+     166,   227,   228,   166,   229,   461,   463,   166,  1089,   463,
+    1086,   552,   166,   463,   553,  1108,   356,   160,   160,   160,
+     160,   166,    10,    10,   366,    10,   367,   463,  1159,    10,
+      10,    10,   373,   263,   374,   464,   546,  1138,   164,   623,
+     923,   924,  1173,   531,  1176,   173,   176,   173,   362,   376,
+    1174,   377,   234,   379,  1182,   380,  1185,   487,   459,   762,
+     764,   486,   164,    12,    13,  1181,   384,   640,   385,   164,
+    1186,   923,   924,   460,   166,    11,    11,    11,    11,    11,
+      11,  1191,  1198,   566,   567,   387,   462,   388,   131,   568,
+      11,    11,   129,   180,   173,   173,   173,   173,   166,   459,
+     363,   145,    11,   164,   463,   166,   552,   936,   976,   553,
+     925,  1064,   464,     6,   460,     7,   390,   205,   391,   113,
+     977,   979,    11,   461,   937,   437,   396,   462,   397,   954,
+     263,   788,   910,  1004,   569,  1001,   980,    11,  1146,   166,
+     911,  1137,   399,    11,   400,   463,  1147,   921,   974,   420,
+     403,   408,   404,   464,   342,   342,   828,   292,   829,   939,
+     841,    11,   981,   835,   493,   836,   975,   920,    11,    11,
+    1033,   838,   978,   839,  1021,   465,  1036,   305,   142,   143,
+     144,   316,    11,    11,    11,   146,  1022,  1023,  1037,  1038,
+     494,   339,   161,   162,   851,   874,   852,   875,   495,    11,
+      11,   881,  1024,   882,  1039,  1019,  1028,  1034,   901,   904,
+     902,   905,   907,  1040,   908,  1041,   496,   497,   191,   192,
+     193,   194,   699,   700,  1043,  1082,  1044,  1083,  1025,  1030,
+     500,   501,  1020,  1029,  1035,   164,   502,   923,   924,  1092,
+     918,  1093,   459,   319,   599,   486,    11,    11,  1095,   891,
+    1096,  1129,   254,  1161,  1130,  1140,    10,  1192,   298,  1151,
+     200,   159,   263,   202,   436,   204,   461,   566,   567,     0,
+     462,   166,     0,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+       0,     0,   584,   553,     0,     0,     0,     0,     0,   268,
+     269,   270,   271,     0,     0,     0,   164,  1148,     0,     0,
+       0,  1117,  1124,     0,     0,    10,    10,   460,  1018,   292,
+       0,   821,   822,     0,   938,   164,   825,   826,  1118,  1125,
+       0,     0,   831,   832,   833,     0,   460,     0,  1113,     0,
+       0,     0,   166,     0,     0,   967,   967,     0,   463,     0,
+       0,     0,   715,     0,   721,     0,   728,   218,     0,     0,
+       0,   166,   845,   846,   847,   848,   740,   463,   849,   743,
+       0,     0,     0,     0,  1120,     0,     0,     0,  1114,   220,
+     855,     0,   221,   857,   164,     0,   765,     0,   859,   860,
+     861,     0,   931,   934,     0,   460,     0,  1121,     0,     0,
+     227,   228,     0,   229,     0,     0,     0,    11,     0,     0,
+       0,   416,     0,   545,     0,     0,   477,   972,     0,     0,
+     166,     0,     0,   873,     0,     0,   463,   877,     0,     0,
+     948,     0,   233,     0,   464,     0,     0,    10,    10,     0,
+     949,    10,    10,     0,     0,     0,     0,    10,    10,    10,
+       0,   234,   950,   951,     0,     0,   933,   952,     0,     0,
+     953,    10,    10,    10,    10,    10,  -149,     0,   160,     0,
+     160,    10,   160,    10,   889,    10,    10,    10,     0,     0,
+       0,     0,   160,     0,     0,   160,     0,   170,     0,    10,
+       0,   170,     0,    10,     0,     0,   459,     0,     0,   486,
+     164,     0,   160,     0,     0,    10,    11,     0,     0,     0,
+       0,   460,   263,   263,   641,   642,   643,   644,   645,   646,
+     461,   566,   567,   458,   462,     0,    11,    11,     0,   649,
+     650,  1106,   263,   263,   506,     0,   166,     0,     0,    11,
+      11,   656,     0,     0,   713,   173,   718,   173,   725,   173,
+       0,     0,     0,     0,  1132,     0,    11,     0,     0,   173,
+       0,   659,   173,     0,    11,    11,    11,    11,    11,    11,
+       0,   104,   971,     0,   218,     0,   667,   339,   339,   173,
+       0,     0,   668,   771,   775,   781,     0,     0,     0,   786,
+     789,     0,     0,     0,     0,   474,   220,  1115,  1122,   221,
+     674,   164,     0,     0,     0,  1168,     0,   675,   676,   810,
+     814,     0,   460,     0,     0,     0,     0,   227,   228,     0,
+     229,   680,   681,   682,  1071,  1072,     0,   230,  1143,     0,
+       0,     0,     0,     0,     0,  1193,     0,   166,   686,   687,
+    1196,     0,     0,   463,  1200,     0,   361,   365,     0,   233,
+       0,   464,     0,   164,     0,     0,   994,     0,  1081,     0,
+       0,     0,   225,     0,   460,     0,   475,   612,   234,  1098,
+    1099,     0,     0,   476,     0,     0,     0,     0,     0,     0,
+     218,     0,   613,     0,     0,   706,   707,    10,    10,   166,
+       0,     0,  1010,  1011,   263,   463,     0,    10,   232,     0,
+       0,     0,   220,     0,   182,   221,  1050,   164,  1056,  1058,
+       0,     0,     0,     0,    10,    10,   225,     0,   460,   188,
+     190,     0,     0,   227,   228,   614,   229,     0,     0,    11,
+       0,   462,     0,     0,     0,     0,    11,     0,     0,     0,
+       0,     0,     0,   166,     0,     0,     0,     0,     0,   463,
+       0,     0,   232,     0,     0,   233,     0,    11,     0,     0,
+       0,  1164,     0,     0,     0,     0,     0,  1166,     0,     0,
+       0,     0,   160,     0,   234,     0,     0,     0,     0,   603,
+      10,   456,    10,     0,   467,   478,   489,   509,   524,   530,
      533,   538,   548,   556,   571,   587,   605,   616,   625,   634,
-    1150,  1156,   163,     0,     0,     0,     0,     0,     0,     0,
-       0,   222,     0,   460,     0,     0,   612,     0,   215,     0,
-       0,     0,     0,     0,   111,     0,     0,   174,     0,     0,
-       0,   613,     0,     0,   824,   825,     0,     0,   165,   828,
-     217,   459,   869,   218,   463,   163,   835,   229,     0,     0,
-       0,     0,   932,   935,   222,     0,   460,     0,     0,     0,
-     843,   224,   225,   844,   226,     0,   264,     0,     0,   462,
-       0,   227,     0,     0,   614,     0,   477,   973,   215,   506,
-       0,   165,   851,     0,     0,   855,     0,   463,     0,     0,
-     229,     0,   857,   230,     0,   464,   859,     0,     0,     0,
-     217,     0,   863,   218,     0,     0,     0,   864,     0,   866,
-     475,     0,   231,     0,   222,   256,   257,   507,     0,     0,
-     215,   224,   225,   260,   226,     0,     0,     0,     0,   462,
-       0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
-       0,   869,   217,     0,   161,   218,     0,     0,   288,     0,
-     229,   219,   220,   230,   221,     0,   222,   223,     0,     0,
-       0,   946,   947,   224,   225,     0,   226,   887,   293,   294,
-       0,   295,   231,   227,   983,   984,     0,   970,     0,     0,
-     161,   161,     0,     0,     0,     0,     0,     0,   228,     0,
-       0,   987,   229,     0,   161,   230,   161,   161,     0,   996,
-     997,   998,   999,  1000,  1001,   459,     0,     0,   486,   163,
-    1171,  1172,   351,     0,   231,     0,     0,  1176,     0,  1180,
-     460,  1181,     0,     0,  1184,  1185,     0,     0,     0,  1190,
-     566,   567,     0,   462,  1195,     0,   568,     0,  1198,     0,
-       0,  1200,     0,     0,     0,   165,     0,     0,     0,   215,
-       0,   463,     0,   552,     0,     0,   553,  1116,  1123,   464,
-       0,     0,   401,     0,   402,     0,     0,     0,   413,     0,
-     474,   217,   459,   417,   218,   486,   163,   418,     0,     0,
-     420,   569,     0,   421,   264,     0,   422,   460,  1144,   423,
-       0,   424,   224,   225,   425,   226,   461,   426,     0,     0,
-     427,   428,   429,   430,     0,     0,   431,   264,     0,   432,
-     433,     0,   165,     0,     0,     0,     0,     0,   463,     0,
-     436,     0,     0,     0,     0,     0,   464,     0,     0,     0,
-    1070,  1071,   215,     0,     0,     0,     0,  1074,     0,     0,
-       0,     0,     0,   231,     0,     0,     0,     0,   487,     0,
-       0,     0,     0,   474,   217,     0,     0,   218,   264,   163,
-     161,     0,     0,     0,  1136,     0,     0,  1081,     0,     0,
-     460,  1137,  1086,     0,     0,   224,   225,     0,   226,     0,
-       0,     0,  1101,     0,     0,   227,     0,     0,   264,     0,
-       0,     0,  1163,   264,     0,   165,     0,   264,     0,     0,
-       0,   463,     0,     0,     0,     0,     0,   230,   215,   464,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   475,     0,   231,     0,     0,   474,
-     217,   476,     0,   218,     0,   163,     0,     0,     0,     0,
-       0,     0,     0,     0,   933,   936,   460,     0,     0,     0,
-       0,   224,   225,     0,   226,     0,   670,   671,   672,   673,
-     674,   227,     0,     0,     0,     0,     0,     0,   478,   974,
-    1164,   165,     0,     0,     0,     0,  1166,   463,     0,     0,
-       0,     0,     0,   230,     0,   464,     0,     0,     0,  1173,
-       0,   215,     0,     0,     0,     0,     0,     0,     0,     0,
-     475,     0,   231,     0,     0,     0,     0,   971,     0,     0,
-       0,     0,     0,   217,     0,     0,   218,     0,   163,     0,
-       0,     0,     0,     0,     0,     0,     0,   222,     0,   460,
-       0,     0,     0,     0,   224,   225,     0,   226,     0,     0,
-       0,     0,   462,   706,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   165,     0,     0,     0,     0,     0,
-     463,     0,     0,   229,   730,   731,   230,     0,   736,   737,
-     738,   739,   740,     0,   742,   743,     0,   745,   746,   747,
-     748,   749,   750,   751,     0,   231,     0,     0,     0,     0,
-     603,     0,     0,     0,   767,   768,   769,     0,     0,     0,
-     784,   785,   786,     0,     0,   794,   795,   796,   797,   798,
-     799,   800,   801,   802,   803,   804,     0,     0,   807,   808,
-     809,   810,     0,     0,     0,   819,   820,   821,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1117,
-    1124,     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,
-    1145,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     823,   824,     0,     0,     0,   827,     0,     0,   160,   160,
+       0,     0,   834,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   160,     0,   160,   160,   842,     0,     0,   843,
+     111,   303,     0,   311,   313,   315,     0,   321,   323,   325,
+     327,   329,   331,   333,   335,   337,   868,   345,   850,   173,
+       0,   854,     0,     0,     0,     0,     0,     0,   856,     0,
+       0,     0,   858,     0,     0,     0,     0,     0,   862,     0,
+       0,     0,  1169,   863,     0,   865,     0,     0,     0,     0,
+       0,     0,     0,   218,     0,   173,   173,     0,     0,  1016,
+       0,     0,     0,     0,     0,     0,     0,     0,  1046,   173,
+    1051,   173,   173,  1061,     0,   220,     0,     0,   221,     0,
+     164,     0,   263,     0,     0,     0,     0,     0,     0,   225,
+     255,   256,     0,     0,     0,   218,   227,   228,   259,   229,
+       0,   265,   266,   886,   267,   263,   230,     0,     0,     0,
+       0,     0,     0,     0,     0,   868,   166,   220,   218,     0,
+     221,     0,   463,     0,     0,   232,     0,   290,   233,     0,
+       0,   225,     0,     0,     0,   945,   946,     0,   227,   228,
+     220,   229,     0,   221,     0,   475,   462,   234,   982,   983,
+       0,     0,   536,     0,   225,     0,   263,     0,   160,     0,
+       0,   227,   228,     0,   229,   986,     0,   232,     0,   462,
+     233,     0,     0,   995,   996,   997,   998,   999,  1000,     0,
+       0,     0,     0,     0,     0,     0,   263,   350,     0,   234,
+     232,   263,     0,   233,   964,   263,   459,     0,     0,   486,
+     164,     0,     0,     0,     0,     0,     0,     0,  1149,  1155,
+       0,   460,   234,     0,     0,     0,     0,   969,     0,     0,
+     461,     0,     0,     0,   462,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,   166,     0,     0,   410,
+       0,   411,   463,   412,   552,     0,     0,   553,     0,   417,
+     464,     0,     0,     0,     0,     0,     0,     0,   418,     0,
+       0,     0,   419,     0,     0,   421,  1069,  1070,   422,     0,
+       0,   423,   554,  1073,   424,     0,   425,   218,     0,   426,
+       0,     0,   427,     0,     0,   428,   429,   430,   431,     0,
+       0,   432,     0,     0,   433,   434,     0,     0,     0,   220,
+     459,     0,   221,  1080,   164,     0,     0,     0,  1085,     0,
+       0,     0,     0,   225,     0,   460,     0,     0,  1100,   583,
+     227,   228,     0,   229,     0,   566,   567,     0,   462,     0,
+     230,   568,     0,     0,     0,     0,     0,     0,  1135,     0,
+     166,     0,     0,     0,     0,  1136,   463,     0,     0,   232,
+     584,     0,   233,     0,   464,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1162,     0,     0,   475,
+       0,   234,  1170,  1171,     0,     0,   585,   732,   734,  1175,
+       0,  1179,     0,  1180,     0,     0,  1183,  1184,     0,     0,
+       0,  1189,     0,     0,     0,   751,  1194,     0,     0,     0,
+    1197,     0,     0,  1199,     0,     0,  1163,     0,     0,     0,
+       0,     0,  1165,   932,   935,     0,     0,     0,     0,     0,
+       0,     0,     0,    15,     0,  1172,     0,     0,     0,    17,
+     260,     0,   669,   670,   671,   672,   673,   478,   973,    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,   705,
+       0,     0,   261,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   729,
+     730,     0,     0,   735,   736,   737,   738,   739,     0,   741,
+     742,     0,   744,   745,   746,   747,   748,   749,   750,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   766,
+     767,   768,     0,     0,     0,   783,   784,   785,     0,     0,
+     793,   794,   795,   796,   797,   798,   799,   800,   801,   802,
+     803,     0,     0,   806,   807,   808,   809,     0,     0,   218,
+     818,   819,   820,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1116,  1123,
+       0,   220,   459,     0,   221,     0,   164,     0,     0,     0,
+       0,     0,     0,     0,   218,   225,     0,   460,     0,     0,
+       0,     0,   227,   228,     0,   229,     0,     0,     0,  1144,
+     462,     0,   230,     0,     0,   474,   220,     0,     0,   221,
+     506,   164,   166,     0,     0,     0,     0,     0,   463,     0,
+       0,   232,   460,   992,   233,     0,   464,   227,   228,     0,
+     229,     0,     0,     0,     0,     0,     0,   230,     0,     0,
+       0,   475,     0,   234,     0,     0,     0,   166,   507,     0,
+       0,     0,     0,   463,     0,     0,     0,     0,     0,   233,
+       0,   464,     0,     0,   218,     0,     0,     0,     0,     0,
+     878,     0,     0,     0,     0,     0,   475,   879,   234,     0,
+     880,   219,     0,   970,     0,     0,   220,     0,     0,   221,
+       0,     0,     0,   888,     0,   222,   223,     0,   224,     0,
+     225,   226,     0,     0,     0,     0,     0,   227,   228,     0,
+     229,     0,   892,   893,   894,     0,   895,   230,     0,     0,
+       0,     0,     0,   899,     0,   900,     0,     0,     0,     0,
+       0,     0,   231,     0,     0,     0,   232,     0,     0,   233,
+       0,     0,     0,   942,     0,     0,   943,     0,     0,   944,
+       0,     0,     0,     0,     0,     0,     0,   962,   234,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1002,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   879,     0,     0,     0,     0,
-       0,     0,   880,     0,     0,   881,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   889,     0,
+       0,     0,     0,  1009,     0,     0,  1012,  1013,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   893,   894,   895,
-       0,   896,     0,     0,     0,     0,     0,     0,   900,     0,
-     901,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   943,     0,
-       0,   944,     0,     0,   945,     0,     0,     0,     0,     0,
-       0,     0,   963,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1063,     0,     0,     0,  1065,  1066,  1067,
+    1068,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1074,     0,     0,
+       0,     0,  1075,     0,     0,  1076,     0,     0,     0,     0,
+       0,     0,  1077,     0,  1078,  1079,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1101,     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,  1003,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1010,     0,
-       0,  1013,  1014,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1064,     0,
-       0,     0,  1066,  1067,  1068,  1069,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1075,     0,     0,     0,     0,  1076,     0,     0,
-    1077,     0,     0,     0,     0,     0,     0,  1078,     0,  1079,
-    1080,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1102,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    15,     0,  1105,
-       0,  1106,     0,    17,   261,     0,     0,     0,     0,  1111,
-       0,  1112,  1113,    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,   262,     0,    17,   261,
-       0,     0,     0,     0,     0,     0,     0,     0,    18,    19,
+       0,     0,    15,     0,  1104,     0,  1105,     0,    17,   260,
+       0,     0,     0,     0,  1110,     0,  1111,  1112,    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,
@@ -1398,8 +1389,8 @@
       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,   458,   152,   153,    17,   154,   155,     0,     0,     0,
-     156,   157,   158,     0,    18,    19,    20,    21,    22,    23,
+       0,   457,   151,   152,    17,   153,   154,     0,     0,     0,
+     155,   156,   157,     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,
@@ -1407,8 +1398,8 @@
       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,   153,    17,
-     154,   155,     0,     0,     0,   156,   157,   158,     0,    18,
+      94,    95,    96,    15,     0,     0,     0,    16,   152,    17,
+     153,   154,     0,     0,     0,   155,   156,   157,     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,
@@ -1417,7 +1408,7 @@
       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,   337,     0,     0,     0,     0,
+       0,     0,    16,     0,    17,   338,     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,
@@ -1427,7 +1418,7 @@
       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,
-     261,     0,     0,     0,     0,     0,     0,     0,     0,    18,
+     260,     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,
@@ -1436,7 +1427,7 @@
       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,   261,     0,     0,  1090,     0,
+       0,     0,     0,     0,    17,   260,     0,     0,  1089,     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,
@@ -1446,7 +1437,7 @@
       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,
-     261,     0,     0,  1187,     0,     0,     0,     0,     0,    18,
+     260,     0,     0,  1186,     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,
@@ -1454,8 +1445,8 @@
       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,  1160,
-       0,     0,     0,     0,    17,   261,     0,     0,     0,     0,
+      89,    90,    91,    92,    93,    94,    95,    96,    15,  1159,
+       0,     0,     0,     0,    17,   260,     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,
@@ -1474,7 +1465,7 @@
       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,   261,     0,     0,     0,     0,
+       0,     0,     0,     0,    17,   260,     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,
@@ -1488,235 +1479,226 @@
 
 static const yytype_int16 yycheck[] =
 {
-       4,    11,   440,   448,     8,     9,   144,   452,   681,   447,
-      14,     8,   193,   707,   708,   193,   208,     5,   260,     7,
-     441,     0,   362,    11,   445,     8,   193,   438,   449,   440,
-     441,   442,   449,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,     8,   449,   145,   448,    23,  1105,   193,
-     452,   438,    17,   440,   441,   102,  1113,   444,   102,   446,
-     447,   448,   449,   450,   451,   438,   453,     8,   441,   438,
-     101,   440,   441,   102,   447,   448,   449,   450,   447,   448,
-     449,    70,     8,     8,   453,     8,   103,    97,   188,   189,
-     190,   191,   102,   102,     5,     5,     7,     7,    30,   447,
-     448,   105,   112,   107,   452,     8,    82,   349,   105,    92,
-     103,   303,    95,    31,    17,   103,   120,   121,   103,    20,
-     124,   125,   126,    55,   440,   441,     8,   131,     8,    94,
-      31,   447,   448,   449,    14,   139,   140,    31,   148,   149,
-     989,   990,   152,    37,    54,    77,    78,    88,   286,    67,
-     160,     5,    93,     7,     5,    13,     7,    11,   162,   163,
-     164,   165,    88,    88,    74,    88,    67,    93,    93,   179,
-      93,   103,    73,    67,    31,   869,    33,    34,    43,    44,
-     184,   185,   186,   187,   101,   103,     8,   143,   144,   145,
-     194,   102,   202,   104,    16,    17,    18,     8,   105,   106,
-     204,   105,   103,    85,   214,    87,    17,    18,    90,   103,
-      67,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   102,    83,
-      56,   102,   188,   189,   190,   191,   105,   106,    64,    31,
-      21,    31,   102,    33,    34,   437,   103,   102,     8,   259,
-      31,     5,    12,     7,   258,   265,    82,    11,   102,   263,
-     441,    42,   102,   441,   445,   102,   270,   445,   449,   450,
-     102,   449,   450,   451,   441,    67,   103,    67,   445,    71,
-     675,   676,   449,   450,   451,   102,    67,    68,     5,   147,
-       7,    31,    73,   297,    11,   251,   300,   441,   308,   103,
-      81,   445,    75,    24,     4,   449,    32,    97,   318,   105,
-      64,   103,    14,   103,   172,   173,   272,    30,    31,   105,
-     276,    27,   103,   996,    30,    31,    26,    67,     5,    29,
-     286,   341,   342,    22,   106,   345,    42,   102,   107,   104,
-      40,   108,    31,   353,   354,    51,   356,    47,    48,    55,
-      50,    85,   109,    42,    67,    55,   102,   105,   104,   363,
-      73,    67,    75,   103,    14,    78,    84,    73,    86,    75,
-     374,    89,    78,    91,   110,    81,    76,   105,    67,    79,
-     102,     5,   104,     7,    73,   105,     5,    11,     7,     8,
-     103,   350,   119,   397,   398,   118,   400,   103,    98,   403,
-      24,    31,     5,   103,     7,     8,     4,   102,    32,   104,
-     414,   415,   416,   271,   103,   273,   274,   275,   130,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,    26,   287,
-     102,    29,   104,    31,    64,   146,   435,    67,     8,     9,
-      27,    71,    31,    30,    42,   102,   181,   104,   458,    47,
-      48,   914,    50,    42,  1004,   459,   460,   461,   462,   463,
-     464,   102,   964,   104,    51,    52,    53,  1134,    55,    67,
-     474,   475,   138,   103,    63,    73,  1134,   440,    67,   435,
-     146,    79,   486,    81,    73,   923,   440,   102,   899,   104,
-      77,    78,   102,    28,   104,   687,    31,   102,   440,   104,
-      98,   102,   506,   104,   440,   103,   923,   102,   102,   104,
-     104,   956,   899,   136,   103,   343,   103,   521,   923,   102,
-     143,   104,   145,   527,    59,   102,   102,   104,   104,   102,
-     899,   104,    67,   102,   440,   104,   923,   675,   676,   895,
-     102,   545,   104,   643,   440,   645,   991,   647,   552,   553,
-     923,   989,   892,   991,   124,   125,   126,   657,   734,   440,
-     660,   131,   566,   567,   568,   188,   189,   190,   191,   139,
-     140,   102,   989,   104,   991,   923,   102,   677,   104,   583,
-     584,   102,   894,   104,   989,   208,   991,   989,   990,   991,
-     440,   923,   162,   163,   164,   165,    31,    31,    33,    34,
-     449,   891,   612,   613,   102,   276,   104,   923,    42,   102,
-     102,   104,   104,   102,   870,   104,   989,   990,   102,   102,
-     104,   104,  1108,   102,   194,   104,   630,   631,    31,  1141,
-      33,    34,    67,    67,  1110,  1133,  1191,   641,   263,    73,
-    1136,   989,   990,   991,   414,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   136,    -1,    67,    -1,    -1,    -1,   103,   103,
-      -1,    -1,    -1,   989,   175,   991,    -1,   178,    -1,   180,
-     303,    -1,    -1,   349,   350,    -1,   642,   643,   644,   645,
-     646,   647,  1103,  1104,    -1,    -1,   700,   701,    -1,    -1,
-     103,   657,   712,   713,   660,    -1,    -1,   717,   718,   210,
-     211,   212,   213,   723,   724,   725,  1103,  1104,   899,   675,
-     676,   677,    -1,    -1,    -1,   681,   682,   683,    -1,    -1,
-      -1,   687,   688,    -1,    -1,    -1,    -1,    -1,    -1,   920,
-     921,    -1,    -1,   753,   754,   755,   756,    -1,    -1,   759,
-      -1,   707,   708,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   771,    -1,    -1,   774,    -1,    -1,    -1,   434,   779,
-     780,   781,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   453,   792,    -1,
-      -1,    -1,   650,   651,    -1,    -1,    -1,    -1,    -1,    -1,
-      27,    -1,    -1,    30,   814,    -1,    -1,    -1,   818,    -1,
-     668,    -1,    -1,    -1,   437,    -1,    -1,    -1,   822,   823,
-      -1,    -1,   826,   827,    51,    52,    53,    -1,   832,   833,
-     834,    -1,    -1,   403,    -1,    27,    -1,    -1,    30,    31,
-      -1,    -1,   846,   847,   848,   849,   850,   947,    75,    -1,
-      42,    78,   856,    -1,   858,   865,   860,   861,   862,    51,
-      52,    53,    -1,    55,   138,    -1,    -1,    -1,    -1,    -1,
-     874,    -1,   146,    65,   878,    67,   103,    -1,    -1,    -1,
-      -1,    -1,    -1,   983,   984,    22,   890,   891,    -1,   459,
-     460,   461,   462,   463,   464,  1087,    -1,   997,    -1,   999,
-    1000,    -1,    39,    -1,   474,   475,    -1,   911,   912,    -1,
-      -1,   103,    49,    -1,    -1,    -1,   486,     4,  1110,    -1,
-     924,   925,    -1,    -1,    61,    62,    -1,    -1,    -1,    66,
-      -1,    -1,    69,    -1,    -1,    -1,   506,   941,    75,    26,
-      27,    -1,    29,    -1,    31,   949,   950,   951,   952,   953,
-     954,   521,    -1,    40,    -1,    42,   457,   527,    -1,    46,
-      47,    48,    -1,    50,    -1,    52,    53,    -1,    55,  1161,
-      57,    58,    -1,    -1,    -1,   545,    31,    -1,    -1,    -1,
-      67,    -1,   552,   553,    -1,    -1,    73,    42,    -1,    76,
-      77,   947,    79,    -1,    81,    -1,   566,   567,   568,  1191,
-      -1,    -1,    -1,    -1,  1196,  1015,  1016,    -1,  1200,    96,
-      -1,    98,    67,   583,   584,    -1,   103,    -1,    73,    -1,
-     643,    -1,   645,    -1,   647,    80,    -1,   983,   984,    -1,
-      -1,   987,    -1,    -1,   657,    -1,    -1,   660,    -1,  1049,
-     996,   997,   998,   999,  1000,  1001,    -1,    -1,   103,    -1,
-    1060,  1061,    -1,    -1,   677,     4,    -1,    -1,    -1,    -1,
-     630,   631,    -1,  1163,   687,   688,    -1,    -1,  1072,  1073,
-      -1,    -1,    -1,    -1,    -1,   349,   350,    26,  1082,    27,
-      29,    -1,    31,    31,   707,   708,    -1,    -1,   946,    -1,
-      -1,    40,    -1,    -1,    42,  1099,  1100,    -1,    47,    48,
-      -1,    50,    -1,    51,    -1,    -1,    -1,    55,    57,    -1,
-    1114,    -1,    -1,    -1,    -1,    -1,    -1,  1121,    67,    67,
-      -1,    -1,    -1,    -1,    73,    73,    -1,    76,    -1,    -1,
-      79,    -1,    -1,    81,    -1,    -1,    -1,    -1,  1142,    -1,
-      -1,    -1,  1152,    -1,    -1,    -1,    -1,    96,  1158,    98,
-      -1,    -1,    -1,    -1,   103,   103,    -1,    -1,    -1,    -1,
-     434,  1165,    -1,  1167,   438,   439,   440,   441,   442,   443,
+       4,    11,   196,   143,     8,     9,   440,   441,   448,   371,
+      14,     8,   452,   447,   448,   449,   141,   196,   440,   680,
+     145,   706,   707,     8,   196,   447,     8,   438,   449,   440,
+     441,   442,   207,   444,   445,   446,   447,   448,   449,   450,
+     451,   452,   453,   449,   438,   448,   440,   441,   196,   452,
+     444,     8,   446,   447,   448,   449,   450,   451,   438,   453,
+       5,   441,     7,    31,    23,     8,    11,   447,   448,   449,
+     450,   447,   448,     5,    17,     7,   452,   259,     5,   438,
+       7,   440,   441,   102,     8,  1104,     8,    97,   447,   448,
+     449,    31,   102,  1112,   453,     8,     5,    37,     7,    67,
+     102,   105,   112,   107,    17,    30,    88,    92,   105,     8,
+      95,    93,     0,    12,    31,     8,   120,   121,   300,   123,
+     124,   125,     5,    82,     7,   101,   130,    67,    11,   304,
+      55,    88,    70,   137,   138,   103,    93,   147,   148,   102,
+       5,   151,     7,    43,    44,    54,    11,    64,   288,   159,
+      67,    94,    77,    78,    71,   102,    20,   104,   103,   163,
+     164,   165,   166,   103,    88,    74,    88,    31,   178,    93,
+     102,    93,   104,   102,    31,   300,   301,   103,   103,   183,
+     184,   185,   186,   868,   103,    21,   103,    27,   988,   989,
+      30,   201,    85,   197,    87,    31,   101,    90,     8,   203,
+      83,   103,    28,    67,    14,    31,    42,   217,   102,    73,
+      67,    51,    52,    53,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,    67,    68,    59,   144,    75,   102,    73,    78,   103,
+      31,    67,    33,    34,   102,    81,   103,   441,   258,    56,
+       8,   445,   102,   257,   264,   449,   450,    64,   262,    17,
+      18,   436,   441,   103,   105,   106,   445,   103,   272,   441,
+     449,   450,   451,   445,   102,    82,    67,   449,   450,   451,
+       8,   191,   192,   193,   194,   102,   102,   104,    16,    17,
+      18,   105,   296,   441,     5,   299,     7,   445,   102,   309,
+      11,   449,     5,   441,     7,     8,    97,   445,   103,   319,
+     435,   449,   103,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   102,
+     102,   104,   342,   343,   995,    22,   346,     5,     4,     7,
+       8,   135,   352,   353,    31,   355,    30,    31,   142,   102,
+     144,    31,   356,    64,   103,    42,    31,   105,   106,    25,
+      26,    27,    42,    29,    30,    31,    75,   102,   372,   104,
+      84,   102,    86,   104,    24,    89,    42,    91,    32,   383,
+      67,    47,    48,    67,    50,    51,    73,    67,    14,    73,
+     105,    75,    67,    73,    78,   105,    71,   191,   192,   193,
+     194,    67,   406,   407,   102,   409,   104,    73,     5,   413,
+     414,   415,   102,   207,   104,    81,   103,   106,    31,   103,
+      33,    34,   107,   103,    85,   142,   143,   144,   103,   102,
+     108,   104,    98,   102,   105,   104,   110,   103,    27,   674,
+     675,    30,    31,     8,     9,   109,   102,   457,   104,    31,
+      14,    33,    34,    42,    67,   459,   460,   461,   462,   463,
+     464,   105,   105,    52,    53,   102,    55,   104,   119,    58,
+     474,   475,   118,   145,   191,   192,   193,   194,    67,    27,
+     301,   129,   486,    31,    73,    67,    75,   898,   922,    78,
+     103,  1003,    81,     5,    42,     7,   102,   180,   104,    11,
+     922,   922,   506,    51,   898,   416,   102,    55,   104,   913,
+     304,   686,    24,   963,   103,   955,   922,   521,  1133,    67,
+      32,   103,   102,   527,   104,    73,  1133,   894,   922,   891,
+     102,   344,   104,    81,   674,   675,   102,   254,   104,   898,
+     733,   545,   922,   102,   440,   104,   922,   893,   552,   553,
+     990,   102,   922,   104,   988,   103,   990,   274,   123,   124,
+     125,   278,   566,   567,   568,   130,   988,   988,   990,   990,
+     440,   288,   137,   138,   102,   102,   104,   104,   440,   583,
+     584,   102,   988,   104,   990,   988,   989,   990,   102,   102,
+     104,   104,   102,   102,   104,   104,   440,   440,   163,   164,
+     165,   166,   612,   613,   102,   102,   104,   104,   988,   989,
+     440,   440,   988,   989,   990,    31,   440,    33,    34,   102,
+     890,   104,    27,   278,   449,    30,   630,   631,   102,   869,
+     104,  1107,   197,  1140,  1109,  1132,   640,  1190,   262,  1135,
+     174,   135,   436,   177,   413,   179,    51,    52,    53,    -1,
+      55,    67,    -1,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,   213,
+     214,   215,   216,    -1,    -1,    -1,    31,   103,    -1,    -1,
+      -1,  1102,  1103,    -1,    -1,   699,   700,    42,   103,   416,
+      -1,   711,   712,    -1,   898,    31,   716,   717,  1102,  1103,
+      -1,    -1,   722,   723,   724,    -1,    42,    -1,    63,    -1,
+      -1,    -1,    67,    -1,    -1,   919,   920,    -1,    73,    -1,
+      -1,    -1,   642,    -1,   644,    -1,   646,     4,    -1,    -1,
+      -1,    67,   752,   753,   754,   755,   656,    73,   758,   659,
+      -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,   103,    26,
+     770,    -1,    29,   773,    31,    -1,   676,    -1,   778,   779,
+     780,    -1,   897,   898,    -1,    42,    -1,   103,    -1,    -1,
+      47,    48,    -1,    50,    -1,    -1,    -1,   791,    -1,    -1,
+      -1,   356,    -1,    22,    -1,    -1,   921,   922,    -1,    -1,
+      67,    -1,    -1,   813,    -1,    -1,    73,   817,    -1,    -1,
+      39,    -1,    79,    -1,    81,    -1,    -1,   821,   822,    -1,
+      49,   825,   826,    -1,    -1,    -1,    -1,   831,   832,   833,
+      -1,    98,    61,    62,    -1,    -1,   103,    66,    -1,    -1,
+      69,   845,   846,   847,   848,   849,    75,    -1,   642,    -1,
+     644,   855,   646,   857,   864,   859,   860,   861,    -1,    -1,
+      -1,    -1,   656,    -1,    -1,   659,    -1,   141,    -1,   873,
+      -1,   145,    -1,   877,    -1,    -1,    27,    -1,    -1,    30,
+      31,    -1,   676,    -1,    -1,   889,   890,    -1,    -1,    -1,
+      -1,    42,   686,   687,   459,   460,   461,   462,   463,   464,
+      51,    52,    53,   437,    55,    -1,   910,   911,    -1,   474,
+     475,  1086,   706,   707,    65,    -1,    67,    -1,    -1,   923,
+     924,   486,    -1,    -1,   641,   642,   643,   644,   645,   646,
+      -1,    -1,    -1,    -1,  1109,    -1,   940,    -1,    -1,   656,
+      -1,   506,   659,    -1,   948,   949,   950,   951,   952,   953,
+      -1,    13,   103,    -1,     4,    -1,   521,   674,   675,   676,
+      -1,    -1,   527,   680,   681,   682,    -1,    -1,    -1,   686,
+     687,    -1,    -1,    -1,    -1,    25,    26,  1102,  1103,    29,
+     545,    31,    -1,    -1,    -1,  1160,    -1,   552,   553,   706,
+     707,    -1,    42,    -1,    -1,    -1,    -1,    47,    48,    -1,
+      50,   566,   567,   568,  1014,  1015,    -1,    57,  1133,    -1,
+      -1,    -1,    -1,    -1,    -1,  1190,    -1,    67,   583,   584,
+    1195,    -1,    -1,    73,  1199,    -1,   300,   301,    -1,    79,
+      -1,    81,    -1,    31,    -1,    -1,   946,    -1,  1048,    -1,
+      -1,    -1,    40,    -1,    42,    -1,    96,    45,    98,  1059,
+    1060,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,
+       4,    -1,    60,    -1,    -1,   630,   631,  1071,  1072,    67,
+      -1,    -1,   982,   983,   868,    73,    -1,  1081,    76,    -1,
+      -1,    -1,    26,    -1,   146,    29,   996,    31,   998,   999,
+      -1,    -1,    -1,    -1,  1098,  1099,    40,    -1,    42,   161,
+     162,    -1,    -1,    47,    48,   103,    50,    -1,    -1,  1113,
+      -1,    55,    -1,    -1,    -1,    -1,  1120,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    73,
+      -1,    -1,    76,    -1,    -1,    79,    -1,  1141,    -1,    -1,
+      -1,  1151,    -1,    -1,    -1,    -1,    -1,  1157,    -1,    -1,
+      -1,    -1,   946,    -1,    98,    -1,    -1,    -1,    -1,   103,
+    1164,   435,  1166,    -1,   438,   439,   440,   441,   442,   443,
      444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-    1136,  1137,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    40,    -1,    42,    -1,    -1,    45,    -1,     4,    -1,
-      -1,    -1,    -1,    -1,   108,    -1,    -1,  1163,    -1,    -1,
-      -1,    60,    -1,    -1,   715,   716,    -1,    -1,    67,   720,
-      26,    27,   792,    29,    73,    31,   727,    76,    -1,    -1,
-      -1,    -1,   898,   899,    40,    -1,    42,    -1,    -1,    -1,
-     741,    47,    48,   744,    50,    -1,   869,    -1,    -1,    55,
-      -1,    57,    -1,    -1,   103,    -1,   922,   923,     4,    65,
-      -1,    67,   763,    -1,    -1,   766,    -1,    73,    -1,    -1,
-      76,    -1,   773,    79,    -1,    81,   777,    -1,    -1,    -1,
-      26,    -1,   783,    29,    -1,    -1,    -1,   788,    -1,   790,
-      96,    -1,    98,    -1,    40,   199,   200,   103,    -1,    -1,
-       4,    47,    48,   207,    50,    -1,    -1,    -1,    -1,    55,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    -1,    -1,
-      -1,   891,    26,    -1,   947,    29,    -1,    -1,   232,    -1,
-      76,    35,    36,    79,    38,    -1,    40,    41,    -1,    -1,
-      -1,   911,   912,    47,    48,    -1,    50,   848,   252,   253,
-      -1,   255,    98,    57,   924,   925,    -1,   103,    -1,    -1,
-     983,   984,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,   941,    76,    -1,   997,    79,   999,  1000,    -1,   949,
-     950,   951,   952,   953,   954,    27,    -1,    -1,    30,    31,
-    1168,  1169,   296,    -1,    98,    -1,    -1,  1175,    -1,  1177,
-      42,  1179,    -1,    -1,  1182,  1183,    -1,    -1,    -1,  1187,
-      52,    53,    -1,    55,  1192,    -1,    58,    -1,  1196,    -1,
-      -1,  1199,    -1,    -1,    -1,    67,    -1,    -1,    -1,     4,
-      -1,    73,    -1,    75,    -1,    -1,    78,  1103,  1104,    81,
-      -1,    -1,   346,    -1,   348,    -1,    -1,    -1,   352,    -1,
-      25,    26,    27,   357,    29,    30,    31,   361,    -1,    -1,
-     364,   103,    -1,   367,  1087,    -1,   370,    42,  1134,   373,
-      -1,   375,    47,    48,   378,    50,    51,   381,    -1,    -1,
-     384,   385,   386,   387,    -1,    -1,   390,  1110,    -1,   393,
-     394,    -1,    67,    -1,    -1,    -1,    -1,    -1,    73,    -1,
-     404,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,
-    1011,  1012,     4,    -1,    -1,    -1,    -1,  1018,    -1,    -1,
-      -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,   103,    -1,
-      -1,    -1,    -1,    25,    26,    -1,    -1,    29,  1161,    31,
-    1163,    -1,    -1,    -1,  1114,    -1,    -1,  1048,    -1,    -1,
-      42,  1121,  1053,    -1,    -1,    47,    48,    -1,    50,    -1,
-      -1,    -1,  1063,    -1,    -1,    57,    -1,    -1,  1191,    -1,
-      -1,    -1,  1142,  1196,    -1,    67,    -1,  1200,    -1,    -1,
-      -1,    73,    -1,    -1,    -1,    -1,    -1,    79,     4,    81,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    96,    -1,    98,    -1,    -1,    25,
-      26,   103,    -1,    29,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   898,   899,    42,    -1,    -1,    -1,
-      -1,    47,    48,    -1,    50,    -1,   540,   541,   542,   543,
-     544,    57,    -1,    -1,    -1,    -1,    -1,    -1,   922,   923,
-    1151,    67,    -1,    -1,    -1,    -1,  1157,    73,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    81,    -1,    -1,    -1,  1170,
-      -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      96,    -1,    98,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    26,    -1,    -1,    29,    -1,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    -1,    42,
-      -1,    -1,    -1,    -1,    47,    48,    -1,    50,    -1,    -1,
-      -1,    -1,    55,   627,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
-      73,    -1,    -1,    76,   648,   649,    79,    -1,   652,   653,
-     654,   655,   656,    -1,   658,   659,    -1,   661,   662,   663,
-     664,   665,   666,   667,    -1,    98,    -1,    -1,    -1,    -1,
-     103,    -1,    -1,    -1,   678,   679,   680,    -1,    -1,    -1,
-     684,   685,   686,    -1,    -1,   689,   690,   691,   692,   693,
-     694,   695,   696,   697,   698,   699,    -1,    -1,   702,   703,
-     704,   705,    -1,    -1,    -1,   709,   710,   711,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1103,
-    1104,    -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,
-    1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     714,   715,    -1,    -1,    -1,   719,    -1,    -1,   982,   983,
+      -1,    -1,   726,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   996,    -1,   998,   999,   740,    -1,    -1,   743,
+     108,   273,    -1,   275,   276,   277,    -1,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   791,   289,   762,   946,
+      -1,   765,    -1,    -1,    -1,    -1,    -1,    -1,   772,    -1,
+      -1,    -1,   776,    -1,    -1,    -1,    -1,    -1,   782,    -1,
+      -1,    -1,  1162,   787,    -1,   789,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     4,    -1,   982,   983,    -1,    -1,   986,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   995,   996,
+     997,   998,   999,  1000,    -1,    26,    -1,    -1,    29,    -1,
+      31,    -1,  1086,    -1,    -1,    -1,    -1,    -1,    -1,    40,
+     198,   199,    -1,    -1,    -1,     4,    47,    48,   206,    50,
+      -1,   209,   210,   847,   212,  1109,    57,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   890,    67,    26,     4,    -1,
+      29,    -1,    73,    -1,    -1,    76,    -1,   235,    79,    -1,
+      -1,    40,    -1,    -1,    -1,   910,   911,    -1,    47,    48,
+      26,    50,    -1,    29,    -1,    96,    55,    98,   923,   924,
+      -1,    -1,   103,    -1,    40,    -1,  1160,    -1,  1162,    -1,
+      -1,    47,    48,    -1,    50,   940,    -1,    76,    -1,    55,
+      79,    -1,    -1,   948,   949,   950,   951,   952,   953,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1190,   295,    -1,    98,
+      76,  1195,    -1,    79,   103,  1199,    27,    -1,    -1,    30,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1135,  1136,
+      -1,    42,    98,    -1,    -1,    -1,    -1,   103,    -1,    -1,
+      51,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1162,    67,    -1,    -1,   347,
+      -1,   349,    73,   351,    75,    -1,    -1,    78,    -1,   357,
+      81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,    -1,
+      -1,    -1,   370,    -1,    -1,   373,  1010,  1011,   376,    -1,
+      -1,   379,   103,  1017,   382,    -1,   384,     4,    -1,   387,
+      -1,    -1,   390,    -1,    -1,   393,   394,   395,   396,    -1,
+      -1,   399,    -1,    -1,   402,   403,    -1,    -1,    -1,    26,
+      27,    -1,    29,  1047,    31,    -1,    -1,    -1,  1052,    -1,
+      -1,    -1,    -1,    40,    -1,    42,    -1,    -1,  1062,    46,
+      47,    48,    -1,    50,    -1,    52,    53,    -1,    55,    -1,
+      57,    58,    -1,    -1,    -1,    -1,    -1,    -1,  1113,    -1,
+      67,    -1,    -1,    -1,    -1,  1120,    73,    -1,    -1,    76,
+      77,    -1,    79,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1141,    -1,    -1,    96,
+      -1,    98,  1167,  1168,    -1,    -1,   103,   649,   650,  1174,
+      -1,  1176,    -1,  1178,    -1,    -1,  1181,  1182,    -1,    -1,
+      -1,  1186,    -1,    -1,    -1,   667,  1191,    -1,    -1,    -1,
+    1195,    -1,    -1,  1198,    -1,    -1,  1150,    -1,    -1,    -1,
+      -1,    -1,  1156,   897,   898,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     4,    -1,  1169,    -1,    -1,    -1,    10,
+      11,    -1,   540,   541,   542,   543,   544,   921,   922,    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,   627,
+      -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   647,
+     648,    -1,    -1,   651,   652,   653,   654,   655,    -1,   657,
+     658,    -1,   660,   661,   662,   663,   664,   665,   666,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   677,
+     678,   679,    -1,    -1,    -1,   683,   684,   685,    -1,    -1,
+     688,   689,   690,   691,   692,   693,   694,   695,   696,   697,
+     698,    -1,    -1,   701,   702,   703,   704,    -1,    -1,     4,
+     708,   709,   710,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
+      -1,    26,    27,    -1,    29,    -1,    31,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     4,    40,    -1,    42,    -1,    -1,
+      -1,    -1,    47,    48,    -1,    50,    -1,    -1,    -1,  1133,
+      55,    -1,    57,    -1,    -1,    25,    26,    -1,    -1,    29,
+      65,    31,    67,    -1,    -1,    -1,    -1,    -1,    73,    -1,
+      -1,    76,    42,   945,    79,    -1,    81,    47,    48,    -1,
+      50,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
+      -1,    96,    -1,    98,    -1,    -1,    -1,    67,   103,    -1,
+      -1,    -1,    -1,    73,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    81,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,
+     828,    -1,    -1,    -1,    -1,    -1,    96,   835,    98,    -1,
+     838,    21,    -1,   103,    -1,    -1,    26,    -1,    -1,    29,
+      -1,    -1,    -1,   851,    -1,    35,    36,    -1,    38,    -1,
+      40,    41,    -1,    -1,    -1,    -1,    -1,    47,    48,    -1,
+      50,    -1,   870,   871,   872,    -1,   874,    57,    -1,    -1,
+      -1,    -1,    -1,   881,    -1,   883,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      -1,    -1,    -1,   901,    -1,    -1,   904,    -1,    -1,   907,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   915,    98,    -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,   959,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   829,    -1,    -1,    -1,    -1,
-      -1,    -1,   836,    -1,    -1,   839,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   852,    -1,
+      -1,    -1,    -1,   981,    -1,    -1,   984,   985,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   871,   872,   873,
-      -1,   875,    -1,    -1,    -1,    -1,    -1,    -1,   882,    -1,
-     884,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,
-      -1,   905,    -1,    -1,   908,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   916,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1001,    -1,    -1,    -1,  1005,  1006,  1007,
+    1008,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1025,    -1,    -1,
+      -1,    -1,  1030,    -1,    -1,  1033,    -1,    -1,    -1,    -1,
+      -1,    -1,  1040,    -1,  1042,  1043,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1064,    -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,   960,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   982,    -1,
-      -1,   985,   986,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1002,    -1,
-      -1,    -1,  1006,  1007,  1008,  1009,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1026,    -1,    -1,    -1,    -1,  1031,    -1,    -1,
-    1034,    -1,    -1,    -1,    -1,    -1,    -1,  1041,    -1,  1043,
-    1044,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1065,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,  1083,
-      -1,  1085,    -1,    10,    11,    -1,    -1,    -1,    -1,  1093,
-      -1,  1095,  1096,    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,
+      -1,    -1,     4,    -1,  1082,    -1,  1084,    -1,    10,    11,
+      -1,    -1,    -1,    -1,  1092,    -1,  1094,  1095,    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,
@@ -1817,8 +1799,8 @@
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   112,   118,   122,   420,     0,     5,     7,    54,    74,
-     419,   419,   421,   421,   420,     4,     8,    10,    20,    21,
+       0,   112,   118,   122,   419,     0,     5,     7,    54,    74,
+     418,   418,   420,   420,   419,     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,
@@ -1827,117 +1809,117 @@
       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,
-     405,   426,   427,   121,   405,   420,   102,   420,   102,   115,
-     409,   409,   101,    11,   119,   120,   410,   419,   123,   124,
-     420,   411,   127,   128,    56,    64,    82,   125,   126,   139,
-     127,    23,   125,   138,     8,   412,   413,   421,   140,    43,
-      44,   129,   133,   421,   421,   421,   140,   421,   116,   102,
-     104,   416,     8,     9,    11,    12,    16,    17,    18,   414,
-     425,   426,    28,    31,    59,    67,   141,   142,   143,   144,
-     145,   147,   421,   421,   114,   423,   425,   114,   404,   427,
-     423,   145,   137,   405,   420,   420,   420,   420,   421,   421,
-     421,   421,   152,   153,    70,   130,   405,   132,   405,   102,
-     104,   408,   424,   408,   420,   408,   152,   102,   417,   415,
-     423,   423,   423,   423,   103,     4,    21,    26,    29,    35,
-      36,    38,    40,    41,    47,    48,    50,    57,    72,    76,
-      79,    98,   154,   156,   167,   172,   177,   222,   225,   227,
-     237,   244,   250,   260,   274,   276,   282,   298,   308,   325,
-     333,   421,   102,   102,   104,   134,   409,   409,   420,   103,
-     409,    11,   103,   406,   426,   101,   408,   408,   408,   408,
-     420,   421,   421,   421,   421,   421,   421,   421,   421,   421,
-     421,   421,   421,   421,   421,   421,   421,   421,   409,    12,
-     114,   146,   150,   409,   409,   409,   103,   420,   139,   412,
-     420,   273,   405,   105,   114,   296,   297,   376,   377,   259,
-     405,   226,   405,   155,   405,   114,   332,   335,   377,   166,
-     405,   221,   405,   171,   405,   238,   405,   243,   405,   249,
-     405,   324,   405,   307,   405,   176,   405,    11,   114,   281,
-     407,   427,   428,   275,   405,   151,   102,   104,   148,   131,
-     135,   409,   103,   102,   104,   418,     8,   102,   104,   277,
-     406,   102,   378,   420,   102,   104,   261,   102,   104,   228,
-     102,   104,   157,   102,   420,   102,   104,   168,   102,   104,
-     223,   102,   104,   173,   102,   102,   102,   102,   104,   326,
-     102,   104,   309,   102,   102,   104,   283,   420,   420,   277,
-     420,   409,   409,    71,   103,   136,   139,   143,   144,   103,
-     136,   143,   144,   409,   420,   420,   420,   409,   409,   376,
-     409,   409,   409,   409,   409,   409,   409,   409,   409,   409,
-     409,   409,   409,   409,   149,   421,   409,   417,   278,   299,
-     262,   229,   158,   334,   169,   224,   174,   239,   245,   251,
-     327,   310,   178,   284,   103,   143,   144,   150,   103,    27,
-      42,    51,    55,    73,    81,   103,   143,   144,   164,   170,
-     352,   355,   357,   367,    25,    96,   103,   143,   144,   164,
-     170,   225,   268,   306,   325,   352,    30,   103,   143,   144,
-     164,   170,   220,   227,   237,   244,   250,   260,   265,   266,
-     268,   274,   276,   352,   355,   357,    65,   103,   143,   144,
-     164,   170,   177,   222,   225,   306,   325,   352,   355,   359,
-     367,    20,   103,   143,   144,   159,   164,    37,   103,   143,
-     144,   103,   143,   144,   164,   170,   103,   143,   144,   164,
-     177,   222,   225,   306,   325,    22,   103,   143,   144,   164,
-     170,   175,    75,    78,   103,   143,   144,   164,   170,   179,
-     219,   220,   352,   355,   357,   367,    52,    53,    58,   103,
-     143,   144,   164,   170,   179,   219,   220,   352,   355,   360,
-     362,   364,   367,    46,    77,   103,   143,   144,   164,   170,
-     177,   222,   225,   306,   325,   352,   355,   360,   362,   364,
-     367,   369,   372,   103,   143,   144,   164,   170,   177,   222,
-     225,   367,    45,    60,   103,   143,   144,   164,   170,   177,
-     222,   315,   322,   103,   143,   144,   164,   179,   219,   220,
-      21,    68,   103,   143,   144,   164,   170,   290,   295,   352,
-     408,   420,   421,   421,   421,   421,   421,   421,   279,   280,
-     421,   421,   301,   304,   302,   303,   300,   421,   264,   263,
-     421,   235,   232,   236,   233,   234,   230,   231,   421,   421,
-     409,   409,   409,   409,   409,   421,   421,   421,   241,   240,
-     242,   421,   421,   421,   247,   246,   248,   421,   421,   254,
-     255,   258,   256,   257,   252,   253,   329,   330,   331,   328,
-     420,   420,   311,   312,   313,   314,   409,   421,   421,   286,
-     287,   285,    88,    93,   114,   356,   423,    88,    93,   114,
-     358,   366,   423,    85,    87,    90,   114,   165,   351,   423,
-     409,   409,   267,   405,   305,   405,   409,   409,   409,   409,
-     409,   423,   409,   409,   423,   409,   409,   409,   409,   409,
-     409,   409,   405,    84,    86,    89,    91,   336,   337,   338,
-     339,   343,   347,   407,   180,   407,   423,   409,   409,   409,
-      17,    94,   114,   363,   400,    18,   114,   361,   400,   401,
-      92,    95,   114,   365,   409,   409,   409,   114,   373,   406,
-     114,   370,   379,   406,   409,   409,   409,   409,   409,   409,
-     409,   409,   409,   409,   409,   316,   323,   409,   409,   409,
-     409,   114,   293,   294,   379,   114,   288,   289,   379,   409,
-     409,   409,   420,   420,   408,   408,   420,   420,   408,   102,
-     104,   368,   420,   420,   420,   408,   102,   104,   353,   102,
-     104,   269,   309,   408,   408,   160,   420,   420,   420,   420,
-     420,   408,   102,   104,   181,   408,   420,   408,   420,   408,
-     420,   420,   420,   408,   408,   374,   408,   371,   408,   421,
-     380,   102,   102,   102,   420,   102,   104,   291,   420,   409,
-     409,   409,   102,   104,   161,   340,   344,   408,   348,   409,
-     420,   379,   378,   409,   409,   409,   409,   190,   354,   270,
-     409,   409,   102,   104,   341,   102,   104,   345,   102,   104,
-     349,    24,    32,   182,   183,   196,   198,   209,   211,   371,
-     317,   317,   299,   292,    33,    34,   103,   143,   144,   217,
-     218,   103,   143,   144,   103,   143,   144,   164,   170,   225,
-     352,    83,   162,   409,   409,   409,   421,   421,   103,    39,
-      49,    61,    62,    66,    69,   175,   184,   185,   187,   191,
-     204,   206,   207,   409,   210,   103,   177,   222,   225,   367,
-     103,   103,   103,   143,   144,   170,   220,   355,   357,   359,
-     360,   362,   367,   421,   421,   272,   271,   421,   103,   342,
-     346,   350,   212,   405,   199,   423,   421,   421,   421,   421,
-     421,   421,   179,   409,   197,   211,   319,   320,   321,   318,
-     409,   423,   423,   409,   409,    88,    93,   114,   163,   103,
-     219,   220,   355,   357,   360,   362,   367,   369,   103,   219,
-     220,   367,   369,   103,   179,   219,   220,   355,   357,   360,
-     362,   102,   104,   213,   102,   104,   200,   114,   186,   400,
-     188,   423,   114,   381,   382,   383,   192,   423,   375,   423,
-      88,    93,   114,   208,   409,   198,   409,   409,   409,   409,
-     408,   408,   420,   420,   408,   409,   409,   409,   409,   409,
-     409,   408,   420,   102,   104,   189,   408,   105,   384,   385,
-      14,   387,   388,   102,   104,   193,   102,   104,   205,   420,
-     420,   408,   409,   214,   201,   409,   409,   406,   386,   105,
-     389,   409,   409,   409,    63,   103,   143,   144,   164,   170,
-     215,    80,   103,   143,   144,   164,   170,   202,   190,   392,
-     384,   388,   390,   406,   194,   190,   421,   421,   103,   106,
-     391,   392,    97,   103,   143,   144,   195,   217,   218,   103,
-     114,   216,   401,    16,    17,    18,   114,   203,   402,   403,
-       5,   422,   385,   421,   408,   420,   408,   420,   393,   406,
-     423,   422,   422,   408,   107,   108,   422,    85,   394,   399,
-     422,   422,   109,   105,   422,   422,   110,    14,   395,   396,
-     422,   397,   105,   396,   406,   422,   398,   406,   422,   105,
-     422,   406
+     404,   425,   426,   121,   404,   419,   102,   419,   102,   115,
+     408,   408,   101,    11,   119,   120,   409,   418,   123,   124,
+     419,   410,   127,    56,    64,    82,   125,   126,   138,   127,
+      23,   125,   137,     8,   411,   412,   420,    43,    44,   128,
+     132,   139,   420,   420,   420,   139,   420,   116,   102,   104,
+     415,     8,     9,    11,    12,    16,    17,    18,   413,   424,
+     425,   420,   420,    28,    31,    59,    67,   140,   141,   142,
+     143,   144,   146,   114,   422,   424,   114,   403,   426,   422,
+     144,   136,   404,   419,   419,   419,   419,   129,   404,   131,
+     404,   420,   420,   420,   420,   151,   152,    70,   102,   104,
+     407,   423,   407,   419,   407,   151,   102,   416,   414,   102,
+     102,   104,   133,   422,   422,   422,   422,   103,     4,    21,
+      26,    29,    35,    36,    38,    40,    41,    47,    48,    50,
+      57,    72,    76,    79,    98,   153,   155,   166,   171,   176,
+     221,   224,   226,   236,   243,   249,   259,   273,   275,   281,
+     297,   307,   324,   332,   420,   408,   408,   419,   103,   408,
+      11,   103,   405,   425,   101,   408,   408,   408,   407,   407,
+     407,   407,   419,   420,   420,   420,   420,   420,   420,   420,
+     420,   420,   420,   420,   420,   420,   420,   420,   420,   420,
+     408,    12,   114,   145,   149,   103,   419,   138,   411,   419,
+     130,   134,   272,   404,   105,   114,   295,   296,   375,   376,
+     258,   404,   225,   404,   154,   404,   114,   331,   334,   376,
+     165,   404,   220,   404,   170,   404,   237,   404,   242,   404,
+     248,   404,   323,   404,   306,   404,   175,   404,    11,   114,
+     280,   406,   426,   427,   274,   404,   150,   102,   104,   147,
+     408,   103,   102,   104,   417,     8,    71,   103,   135,   138,
+     142,   143,   103,   135,   142,   143,   102,   104,   276,   405,
+     102,   377,   419,   102,   104,   260,   102,   104,   227,   102,
+     104,   156,   102,   419,   102,   104,   167,   102,   104,   222,
+     102,   104,   172,   102,   102,   102,   102,   104,   325,   102,
+     104,   308,   102,   102,   104,   282,   419,   419,   276,   419,
+     408,   408,   408,   419,   419,   419,   420,   408,   408,   408,
+     375,   408,   408,   408,   408,   408,   408,   408,   408,   408,
+     408,   408,   408,   408,   408,   148,   416,   149,   277,   298,
+     261,   228,   157,   333,   168,   223,   173,   238,   244,   250,
+     326,   309,   177,   283,   103,   142,   143,   103,   407,    27,
+      42,    51,    55,    73,    81,   103,   142,   143,   163,   169,
+     351,   354,   356,   366,    25,    96,   103,   142,   143,   163,
+     169,   224,   267,   305,   324,   351,    30,   103,   142,   143,
+     163,   169,   219,   226,   236,   243,   249,   259,   264,   265,
+     267,   273,   275,   351,   354,   356,    65,   103,   142,   143,
+     163,   169,   176,   221,   224,   305,   324,   351,   354,   358,
+     366,    20,   103,   142,   143,   158,   163,    37,   103,   142,
+     143,   103,   142,   143,   163,   169,   103,   142,   143,   163,
+     176,   221,   224,   305,   324,    22,   103,   142,   143,   163,
+     169,   174,    75,    78,   103,   142,   143,   163,   169,   178,
+     218,   219,   351,   354,   356,   366,    52,    53,    58,   103,
+     142,   143,   163,   169,   178,   218,   219,   351,   354,   359,
+     361,   363,   366,    46,    77,   103,   142,   143,   163,   169,
+     176,   221,   224,   305,   324,   351,   354,   359,   361,   363,
+     366,   368,   371,   103,   142,   143,   163,   169,   176,   221,
+     224,   366,    45,    60,   103,   142,   143,   163,   169,   176,
+     221,   314,   321,   103,   142,   143,   163,   178,   218,   219,
+      21,    68,   103,   142,   143,   163,   169,   289,   294,   351,
+     419,   420,   420,   420,   420,   420,   420,   278,   279,   420,
+     420,   300,   303,   301,   302,   299,   420,   263,   262,   420,
+     234,   231,   235,   232,   233,   229,   230,   420,   420,   408,
+     408,   408,   408,   408,   420,   420,   420,   240,   239,   241,
+     420,   420,   420,   246,   245,   247,   420,   420,   253,   254,
+     257,   255,   256,   251,   252,   328,   329,   330,   327,   419,
+     419,   310,   311,   312,   313,   408,   420,   420,   285,   286,
+     284,    88,    93,   114,   355,   422,    88,    93,   114,   357,
+     365,   422,    85,    87,    90,   114,   164,   350,   422,   408,
+     408,   266,   404,   304,   404,   408,   408,   408,   408,   408,
+     422,   408,   408,   422,   408,   408,   408,   408,   408,   408,
+     408,   404,    84,    86,    89,    91,   335,   336,   337,   338,
+     342,   346,   406,   179,   406,   422,   408,   408,   408,    17,
+      94,   114,   362,   399,    18,   114,   360,   399,   400,    92,
+      95,   114,   364,   408,   408,   408,   114,   372,   405,   114,
+     369,   378,   405,   408,   408,   408,   408,   408,   408,   408,
+     408,   408,   408,   408,   315,   322,   408,   408,   408,   408,
+     114,   292,   293,   378,   114,   287,   288,   378,   408,   408,
+     408,   419,   419,   407,   407,   419,   419,   407,   102,   104,
+     367,   419,   419,   419,   407,   102,   104,   352,   102,   104,
+     268,   308,   407,   407,   159,   419,   419,   419,   419,   419,
+     407,   102,   104,   180,   407,   419,   407,   419,   407,   419,
+     419,   419,   407,   407,   373,   407,   370,   407,   420,   379,
+     102,   102,   102,   419,   102,   104,   290,   419,   408,   408,
+     408,   102,   104,   160,   339,   343,   407,   347,   408,   419,
+     378,   377,   408,   408,   408,   408,   189,   353,   269,   408,
+     408,   102,   104,   340,   102,   104,   344,   102,   104,   348,
+      24,    32,   181,   182,   195,   197,   208,   210,   370,   316,
+     316,   298,   291,    33,    34,   103,   142,   143,   216,   217,
+     103,   142,   143,   103,   142,   143,   163,   169,   224,   351,
+      83,   161,   408,   408,   408,   420,   420,   103,    39,    49,
+      61,    62,    66,    69,   174,   183,   184,   186,   190,   203,
+     205,   206,   408,   209,   103,   176,   221,   224,   366,   103,
+     103,   103,   142,   143,   169,   219,   354,   356,   358,   359,
+     361,   366,   420,   420,   271,   270,   420,   103,   341,   345,
+     349,   211,   404,   198,   422,   420,   420,   420,   420,   420,
+     420,   178,   408,   196,   210,   318,   319,   320,   317,   408,
+     422,   422,   408,   408,    88,    93,   114,   162,   103,   218,
+     219,   354,   356,   359,   361,   366,   368,   103,   218,   219,
+     366,   368,   103,   178,   218,   219,   354,   356,   359,   361,
+     102,   104,   212,   102,   104,   199,   114,   185,   399,   187,
+     422,   114,   380,   381,   382,   191,   422,   374,   422,    88,
+      93,   114,   207,   408,   197,   408,   408,   408,   408,   407,
+     407,   419,   419,   407,   408,   408,   408,   408,   408,   408,
+     407,   419,   102,   104,   188,   407,   105,   383,   384,    14,
+     386,   387,   102,   104,   192,   102,   104,   204,   419,   419,
+     407,   408,   213,   200,   408,   408,   405,   385,   105,   388,
+     408,   408,   408,    63,   103,   142,   143,   163,   169,   214,
+      80,   103,   142,   143,   163,   169,   201,   189,   391,   383,
+     387,   389,   405,   193,   189,   420,   420,   103,   106,   390,
+     391,    97,   103,   142,   143,   194,   216,   217,   103,   114,
+     215,   400,    16,    17,    18,   114,   202,   401,   402,     5,
+     421,   384,   420,   407,   419,   407,   419,   392,   405,   422,
+     421,   421,   407,   107,   108,   421,    85,   393,   398,   421,
+     421,   109,   105,   421,   421,   110,    14,   394,   395,   421,
+     396,   105,   395,   405,   421,   397,   405,   421,   105,   421,
+     405
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1945,79 +1927,79 @@
 {
        0,   111,   112,   112,   113,   114,   115,   116,   115,   117,
      118,   119,   120,   120,   120,   120,   121,   122,   123,   124,
-     124,   124,   125,   126,   127,   128,   128,   128,   129,   130,
-     131,   131,   131,   131,   131,   132,   133,   134,   134,   135,
-     135,   135,   135,   136,   137,   138,   139,   140,   140,   140,
-     140,   140,   141,   142,   143,   144,   145,   146,   147,   147,
-     148,   148,   149,   149,   149,   151,   150,   150,   152,   153,
-     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   155,   156,   157,   157,   158,   158,   158,   158,   158,
-     160,   159,   161,   161,   162,   162,   163,   163,   163,   164,
-     165,   165,   165,   165,   166,   167,   168,   168,   169,   169,
-     169,   169,   169,   170,   171,   172,   173,   173,   174,   174,
-     174,   174,   174,   174,   175,   176,   177,   178,   178,   178,
-     178,   178,   178,   178,   179,   180,   181,   181,   182,   182,
-     182,   183,   183,   183,   183,   183,   183,   183,   183,   183,
-     184,   185,   186,   186,   187,   188,   189,   189,   190,   190,
-     190,   190,   190,   191,   192,   193,   193,   194,   194,   194,
-     194,   194,   194,   195,   196,   197,   197,   198,   199,   200,
-     200,   201,   201,   201,   201,   201,   201,   202,   203,   203,
-     204,   205,   205,   206,   207,   208,   208,   208,   209,   210,
-     210,   211,   212,   213,   213,   214,   214,   214,   214,   214,
-     214,   215,   216,   216,   217,   218,   219,   220,   221,   222,
-     223,   223,   224,   224,   224,   224,   224,   224,   224,   224,
-     224,   225,   225,   225,   225,   225,   225,   225,   225,   226,
-     227,   228,   228,   229,   230,   229,   229,   231,   229,   229,
-     229,   229,   229,   229,   232,   229,   233,   229,   234,   229,
-     235,   229,   236,   229,   237,   238,   239,   240,   239,   239,
-     241,   239,   239,   242,   239,   239,   239,   239,   239,   239,
-     239,   243,   244,   245,   246,   245,   245,   247,   245,   245,
-     245,   248,   245,   245,   245,   245,   245,   245,   245,   245,
-     249,   250,   251,   252,   251,   251,   253,   251,   251,   251,
-     251,   251,   251,   251,   251,   251,   251,   254,   251,   255,
-     251,   256,   251,   257,   251,   258,   251,   259,   260,   261,
-     261,   262,   263,   262,   262,   262,   262,   262,   262,   262,
-     262,   264,   262,   265,   265,   266,   266,   266,   266,   266,
-     266,   266,   267,   268,   269,   269,   270,   271,   270,   270,
-     270,   270,   270,   272,   270,   273,   274,   275,   276,   277,
-     277,   278,   279,   278,   278,   280,   278,   278,   278,   278,
-     278,   278,   281,   282,   283,   283,   284,   285,   284,   284,
-     284,   284,   284,   286,   284,   287,   284,   288,   288,   289,
-     290,   291,   291,   292,   292,   292,   292,   292,   292,   292,
-     292,   292,   292,   292,   293,   293,   294,   295,   296,   296,
-     297,   298,   299,   300,   299,   299,   299,   299,   299,   301,
-     299,   302,   299,   303,   299,   304,   299,   305,   306,   307,
-     308,   309,   309,   310,   310,   310,   310,   310,   311,   310,
-     312,   310,   313,   310,   314,   310,   316,   315,   317,   318,
-     317,   319,   317,   320,   317,   321,   317,   323,   322,   324,
-     325,   326,   326,   327,   328,   327,   327,   327,   327,   327,
-     329,   327,   330,   327,   331,   327,   332,   333,   334,   334,
-     334,   334,   335,   335,   336,   336,   337,   338,   338,   338,
-     340,   339,   341,   341,   342,   342,   342,   342,   342,   342,
-     342,   342,   342,   344,   343,   345,   345,   346,   346,   346,
-     346,   346,   348,   347,   349,   349,   350,   350,   350,   350,
-     350,   350,   350,   350,   351,   352,   353,   353,   354,   354,
-     354,   355,   356,   356,   356,   357,   358,   358,   358,   359,
-     360,   361,   361,   362,   363,   363,   363,   364,   365,   365,
-     365,   366,   367,   368,   368,   369,   370,   370,   371,   371,
-     372,   374,   373,   373,   375,   376,   377,   378,   378,   380,
-     379,   382,   381,   383,   381,   381,   384,   385,   386,   386,
-     387,   388,   389,   389,   390,   391,   391,   392,   392,   393,
-     394,   395,   396,   397,   397,   398,   398,   399,   400,   401,
-     401,   402,   402,   403,   403,   404,   404,   405,   405,   406,
-     406,   407,   407,   407,   408,   408,   409,   409,   409,   411,
-     410,   412,   413,   413,   414,   414,   414,   415,   415,   416,
-     416,   417,   417,   418,   418,   419,   419,   420,   420,   421,
-     422,   422,   424,   423,   423,   425,   425,   425,   425,   425,
-     425,   425,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   426,   426,   426,   426,   426,   426,   426,
-     426,   426,   426,   427,   428
+     124,   124,   125,   126,   127,   127,   127,   128,   129,   130,
+     130,   130,   130,   130,   131,   132,   133,   133,   134,   134,
+     134,   134,   135,   136,   137,   138,   139,   139,   139,   139,
+     139,   140,   141,   142,   143,   144,   145,   146,   146,   147,
+     147,   148,   148,   148,   150,   149,   149,   151,   152,   152,
+     153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
+     154,   155,   156,   156,   157,   157,   157,   157,   157,   159,
+     158,   160,   160,   161,   161,   162,   162,   162,   163,   164,
+     164,   164,   164,   165,   166,   167,   167,   168,   168,   168,
+     168,   168,   169,   170,   171,   172,   172,   173,   173,   173,
+     173,   173,   173,   174,   175,   176,   177,   177,   177,   177,
+     177,   177,   177,   178,   179,   180,   180,   181,   181,   181,
+     182,   182,   182,   182,   182,   182,   182,   182,   182,   183,
+     184,   185,   185,   186,   187,   188,   188,   189,   189,   189,
+     189,   189,   190,   191,   192,   192,   193,   193,   193,   193,
+     193,   193,   194,   195,   196,   196,   197,   198,   199,   199,
+     200,   200,   200,   200,   200,   200,   201,   202,   202,   203,
+     204,   204,   205,   206,   207,   207,   207,   208,   209,   209,
+     210,   211,   212,   212,   213,   213,   213,   213,   213,   213,
+     214,   215,   215,   216,   217,   218,   219,   220,   221,   222,
+     222,   223,   223,   223,   223,   223,   223,   223,   223,   223,
+     224,   224,   224,   224,   224,   224,   224,   224,   225,   226,
+     227,   227,   228,   229,   228,   228,   230,   228,   228,   228,
+     228,   228,   228,   231,   228,   232,   228,   233,   228,   234,
+     228,   235,   228,   236,   237,   238,   239,   238,   238,   240,
+     238,   238,   241,   238,   238,   238,   238,   238,   238,   238,
+     242,   243,   244,   245,   244,   244,   246,   244,   244,   244,
+     247,   244,   244,   244,   244,   244,   244,   244,   244,   248,
+     249,   250,   251,   250,   250,   252,   250,   250,   250,   250,
+     250,   250,   250,   250,   250,   250,   253,   250,   254,   250,
+     255,   250,   256,   250,   257,   250,   258,   259,   260,   260,
+     261,   262,   261,   261,   261,   261,   261,   261,   261,   261,
+     263,   261,   264,   264,   265,   265,   265,   265,   265,   265,
+     265,   266,   267,   268,   268,   269,   270,   269,   269,   269,
+     269,   269,   271,   269,   272,   273,   274,   275,   276,   276,
+     277,   278,   277,   277,   279,   277,   277,   277,   277,   277,
+     277,   280,   281,   282,   282,   283,   284,   283,   283,   283,
+     283,   283,   285,   283,   286,   283,   287,   287,   288,   289,
+     290,   290,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   291,   292,   292,   293,   294,   295,   295,   296,
+     297,   298,   299,   298,   298,   298,   298,   298,   300,   298,
+     301,   298,   302,   298,   303,   298,   304,   305,   306,   307,
+     308,   308,   309,   309,   309,   309,   309,   310,   309,   311,
+     309,   312,   309,   313,   309,   315,   314,   316,   317,   316,
+     318,   316,   319,   316,   320,   316,   322,   321,   323,   324,
+     325,   325,   326,   327,   326,   326,   326,   326,   326,   328,
+     326,   329,   326,   330,   326,   331,   332,   333,   333,   333,
+     333,   334,   334,   335,   335,   336,   337,   337,   337,   339,
+     338,   340,   340,   341,   341,   341,   341,   341,   341,   341,
+     341,   341,   343,   342,   344,   344,   345,   345,   345,   345,
+     345,   347,   346,   348,   348,   349,   349,   349,   349,   349,
+     349,   349,   349,   350,   351,   352,   352,   353,   353,   353,
+     354,   355,   355,   355,   356,   357,   357,   357,   358,   359,
+     360,   360,   361,   362,   362,   362,   363,   364,   364,   364,
+     365,   366,   367,   367,   368,   369,   369,   370,   370,   371,
+     373,   372,   372,   374,   375,   376,   377,   377,   379,   378,
+     381,   380,   382,   380,   380,   383,   384,   385,   385,   386,
+     387,   388,   388,   389,   390,   390,   391,   391,   392,   393,
+     394,   395,   396,   396,   397,   397,   398,   399,   400,   400,
+     401,   401,   402,   402,   403,   403,   404,   404,   405,   405,
+     406,   406,   406,   407,   407,   408,   408,   408,   410,   409,
+     411,   412,   412,   413,   413,   413,   414,   414,   415,   415,
+     416,   416,   417,   417,   418,   418,   419,   419,   420,   421,
+     421,   423,   422,   422,   424,   424,   424,   424,   424,   424,
+     424,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   425,   425,   425,   425,   425,   425,   425,   425,
+     425,   425,   426,   427
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -2025,70 +2007,70 @@
 {
        0,     2,     1,     1,     1,     3,     0,     0,     6,     1,
       13,     1,     0,     2,     2,     2,     1,    13,     1,     0,
-       2,     2,     4,     4,     1,     0,     2,     2,     8,     1,
-       0,     2,     2,     2,     2,     1,     5,     1,     4,     0,
-       2,     2,     2,     4,     1,     8,     4,     0,     2,     2,
-       2,     2,     4,     4,     4,     4,     1,     1,     0,     6,
-       1,     4,     0,     2,     2,     0,     3,     1,     1,     0,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     4,     1,     4,     0,     2,     2,     2,     2,
-       0,     6,     1,     4,     0,     4,     2,     2,     1,     4,
-       2,     2,     2,     1,     1,     4,     1,     4,     0,     2,
-       2,     2,     2,     4,     1,     4,     1,     4,     0,     2,
-       2,     2,     2,     2,     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,     4,     2,     1,     5,     1,     1,     4,     0,     2,
-       2,     2,     2,     5,     1,     1,     4,     0,     2,     2,
-       2,     2,     2,     4,     3,     0,     3,     4,     1,     1,
-       4,     0,     2,     2,     2,     2,     2,     4,     2,     1,
-       4,     1,     4,     4,     4,     2,     2,     1,     2,     0,
-       2,     5,     1,     1,     4,     0,     2,     2,     2,     2,
-       2,     4,     2,     1,     4,     4,     4,     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,
+       2,     2,     4,     4,     0,     2,     2,     8,     1,     0,
+       2,     2,     2,     2,     1,     5,     1,     4,     0,     2,
+       2,     2,     4,     1,     8,     4,     0,     2,     2,     2,
+       2,     4,     4,     4,     4,     1,     1,     0,     6,     1,
+       4,     0,     2,     2,     0,     3,     1,     1,     0,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     4,     0,     2,     2,     2,     2,     0,
+       6,     1,     4,     0,     4,     2,     2,     1,     4,     2,
+       2,     2,     1,     1,     4,     1,     4,     0,     2,     2,
+       2,     2,     4,     1,     4,     1,     4,     0,     2,     2,
+       2,     2,     2,     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,
+       4,     2,     1,     5,     1,     1,     4,     0,     2,     2,
+       2,     2,     5,     1,     1,     4,     0,     2,     2,     2,
+       2,     2,     4,     3,     0,     3,     4,     1,     1,     4,
+       0,     2,     2,     2,     2,     2,     4,     2,     1,     4,
+       1,     4,     4,     4,     2,     2,     1,     2,     0,     2,
+       5,     1,     1,     4,     0,     2,     2,     2,     2,     2,
+       4,     2,     1,     4,     4,     4,     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,
-       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,     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,     0,     7,     0,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     7,     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,     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,     4,     2,     2,     1,     4,     2,     2,     1,     4,
-       4,     2,     1,     4,     2,     2,     1,     4,     2,     2,
-       1,     1,     4,     1,     4,     3,     2,     2,     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,     0,     2,     2,     0,
-       4,     2,     0,     1,     0,     2,     3,     0,     5,     1,
-       4,     0,     4,     2,     5,     1,     1,     0,     2,     2,
-       0,     1,     0,     3,     1,     1,     1,     1,     1,     1,
+       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,     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,     0,     7,     0,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     7,     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,     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,
+       4,     2,     2,     1,     4,     2,     2,     1,     4,     4,
+       2,     1,     4,     2,     2,     1,     4,     2,     2,     1,
+       1,     4,     1,     4,     3,     2,     2,     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,     0,     2,     2,     0,     4,
+       2,     0,     1,     0,     2,     3,     0,     5,     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,     1,     1,     1,
@@ -2097,7 +2079,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
 };
 
 
@@ -2599,7 +2581,7 @@
 
         break;
 
-    case 192: /* pattern_arg_str  */
+    case 191: /* pattern_arg_str  */
 
       { free(((*yyvaluep).str)); }
 
@@ -3068,17 +3050,7 @@
 
     break;
 
-  case 24:
-
-    { *param->remove_import = 0;
-                              if (yang_check_imports(trg, param->unres)) {
-                                YYABORT;
-                              }
-                            }
-
-    break;
-
-  case 29:
+  case 28:
 
     { YANG_ADDELEM(trg->imp, trg->imp_size);
                                      /* HACK for unres */
@@ -3089,13 +3061,13 @@
 
     break;
 
-  case 30:
+  case 29:
 
     { (yyval.i) = 0; }
 
     break;
 
-  case 32:
+  case 31:
 
     { if (trg->version != 2) {
                                           LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "description");
@@ -3111,7 +3083,7 @@
 
     break;
 
-  case 33:
+  case 32:
 
     { if (trg->version != 2) {
                                         LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "reference");
@@ -3127,7 +3099,7 @@
 
     break;
 
-  case 34:
+  case 33:
 
     { if ((yyvsp[-1].i)) {
                                             LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "revision-date", "import");
@@ -3138,7 +3110,7 @@
 
     break;
 
-  case 35:
+  case 34:
 
     { YANG_ADDELEM(trg->inc, trg->inc_size);
                                      /* HACK for unres */
@@ -3149,13 +3121,13 @@
 
     break;
 
-  case 39:
+  case 38:
 
     { (yyval.i) = 0; }
 
     break;
 
-  case 40:
+  case 39:
 
     { if (trg->version != 2) {
                                            LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "description");
@@ -3171,7 +3143,7 @@
 
     break;
 
-  case 41:
+  case 40:
 
     { if (trg->version != 2) {
                                          LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "reference");
@@ -3187,7 +3159,7 @@
 
     break;
 
-  case 42:
+  case 41:
 
     { if ((yyvsp[-1].i)) {
                                              LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "revision-date", "include");
@@ -3198,7 +3170,7 @@
 
     break;
 
-  case 43:
+  case 42:
 
     { if (actual_type==IMPORT_KEYWORD) {
                                 memcpy(((struct lys_import *)actual)->rev, s, LY_REV_SIZE-1);
@@ -3211,7 +3183,7 @@
 
     break;
 
-  case 44:
+  case 43:
 
     { if (param->submodule->prefix) {
                                            LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "belongs-to", "submodule");
@@ -3229,7 +3201,7 @@
 
     break;
 
-  case 46:
+  case 45:
 
     { if (yang_read_prefix(trg, actual, s)) {
                                                            YYABORT;
@@ -3239,7 +3211,7 @@
 
     break;
 
-  case 48:
+  case 47:
 
     { if (yang_read_common(trg, s, ORGANIZATION_KEYWORD)) {
                                       YYABORT;
@@ -3249,7 +3221,7 @@
 
     break;
 
-  case 49:
+  case 48:
 
     { if (yang_read_common(trg, s, CONTACT_KEYWORD)) {
                                  YYABORT;
@@ -3259,7 +3231,7 @@
 
     break;
 
-  case 50:
+  case 49:
 
     { if (yang_read_description(trg, NULL, s, NULL, MODULE_KEYWORD)) {
                                      YYABORT;
@@ -3269,7 +3241,7 @@
 
     break;
 
-  case 51:
+  case 50:
 
     { if (yang_read_reference(trg, NULL, s, NULL, MODULE_KEYWORD)) {
                                    YYABORT;
@@ -3279,7 +3251,7 @@
 
     break;
 
-  case 56:
+  case 55:
 
     { if (trg->rev_size) {
                                   struct lys_revision *tmp;
@@ -3295,7 +3267,7 @@
 
     break;
 
-  case 57:
+  case 56:
 
     { YANG_ADDELEM(trg->rev, trg->rev_size);
                                   yang_read_revision(trg, s, actual);
@@ -3303,7 +3275,7 @@
 
     break;
 
-  case 63:
+  case 62:
 
     { if (yang_read_description(trg, actual, s, "revision",REVISION_KEYWORD)) {
                                             YYABORT;
@@ -3313,7 +3285,7 @@
 
     break;
 
-  case 64:
+  case 63:
 
     { if (yang_read_reference(trg, actual, s, "revision", REVISION_KEYWORD)) {
                                           YYABORT;
@@ -3323,7 +3295,7 @@
 
     break;
 
-  case 65:
+  case 64:
 
     { s = strdup(yyget_text(scanner));
                               if (!s) {
@@ -3334,7 +3306,7 @@
 
     break;
 
-  case 67:
+  case 66:
 
     { if (lyp_check_date(s)) {
                    free(s);
@@ -3344,7 +3316,7 @@
 
     break;
 
-  case 68:
+  case 67:
 
     { void *tmp;
 
@@ -3387,19 +3359,37 @@
 
     break;
 
+  case 68:
+
+    { /* check the module with respect to the context now */
+                         if (!param->submodule) {
+                           switch (lyp_ctx_check_module(trg)) {
+                           case -1:
+                             YYABORT;
+                           case 0:
+                             break;
+                           case 1:
+                             /* it's already there */
+                             param->exist_module = 1;
+                             YYABORT;
+                           }
+                         }
+                         param->remove_import = 0;
+                         if (yang_check_imports(trg, param->unres)) {
+                           YYABORT;
+                         }
+                         actual = NULL;
+                       }
+
+    break;
+
   case 69:
 
     { actual = NULL; }
 
     break;
 
-  case 70:
-
-    { actual = NULL; }
-
-    break;
-
-  case 81:
+  case 80:
 
     { /* we have the following supported (hardcoded) extensions: */
                                         /* ietf-netconf's get-filter-element-attributes */
@@ -3419,13 +3409,13 @@
 
     break;
 
-  case 85:
+  case 84:
 
     { (yyval.uint) = 0; }
 
     break;
 
-  case 86:
+  case 85:
 
     { if ((yyvsp[-1].uint) & EXTENSION_ARG) {
                                           LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "argument", "extension");
@@ -3437,7 +3427,7 @@
 
     break;
 
-  case 87:
+  case 86:
 
     { if ((yyvsp[-1].uint) & EXTENSION_STA) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "extension");
@@ -3449,7 +3439,7 @@
 
     break;
 
-  case 88:
+  case 87:
 
     { free(s);
                                            s= NULL;
@@ -3463,7 +3453,7 @@
 
     break;
 
-  case 89:
+  case 88:
 
     { free(s);
                                          s = NULL;
@@ -3477,13 +3467,13 @@
 
     break;
 
-  case 90:
+  case 89:
 
     { free(s); s = NULL; }
 
     break;
 
-  case 98:
+  case 97:
 
     { if (strcmp(s, "true") && strcmp(s, "false")) {
                  LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, s);
@@ -3496,31 +3486,31 @@
 
     break;
 
-  case 99:
+  case 98:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 100:
+  case 99:
 
     { (yyval.i) = LYS_STATUS_CURR; }
 
     break;
 
-  case 101:
+  case 100:
 
     { (yyval.i) = LYS_STATUS_OBSLT; }
 
     break;
 
-  case 102:
+  case 101:
 
     { (yyval.i) = LYS_STATUS_DEPRC; }
 
     break;
 
-  case 103:
+  case 102:
 
     { if (!strcmp(s, "current")) {
                  (yyval.i) = LYS_STATUS_CURR;
@@ -3539,7 +3529,7 @@
 
     break;
 
-  case 104:
+  case 103:
 
     { /* check uniqueness of feature's names */
                                       if (lyp_check_identifier(s, LY_IDENT_FEATURE, trg, NULL)) {
@@ -3554,7 +3544,7 @@
 
     break;
 
-  case 107:
+  case 106:
 
     { struct lys_iffeature *tmp;
 
@@ -3571,7 +3561,7 @@
 
     break;
 
-  case 109:
+  case 108:
 
     { void *feature;
 
@@ -3585,7 +3575,7 @@
 
     break;
 
-  case 110:
+  case 109:
 
     { if (((struct lys_feature *)actual)->flags & LYS_STATUS_MASK) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "feature");
@@ -3596,7 +3586,7 @@
 
     break;
 
-  case 111:
+  case 110:
 
     { if (yang_read_description(trg, actual, s, "feature", NODE)) {
                                            YYABORT;
@@ -3606,7 +3596,7 @@
 
     break;
 
-  case 112:
+  case 111:
 
     { if (yang_read_reference(trg, actual, s, "feature", NODE)) {
                                          YYABORT;
@@ -3616,7 +3606,7 @@
 
     break;
 
-  case 114:
+  case 113:
 
     { const char *tmp;
 
@@ -3633,7 +3623,7 @@
 
     break;
 
-  case 117:
+  case 116:
 
     { void *tmp;
 
@@ -3660,7 +3650,7 @@
 
     break;
 
-  case 119:
+  case 118:
 
     { void *identity;
 
@@ -3679,7 +3669,7 @@
 
     break;
 
-  case 120:
+  case 119:
 
     { void *identity;
 
@@ -3697,7 +3687,7 @@
 
     break;
 
-  case 121:
+  case 120:
 
     { if (((struct lys_ident *)actual)->flags & LYS_STATUS_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "status", "identity");
@@ -3708,7 +3698,7 @@
 
     break;
 
-  case 122:
+  case 121:
 
     { if (yang_read_description(trg, actual, s, "identity", NODE)) {
                                             YYABORT;
@@ -3718,7 +3708,7 @@
 
     break;
 
-  case 123:
+  case 122:
 
     { if (yang_read_reference(trg, actual, s, "identity", NODE)) {
                                           YYABORT;
@@ -3728,7 +3718,7 @@
 
     break;
 
-  case 125:
+  case 124:
 
     { tpdf_parent = actual;
                                       if (lyp_check_identifier(s, LY_IDENT_TYPE, trg, tpdf_parent)) {
@@ -3781,7 +3771,7 @@
 
     break;
 
-  case 126:
+  case 125:
 
     { if (!((yyvsp[-1].nodes).node.flag & LYS_TYPE_DEF)) {
                       LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "type", "typedef");
@@ -3792,7 +3782,7 @@
 
     break;
 
-  case 127:
+  case 126:
 
     { (yyval.nodes).node.ptr_tpdf = actual;
                             (yyval.nodes).node.flag = 0;
@@ -3800,7 +3790,7 @@
 
     break;
 
-  case 128:
+  case 127:
 
     { actual = (yyvsp[-2].nodes).node.ptr_tpdf;
                                        actual_type = TYPEDEF_KEYWORD;
@@ -3810,13 +3800,13 @@
 
     break;
 
-  case 129:
+  case 128:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, TYPEDEF_KEYWORD)) {YYABORT;} s = NULL; }
 
     break;
 
-  case 130:
+  case 129:
 
     { if (yang_read_default(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, TYPEDEF_KEYWORD)) {
                                     YYABORT;
@@ -3827,7 +3817,7 @@
 
     break;
 
-  case 131:
+  case 130:
 
     { if (yang_check_flags((uint16_t*)&(yyvsp[-1].nodes).node.ptr_tpdf->flags, LYS_STATUS_MASK, "status", "typedef", (yyvsp[0].i), 0)) {
                                    YYABORT;
@@ -3836,7 +3826,7 @@
 
     break;
 
-  case 132:
+  case 131:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, "typedef", NODE)) {
                                         YYABORT;
@@ -3846,7 +3836,7 @@
 
     break;
 
-  case 133:
+  case 132:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_tpdf, s, "typedef", NODE)) {
                                       YYABORT;
@@ -3856,7 +3846,7 @@
 
     break;
 
-  case 135:
+  case 134:
 
     { if (!(actual = yang_read_type(trg, actual, s, actual_type))) {
                                          YYABORT;
@@ -3866,7 +3856,7 @@
 
     break;
 
-  case 138:
+  case 137:
 
     { if (((struct yang_type *)actual)->base == LY_TYPE_STRING &&
                                          ((struct yang_type *)actual)->type->info.str.pat_count) {
@@ -3906,7 +3896,7 @@
 
     break;
 
-  case 142:
+  case 141:
 
     { if (yang_read_require_instance(actual, (yyvsp[0].i))) {
                                                  YYABORT;
@@ -3915,7 +3905,7 @@
 
     break;
 
-  case 143:
+  case 142:
 
     { /* leafref_specification */
                                    if (yang_read_leafref_path(trg, actual, s)) {
@@ -3926,7 +3916,7 @@
 
     break;
 
-  case 144:
+  case 143:
 
     { /* identityref_specification */
                                    if (((struct yang_type *)actual)->base && ((struct yang_type *)actual)->base != LY_TYPE_IDENT) {
@@ -3944,13 +3934,13 @@
 
     break;
 
-  case 149:
+  case 148:
 
     { actual = (yyvsp[-2].v); }
 
     break;
 
-  case 150:
+  case 149:
 
     { struct yang_type *stype = (struct yang_type *)actual;
 
@@ -3971,7 +3961,7 @@
 
     break;
 
-  case 151:
+  case 150:
 
     { if (yang_read_fraction(actual, (yyvsp[-1].uint))) {
                                   YYABORT;
@@ -3980,13 +3970,13 @@
 
     break;
 
-  case 152:
+  case 151:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 153:
+  case 152:
 
     { char *endptr = NULL;
                unsigned long val;
@@ -4006,7 +3996,7 @@
 
     break;
 
-  case 154:
+  case 153:
 
     { actual = (yyvsp[-2].v);
                                                                     actual_type = TYPE_KEYWORD;
@@ -4014,7 +4004,7 @@
 
     break;
 
-  case 155:
+  case 154:
 
     { (yyval.v) = actual;
                          if (!(actual = yang_read_length(trg, actual, s))) {
@@ -4026,7 +4016,7 @@
 
     break;
 
-  case 158:
+  case 157:
 
     { switch (actual_type) {
                                case MUST_KEYWORD:
@@ -4043,7 +4033,7 @@
 
     break;
 
-  case 159:
+  case 158:
 
     { if (yang_read_message(trg, actual, s, (yyvsp[-1].str), ERROR_MESSAGE_KEYWORD)) {
                                              YYABORT;
@@ -4053,7 +4043,7 @@
 
     break;
 
-  case 160:
+  case 159:
 
     { if (yang_read_message(trg, actual, s, (yyvsp[-1].str), ERROR_APP_TAG_KEYWORD)) {
                                              YYABORT;
@@ -4063,7 +4053,7 @@
 
     break;
 
-  case 161:
+  case 160:
 
     { if (yang_read_description(trg, actual, s, (yyvsp[-1].str), NODE)) {
                                            YYABORT;
@@ -4073,7 +4063,7 @@
 
     break;
 
-  case 162:
+  case 161:
 
     { if (yang_read_reference(trg, actual, s, (yyvsp[-1].str), NODE)) {
                                          YYABORT;
@@ -4083,7 +4073,7 @@
 
     break;
 
-  case 163:
+  case 162:
 
     { if (yang_read_pattern(trg, actual, (yyvsp[-2].str), (yyvsp[-1].ch))) {
                                                                           YYABORT;
@@ -4094,7 +4084,7 @@
 
     break;
 
-  case 164:
+  case 163:
 
     { if (((struct yang_type *)actual)->base != 0 && ((struct yang_type *)actual)->base != LY_TYPE_STRING) {
                             free(s);
@@ -4111,25 +4101,25 @@
 
     break;
 
-  case 165:
+  case 164:
 
     { (yyval.ch) = 0x06; }
 
     break;
 
-  case 166:
+  case 165:
 
     { (yyval.ch) = (yyvsp[-1].ch); }
 
     break;
 
-  case 167:
+  case 166:
 
     { (yyval.ch) = 0x06; /* ACK */ }
 
     break;
 
-  case 168:
+  case 167:
 
     { if (trg->version < 2) {
                                         LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "modifier");
@@ -4144,7 +4134,7 @@
 
     break;
 
-  case 169:
+  case 168:
 
     { if (yang_read_message(trg, actual, s, "pattern", ERROR_MESSAGE_KEYWORD)) {
                                              YYABORT;
@@ -4154,7 +4144,7 @@
 
     break;
 
-  case 170:
+  case 169:
 
     { if (yang_read_message(trg, actual, s, "pattern", ERROR_APP_TAG_KEYWORD)) {
                                              YYABORT;
@@ -4164,7 +4154,7 @@
 
     break;
 
-  case 171:
+  case 170:
 
     { if (yang_read_description(trg, actual, s, "pattern", NODE)) {
                                            YYABORT;
@@ -4174,7 +4164,7 @@
 
     break;
 
-  case 172:
+  case 171:
 
     { if (yang_read_reference(trg, actual, s, "pattern", NODE)) {
                                          YYABORT;
@@ -4184,7 +4174,7 @@
 
     break;
 
-  case 173:
+  case 172:
 
     { if (!strcmp(s, "invert-match")) {
                                                        (yyval.ch) = 0x15;
@@ -4199,7 +4189,7 @@
 
     break;
 
-  case 174:
+  case 173:
 
     { struct lys_type_enum * tmp;
 
@@ -4215,7 +4205,7 @@
 
     break;
 
-  case 177:
+  case 176:
 
     { if (yang_check_enum(yang_type, actual, &cnt_val, actual_type)) {
                YYABORT;
@@ -4226,7 +4216,7 @@
 
     break;
 
-  case 178:
+  case 177:
 
     { yang_type = actual;
                        YANG_ADDELEM(((struct yang_type *)actual)->type->info.enums.enm, ((struct yang_type *)actual)->type->info.enums.count);
@@ -4239,7 +4229,7 @@
 
     break;
 
-  case 180:
+  case 179:
 
     { if (((struct lys_type_enum *)actual)->iffeature_size) {
              struct lys_iffeature *tmp;
@@ -4256,7 +4246,7 @@
 
     break;
 
-  case 182:
+  case 181:
 
     { if (trg->version < 2) {
                                        LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature");
@@ -4273,7 +4263,7 @@
 
     break;
 
-  case 183:
+  case 182:
 
     { /* actual_type - it is used to check value of enum statement*/
                                 if (actual_type) {
@@ -4285,7 +4275,7 @@
 
     break;
 
-  case 184:
+  case 183:
 
     { if (yang_check_flags((uint16_t*)&((struct lys_type_enum *)actual)->flags, LYS_STATUS_MASK, "status", "enum", (yyvsp[0].i), 1)) {
                                    YYABORT;
@@ -4294,7 +4284,7 @@
 
     break;
 
-  case 185:
+  case 184:
 
     { if (yang_read_description(trg, actual, s, "enum", NODE)) {
                                         YYABORT;
@@ -4304,7 +4294,7 @@
 
     break;
 
-  case 186:
+  case 185:
 
     { if (yang_read_reference(trg, actual, s, "enum", NODE)) {
                                       YYABORT;
@@ -4314,7 +4304,7 @@
 
     break;
 
-  case 187:
+  case 186:
 
     { ((struct lys_type_enum *)actual)->value = (yyvsp[-1].i);
 
@@ -4327,13 +4317,13 @@
 
     break;
 
-  case 188:
+  case 187:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 189:
+  case 188:
 
     { /* convert it to int32_t */
                 int64_t val;
@@ -4352,7 +4342,7 @@
 
     break;
 
-  case 190:
+  case 189:
 
     { actual = (yyvsp[-1].v);
                                                         actual_type = RANGE_KEYWORD;
@@ -4360,25 +4350,25 @@
 
     break;
 
-  case 194:
+  case 193:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 195:
+  case 194:
 
     { (yyval.i) = 1; }
 
     break;
 
-  case 196:
+  case 195:
 
     { (yyval.i) = -1; }
 
     break;
 
-  case 197:
+  case 196:
 
     { if (!strcmp(s,"true")) {
                   (yyval.i) = 1;
@@ -4395,7 +4385,7 @@
 
     break;
 
-  case 198:
+  case 197:
 
     { struct lys_type_bit * tmp;
 
@@ -4411,7 +4401,7 @@
 
     break;
 
-  case 201:
+  case 200:
 
     { if (yang_check_bit(yang_type, actual, &cnt_val, actual_type)) {
                       YYABORT;
@@ -4422,7 +4412,7 @@
 
     break;
 
-  case 202:
+  case 201:
 
     { yang_type = actual;
                                   YANG_ADDELEM(((struct yang_type *)actual)->type->info.bits.bit,
@@ -4436,7 +4426,7 @@
 
     break;
 
-  case 204:
+  case 203:
 
     { if (((struct lys_type_bit *)actual)->iffeature_size) {
              struct lys_iffeature *tmp;
@@ -4453,7 +4443,7 @@
 
     break;
 
-  case 206:
+  case 205:
 
     { if (trg->version < 2) {
                                       LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, "if-feature", "bit");
@@ -4470,7 +4460,7 @@
 
     break;
 
-  case 207:
+  case 206:
 
     { /* actual_type - it is used to check position of bit statement*/
                                   if (actual_type) {
@@ -4482,7 +4472,7 @@
 
     break;
 
-  case 208:
+  case 207:
 
     { if (yang_check_flags((uint16_t*)&((struct lys_type_bit *)actual)->flags,
                                                      LYS_STATUS_MASK, "status", "bit", (yyvsp[0].i), 1)) {
@@ -4492,7 +4482,7 @@
 
     break;
 
-  case 209:
+  case 208:
 
     { if (yang_read_description(trg, actual, s, "bit", NODE)) {
                                        YYABORT;
@@ -4502,7 +4492,7 @@
 
     break;
 
-  case 210:
+  case 209:
 
     { if (yang_read_reference(trg, actual, s, "bit", NODE)) {
                                      YYABORT;
@@ -4512,7 +4502,7 @@
 
     break;
 
-  case 211:
+  case 210:
 
     { ((struct lys_type_bit *)actual)->pos = (yyvsp[-1].uint);
 
@@ -4525,13 +4515,13 @@
 
     break;
 
-  case 212:
+  case 211:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 213:
+  case 212:
 
     { /* convert it to uint32_t */
                 unsigned long val;
@@ -4551,7 +4541,7 @@
 
     break;
 
-  case 218:
+  case 217:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_GROUPING, sizeof(struct lys_node_grp)))) {
                                          YYABORT;
@@ -4562,13 +4552,13 @@
 
     break;
 
-  case 219:
+  case 218:
 
     { LOGDBG("YANG: finished parsing grouping statement \"%s\"", data_node->name); }
 
     break;
 
-  case 222:
+  case 221:
 
     { (yyval.nodes).grouping = actual;
                                 actual_type = GROUPING_KEYWORD;
@@ -4576,7 +4566,7 @@
 
     break;
 
-  case 223:
+  case 222:
 
     { if ((yyvsp[-1].nodes).grouping->flags & LYS_STATUS_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).grouping, "status", "grouping");
@@ -4587,7 +4577,7 @@
 
     break;
 
-  case 224:
+  case 223:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).grouping, s, "grouping", NODE_PRINT)) {
                                             YYABORT;
@@ -4597,7 +4587,7 @@
 
     break;
 
-  case 225:
+  case 224:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).grouping, s, "grouping", NODE_PRINT)) {
                                           YYABORT;
@@ -4607,7 +4597,7 @@
 
     break;
 
-  case 226:
+  case 225:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                                actual_type = GROUPING_KEYWORD;
@@ -4615,7 +4605,7 @@
 
     break;
 
-  case 227:
+  case 226:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                               actual_type = GROUPING_KEYWORD;
@@ -4623,7 +4613,7 @@
 
     break;
 
-  case 228:
+  case 227:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                                actual_type = GROUPING_KEYWORD;
@@ -4631,7 +4621,7 @@
 
     break;
 
-  case 229:
+  case 228:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                              actual_type = GROUPING_KEYWORD;
@@ -4639,7 +4629,7 @@
 
     break;
 
-  case 230:
+  case 229:
 
     { actual = (yyvsp[-2].nodes).grouping;
                                                    actual_type = GROUPING_KEYWORD;
@@ -4651,7 +4641,7 @@
 
     break;
 
-  case 239:
+  case 238:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_CONTAINER, sizeof(struct lys_node_container)))) {
                                           YYABORT;
@@ -4662,13 +4652,13 @@
 
     break;
 
-  case 240:
+  case 239:
 
     { LOGDBG("YANG: finished parsing container statement \"%s\"", data_node->name); }
 
     break;
 
-  case 242:
+  case 241:
 
     { void *tmp;
 
@@ -4693,7 +4683,7 @@
 
     break;
 
-  case 243:
+  case 242:
 
     { (yyval.nodes).container = actual;
                                  actual_type = CONTAINER_KEYWORD;
@@ -4701,7 +4691,7 @@
 
     break;
 
-  case 244:
+  case 243:
 
     { actual = (yyvsp[-1].nodes).container;
                                     actual_type = CONTAINER_KEYWORD;
@@ -4709,7 +4699,7 @@
 
     break;
 
-  case 246:
+  case 245:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).container->iffeature, (yyvsp[-1].nodes).container->iffeature_size);
                                           ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
@@ -4719,7 +4709,7 @@
 
     break;
 
-  case 247:
+  case 246:
 
     { actual = (yyvsp[-1].nodes).container;
                                     actual_type = CONTAINER_KEYWORD;
@@ -4727,7 +4717,7 @@
 
     break;
 
-  case 249:
+  case 248:
 
     { if (yang_read_presence(trg, (yyvsp[-1].nodes).container, s)) {
                                           YYABORT;
@@ -4737,7 +4727,7 @@
 
     break;
 
-  case 250:
+  case 249:
 
     { if ((yyvsp[-1].nodes).container->flags & LYS_CONFIG_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).container, "config", "container");
@@ -4748,7 +4738,7 @@
 
     break;
 
-  case 251:
+  case 250:
 
     { if ((yyvsp[-1].nodes).container->flags & LYS_STATUS_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).container, "status", "container");
@@ -4759,7 +4749,7 @@
 
     break;
 
-  case 252:
+  case 251:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).container, s, "container", NODE_PRINT)) {
                                              YYABORT;
@@ -4769,7 +4759,7 @@
 
     break;
 
-  case 253:
+  case 252:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).container, s, "container", NODE_PRINT)) {
                                            YYABORT;
@@ -4779,7 +4769,7 @@
 
     break;
 
-  case 254:
+  case 253:
 
     { actual = (yyvsp[-1].nodes).container;
                                         actual_type = CONTAINER_KEYWORD;
@@ -4788,7 +4778,7 @@
 
     break;
 
-  case 256:
+  case 255:
 
     { actual = (yyvsp[-1].nodes).container;
                                       actual_type = CONTAINER_KEYWORD;
@@ -4797,7 +4787,7 @@
 
     break;
 
-  case 258:
+  case 257:
 
     { actual = (yyvsp[-1].nodes).container;
                                             actual_type = CONTAINER_KEYWORD;
@@ -4810,7 +4800,7 @@
 
     break;
 
-  case 260:
+  case 259:
 
     { actual = (yyvsp[-1].nodes).container;
                                        actual_type = CONTAINER_KEYWORD;
@@ -4818,7 +4808,7 @@
 
     break;
 
-  case 262:
+  case 261:
 
     { actual = (yyvsp[-1].nodes).container;
                                         actual_type = CONTAINER_KEYWORD;
@@ -4827,7 +4817,7 @@
 
     break;
 
-  case 264:
+  case 263:
 
     { void *tmp;
 
@@ -4865,7 +4855,7 @@
 
     break;
 
-  case 265:
+  case 264:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_LEAF, sizeof(struct lys_node_leaf)))) {
                                      YYABORT;
@@ -4877,7 +4867,7 @@
 
     break;
 
-  case 266:
+  case 265:
 
     { (yyval.nodes).node.ptr_leaf = actual;
                             (yyval.nodes).node.flag = 0;
@@ -4886,7 +4876,7 @@
 
     break;
 
-  case 267:
+  case 266:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -4894,7 +4884,7 @@
 
     break;
 
-  case 269:
+  case 268:
 
     { 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;
@@ -4904,7 +4894,7 @@
 
     break;
 
-  case 270:
+  case 269:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -4913,13 +4903,13 @@
 
     break;
 
-  case 271:
+  case 270:
 
     { (yyval.nodes) = (yyvsp[-3].nodes);}
 
     break;
 
-  case 272:
+  case 271:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, LEAF_KEYWORD)) {
                                   YYABORT;
@@ -4929,7 +4919,7 @@
 
     break;
 
-  case 273:
+  case 272:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaf;
                                actual_type = LEAF_KEYWORD;
@@ -4937,7 +4927,7 @@
 
     break;
 
-  case 275:
+  case 274:
 
     { if (yang_read_default(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, LEAF_KEYWORD)) {
                                     YYABORT;
@@ -4947,7 +4937,7 @@
 
     break;
 
-  case 276:
+  case 275:
 
     { 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");
@@ -4958,7 +4948,7 @@
 
     break;
 
-  case 277:
+  case 276:
 
     { 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");
@@ -4969,7 +4959,7 @@
 
     break;
 
-  case 278:
+  case 277:
 
     { 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");
@@ -4980,7 +4970,7 @@
 
     break;
 
-  case 279:
+  case 278:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, "leaf", NODE_PRINT)) {
                                         YYABORT;
@@ -4990,7 +4980,7 @@
 
     break;
 
-  case 280:
+  case 279:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_leaf, s, "leaf", NODE_PRINT)) {
                                       YYABORT;
@@ -5000,7 +4990,7 @@
 
     break;
 
-  case 281:
+  case 280:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_LEAFLIST, sizeof(struct lys_node_leaflist)))) {
                                           YYABORT;
@@ -5011,7 +5001,7 @@
 
     break;
 
-  case 282:
+  case 281:
 
     { void *tmp;
 
@@ -5064,7 +5054,7 @@
 
     break;
 
-  case 283:
+  case 282:
 
     { (yyval.nodes).node.ptr_leaflist = actual;
                                  (yyval.nodes).node.flag = 0;
@@ -5073,7 +5063,7 @@
 
     break;
 
-  case 284:
+  case 283:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5081,7 +5071,7 @@
 
     break;
 
-  case 286:
+  case 285:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_leaflist->iffeature,
                                                        (yyvsp[-1].nodes).node.ptr_leaflist->iffeature_size);
@@ -5092,7 +5082,7 @@
 
     break;
 
-  case 287:
+  case 286:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5101,13 +5091,13 @@
 
     break;
 
-  case 288:
+  case 287:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 289:
+  case 288:
 
     { if (trg->version < 2) {
                                          free(s);
@@ -5123,7 +5113,7 @@
 
     break;
 
-  case 290:
+  case 289:
 
     { if (yang_read_units(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, LEAF_LIST_KEYWORD)) {
                                        YYABORT;
@@ -5133,7 +5123,7 @@
 
     break;
 
-  case 291:
+  case 290:
 
     { actual = (yyvsp[-1].nodes).node.ptr_leaflist;
                                     actual_type = LEAF_LIST_KEYWORD;
@@ -5141,7 +5131,7 @@
 
     break;
 
-  case 293:
+  case 292:
 
     { 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");
@@ -5152,7 +5142,7 @@
 
     break;
 
-  case 294:
+  case 293:
 
     { 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");
@@ -5170,7 +5160,7 @@
 
     break;
 
-  case 295:
+  case 294:
 
     { 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");
@@ -5188,7 +5178,7 @@
 
     break;
 
-  case 296:
+  case 295:
 
     { 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");
@@ -5203,7 +5193,7 @@
 
     break;
 
-  case 297:
+  case 296:
 
     { 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");
@@ -5214,7 +5204,7 @@
 
     break;
 
-  case 298:
+  case 297:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list", NODE_PRINT)) {
                                              YYABORT;
@@ -5224,7 +5214,7 @@
 
     break;
 
-  case 299:
+  case 298:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_leaflist, s, "leaf-list", NODE_PRINT)) {
                                            YYABORT;
@@ -5234,7 +5224,7 @@
 
     break;
 
-  case 300:
+  case 299:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_LIST, sizeof(struct lys_node_list)))) {
                                      YYABORT;
@@ -5245,7 +5235,7 @@
 
     break;
 
-  case 301:
+  case 300:
 
     { void *tmp;
 
@@ -5290,7 +5280,7 @@
 
     break;
 
-  case 302:
+  case 301:
 
     { (yyval.nodes).node.ptr_list = actual;
                             (yyval.nodes).node.flag = 0;
@@ -5299,7 +5289,7 @@
 
     break;
 
-  case 303:
+  case 302:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                actual_type = LIST_KEYWORD;
@@ -5307,7 +5297,7 @@
 
     break;
 
-  case 305:
+  case 304:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_list->iffeature,
                                                   (yyvsp[-1].nodes).node.ptr_list->iffeature_size);
@@ -5318,7 +5308,7 @@
 
     break;
 
-  case 306:
+  case 305:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                actual_type = LIST_KEYWORD;
@@ -5326,7 +5316,7 @@
 
     break;
 
-  case 308:
+  case 307:
 
     { if ((yyvsp[-1].nodes).node.ptr_list->keys) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "key", "list");
@@ -5340,7 +5330,7 @@
 
     break;
 
-  case 309:
+  case 308:
 
     { 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;
@@ -5351,7 +5341,7 @@
 
     break;
 
-  case 310:
+  case 309:
 
     { 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");
@@ -5362,7 +5352,7 @@
 
     break;
 
-  case 311:
+  case 310:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MIN_ELEMENTS) {
                                          LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "min-elements", "list");
@@ -5380,7 +5370,7 @@
 
     break;
 
-  case 312:
+  case 311:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_MAX_ELEMENTS) {
                                          LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "max-elements", "list");
@@ -5398,7 +5388,7 @@
 
     break;
 
-  case 313:
+  case 312:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_ORDERED_MASK) {
                                        LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_list, "ordered by", "list");
@@ -5413,7 +5403,7 @@
 
     break;
 
-  case 314:
+  case 313:
 
     { 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");
@@ -5424,7 +5414,7 @@
 
     break;
 
-  case 315:
+  case 314:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list", NODE_PRINT)) {
                                         YYABORT;
@@ -5434,7 +5424,7 @@
 
     break;
 
-  case 316:
+  case 315:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_list, s, "list", NODE_PRINT)) {
                                       YYABORT;
@@ -5444,7 +5434,7 @@
 
     break;
 
-  case 317:
+  case 316:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                   actual_type = LIST_KEYWORD;
@@ -5452,7 +5442,7 @@
 
     break;
 
-  case 319:
+  case 318:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5461,7 +5451,7 @@
 
     break;
 
-  case 321:
+  case 320:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                  actual_type = LIST_KEYWORD;
@@ -5470,7 +5460,7 @@
 
     break;
 
-  case 323:
+  case 322:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                        actual_type = LIST_KEYWORD;
@@ -5483,7 +5473,7 @@
 
     break;
 
-  case 325:
+  case 324:
 
     { actual = (yyvsp[-1].nodes).node.ptr_list;
                                    actual_type = LIST_KEYWORD;
@@ -5493,13 +5483,13 @@
 
     break;
 
-  case 326:
+  case 325:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 327:
+  case 326:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_CHOICE, sizeof(struct lys_node_choice)))) {
                                        YYABORT;
@@ -5510,13 +5500,13 @@
 
     break;
 
-  case 328:
+  case 327:
 
     { LOGDBG("YANG: finished parsing choice statement \"%s\"", data_node->name); }
 
     break;
 
-  case 330:
+  case 329:
 
     { struct lys_iffeature *tmp;
 
@@ -5538,7 +5528,7 @@
 
     break;
 
-  case 331:
+  case 330:
 
     { (yyval.nodes).node.ptr_choice = actual;
                               (yyval.nodes).node.flag = 0;
@@ -5547,7 +5537,7 @@
 
     break;
 
-  case 332:
+  case 331:
 
     { actual = (yyvsp[-1].nodes).node.ptr_choice;
                                  actual_type = CHOICE_KEYWORD;
@@ -5555,13 +5545,13 @@
 
     break;
 
-  case 333:
+  case 332:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 334:
+  case 333:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_choice->iffeature,
                                                     (yyvsp[-1].nodes).node.ptr_choice->iffeature_size);
@@ -5572,7 +5562,7 @@
 
     break;
 
-  case 335:
+  case 334:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_CHOICE_DEFAULT) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_choice, "default", "choice");
@@ -5587,7 +5577,7 @@
 
     break;
 
-  case 336:
+  case 335:
 
     { 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");
@@ -5599,7 +5589,7 @@
 
     break;
 
-  case 337:
+  case 336:
 
     { 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");
@@ -5611,7 +5601,7 @@
 
     break;
 
-  case 338:
+  case 337:
 
     { 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");
@@ -5623,7 +5613,7 @@
 
     break;
 
-  case 339:
+  case 338:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_choice, s, "choice", NODE_PRINT)) {
                                           YYABORT;
@@ -5634,7 +5624,7 @@
 
     break;
 
-  case 340:
+  case 339:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_choice, s, "choice", NODE_PRINT)) {
                                         YYABORT;
@@ -5645,7 +5635,7 @@
 
     break;
 
-  case 341:
+  case 340:
 
     { actual = (yyvsp[-1].nodes).node.ptr_choice;
                                             actual_type = CHOICE_KEYWORD;
@@ -5654,13 +5644,13 @@
 
     break;
 
-  case 342:
+  case 341:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 351:
+  case 350:
 
     { if (trg->version < 2 ) {
                      LOGVAL(LYE_INSTMT, LY_VLOG_LYS, actual, "choice");
@@ -5670,7 +5660,7 @@
 
     break;
 
-  case 352:
+  case 351:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_CASE, sizeof(struct lys_node_case)))) {
                                      YYABORT;
@@ -5681,13 +5671,13 @@
 
     break;
 
-  case 353:
+  case 352:
 
     { LOGDBG("YANG: finished parsing case statement \"%s\"", data_node->name); }
 
     break;
 
-  case 355:
+  case 354:
 
     { struct lys_iffeature *tmp;
 
@@ -5703,7 +5693,7 @@
 
     break;
 
-  case 356:
+  case 355:
 
     { (yyval.nodes).cs = actual;
                             actual_type = CASE_KEYWORD;
@@ -5711,7 +5701,7 @@
 
     break;
 
-  case 357:
+  case 356:
 
     { actual = (yyvsp[-1].nodes).cs;
                                actual_type = CASE_KEYWORD;
@@ -5719,7 +5709,7 @@
 
     break;
 
-  case 359:
+  case 358:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).cs->iffeature, (yyvsp[-1].nodes).cs->iffeature_size);
                                      ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
@@ -5729,7 +5719,7 @@
 
     break;
 
-  case 360:
+  case 359:
 
     { if ((yyvsp[-1].nodes).cs->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).cs, "status", "case");
@@ -5740,7 +5730,7 @@
 
     break;
 
-  case 361:
+  case 360:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).cs, s, "case", NODE_PRINT)) {
                                         YYABORT;
@@ -5750,7 +5740,7 @@
 
     break;
 
-  case 362:
+  case 361:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).cs, s, "case", NODE_PRINT)) {
                                       YYABORT;
@@ -5760,7 +5750,7 @@
 
     break;
 
-  case 363:
+  case 362:
 
     { actual = (yyvsp[-1].nodes).cs;
                                    actual_type = CASE_KEYWORD;
@@ -5769,7 +5759,7 @@
 
     break;
 
-  case 365:
+  case 364:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_ANYXML, sizeof(struct lys_node_anydata)))) {
                                        YYABORT;
@@ -5781,13 +5771,13 @@
 
     break;
 
-  case 366:
+  case 365:
 
     { LOGDBG("YANG: finished parsing anyxml statement \"%s\"", data_node->name); }
 
     break;
 
-  case 367:
+  case 366:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_ANYDATA, sizeof(struct lys_node_anydata)))) {
                                         YYABORT;
@@ -5799,13 +5789,13 @@
 
     break;
 
-  case 368:
+  case 367:
 
     { LOGDBG("YANG: finished parsing anydata statement \"%s\"", data_node->name); }
 
     break;
 
-  case 370:
+  case 369:
 
     { void *tmp;
 
@@ -5830,7 +5820,7 @@
 
     break;
 
-  case 371:
+  case 370:
 
     { (yyval.nodes).node.ptr_anydata = actual;
                               (yyval.nodes).node.flag = actual_type;
@@ -5838,7 +5828,7 @@
 
     break;
 
-  case 372:
+  case 371:
 
     { actual = (yyvsp[-1].nodes).node.ptr_anydata;
                                  actual_type = (yyvsp[-1].nodes).node.flag;
@@ -5846,7 +5836,7 @@
 
     break;
 
-  case 374:
+  case 373:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_anydata->iffeature,
                                                     (yyvsp[-1].nodes).node.ptr_anydata->iffeature_size);
@@ -5857,7 +5847,7 @@
 
     break;
 
-  case 375:
+  case 374:
 
     { actual = (yyvsp[-1].nodes).node.ptr_anydata;
                                  actual_type = (yyvsp[-1].nodes).node.flag;
@@ -5865,7 +5855,7 @@
 
     break;
 
-  case 377:
+  case 376:
 
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_CONFIG_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "config",
@@ -5877,7 +5867,7 @@
 
     break;
 
-  case 378:
+  case 377:
 
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_MAND_MASK) {
                                         LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "mandatory",
@@ -5889,7 +5879,7 @@
 
     break;
 
-  case 379:
+  case 378:
 
     { if ((yyvsp[-1].nodes).node.ptr_anydata->flags & LYS_STATUS_MASK) {
                                      LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_anydata, "status",
@@ -5901,7 +5891,7 @@
 
     break;
 
-  case 380:
+  case 379:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata", NODE_PRINT)) {
                                           YYABORT;
@@ -5911,7 +5901,7 @@
 
     break;
 
-  case 381:
+  case 380:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_anydata, s, ((yyvsp[-1].nodes).node.flag == ANYXML_KEYWORD) ? "anyxml" : "anydata", NODE_PRINT)) {
                                         YYABORT;
@@ -5921,7 +5911,7 @@
 
     break;
 
-  case 382:
+  case 381:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_USES, sizeof(struct lys_node_uses)))) {
                                          YYABORT;
@@ -5932,13 +5922,13 @@
 
     break;
 
-  case 383:
+  case 382:
 
     { LOGDBG("YANG: finished parsing uses statement \"%s\"", data_node->name); }
 
     break;
 
-  case 385:
+  case 384:
 
     { void *tmp;
 
@@ -5972,7 +5962,7 @@
 
     break;
 
-  case 386:
+  case 385:
 
     { (yyval.nodes).uses = actual;
                             actual_type = USES_KEYWORD;
@@ -5980,7 +5970,7 @@
 
     break;
 
-  case 387:
+  case 386:
 
     { actual = (yyvsp[-1].nodes).uses;
                                actual_type = USES_KEYWORD;
@@ -5988,7 +5978,7 @@
 
     break;
 
-  case 389:
+  case 388:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).uses->iffeature, (yyvsp[-1].nodes).uses->iffeature_size);
                                      ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
@@ -5998,7 +5988,7 @@
 
     break;
 
-  case 390:
+  case 389:
 
     { if ((yyvsp[-1].nodes).uses->flags & LYS_STATUS_MASK) {
                                    LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).uses, "status", "uses");
@@ -6009,7 +5999,7 @@
 
     break;
 
-  case 391:
+  case 390:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).uses, s, "uses", NODE_PRINT)) {
                                         YYABORT;
@@ -6019,7 +6009,7 @@
 
     break;
 
-  case 392:
+  case 391:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).uses, s, "uses", NODE_PRINT)) {
                                       YYABORT;
@@ -6029,7 +6019,7 @@
 
     break;
 
-  case 393:
+  case 392:
 
     { actual = (yyvsp[-1].nodes).uses;
                                  actual_type = USES_KEYWORD;
@@ -6037,7 +6027,7 @@
 
     break;
 
-  case 395:
+  case 394:
 
     { actual = (yyvsp[-1].nodes).uses;
                                        actual_type = USES_KEYWORD;
@@ -6046,7 +6036,7 @@
 
     break;
 
-  case 399:
+  case 398:
 
     { YANG_ADDELEM(((struct lys_node_uses *)actual)->refine,
                                                ((struct lys_node_uses *)actual)->refine_size);
@@ -6060,7 +6050,7 @@
 
     break;
 
-  case 402:
+  case 401:
 
     { void *tmp;
 
@@ -6095,7 +6085,7 @@
 
     break;
 
-  case 403:
+  case 402:
 
     { (yyval.nodes).refine = actual;
                                     actual_type = REFINE_KEYWORD;
@@ -6103,7 +6093,7 @@
 
     break;
 
-  case 404:
+  case 403:
 
     { actual = (yyvsp[-2].nodes).refine;
                                                actual_type = REFINE_KEYWORD;
@@ -6122,7 +6112,7 @@
 
     break;
 
-  case 405:
+  case 404:
 
     { if (trg->version < 2) {
                                                free(s);
@@ -6151,7 +6141,7 @@
 
     break;
 
-  case 406:
+  case 405:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                              if ((yyvsp[-1].nodes).refine->target_type & LYS_CONTAINER) {
@@ -6178,7 +6168,7 @@
 
     break;
 
-  case 407:
+  case 406:
 
     { int i;
 
@@ -6234,7 +6224,7 @@
 
     break;
 
-  case 408:
+  case 407:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                            if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_CHOICE | LYS_LIST | LYS_CONTAINER | LYS_LEAFLIST)) {
@@ -6256,7 +6246,7 @@
 
     break;
 
-  case 409:
+  case 408:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                               if ((yyvsp[-1].nodes).refine->target_type & (LYS_LEAF | LYS_CHOICE | LYS_ANYXML)) {
@@ -6278,7 +6268,7 @@
 
     break;
 
-  case 410:
+  case 409:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                                  if ((yyvsp[-1].nodes).refine->target_type & (LYS_LIST | LYS_LEAFLIST)) {
@@ -6304,7 +6294,7 @@
 
     break;
 
-  case 411:
+  case 410:
 
     { if ((yyvsp[-1].nodes).refine->target_type) {
                                                  if ((yyvsp[-1].nodes).refine->target_type & (LYS_LIST | LYS_LEAFLIST)) {
@@ -6330,7 +6320,7 @@
 
     break;
 
-  case 412:
+  case 411:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).refine, s, "refine", NODE)) {
                                                 YYABORT;
@@ -6340,7 +6330,7 @@
 
     break;
 
-  case 413:
+  case 412:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).refine, s, "refine", NODE)) {
                                               YYABORT;
@@ -6350,7 +6340,7 @@
 
     break;
 
-  case 416:
+  case 415:
 
     { void *parent;
 
@@ -6366,7 +6356,7 @@
 
     break;
 
-  case 420:
+  case 419:
 
     { YANG_ADDELEM(trg->augment, trg->augment_size);
                                if (yang_read_augment(trg, NULL, actual, s)) {
@@ -6378,7 +6368,7 @@
 
     break;
 
-  case 422:
+  case 421:
 
     { (yyval.nodes).augment = actual;
                                actual_type = AUGMENT_KEYWORD;
@@ -6386,7 +6376,7 @@
 
     break;
 
-  case 423:
+  case 422:
 
     { actual = (yyvsp[-1].nodes).augment;
                                   actual_type = AUGMENT_KEYWORD;
@@ -6394,7 +6384,7 @@
 
     break;
 
-  case 425:
+  case 424:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).augment->iffeature, (yyvsp[-1].nodes).augment->iffeature_size);
                                         ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
@@ -6404,7 +6394,7 @@
 
     break;
 
-  case 426:
+  case 425:
 
     { if ((yyvsp[-1].nodes).augment->flags & LYS_STATUS_MASK) {
                                       LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).augment, "status", "augment");
@@ -6415,7 +6405,7 @@
 
     break;
 
-  case 427:
+  case 426:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).augment, s, "augment", NODE_PRINT)) {
                                            YYABORT;
@@ -6425,7 +6415,7 @@
 
     break;
 
-  case 428:
+  case 427:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).augment, s, "augment", NODE_PRINT)) {
                                          YYABORT;
@@ -6435,7 +6425,7 @@
 
     break;
 
-  case 429:
+  case 428:
 
     { actual = (yyvsp[-1].nodes).augment;
                                       actual_type = AUGMENT_KEYWORD;
@@ -6444,7 +6434,7 @@
 
     break;
 
-  case 431:
+  case 430:
 
     { actual = (yyvsp[-1].nodes).augment;
                                     actual_type = AUGMENT_KEYWORD;
@@ -6453,7 +6443,7 @@
 
     break;
 
-  case 433:
+  case 432:
 
     { actual = (yyvsp[-1].nodes).augment;
                                           actual_type = AUGMENT_KEYWORD;
@@ -6466,7 +6456,7 @@
 
     break;
 
-  case 435:
+  case 434:
 
     { actual = (yyvsp[-1].nodes).augment;
                                   actual_type = AUGMENT_KEYWORD;
@@ -6475,7 +6465,7 @@
 
     break;
 
-  case 437:
+  case 436:
 
     { if (param->module->version != 2) {
                                        LOGVAL(LYE_INSTMT, LY_VLOG_LYS, actual, "action");
@@ -6493,7 +6483,7 @@
 
     break;
 
-  case 438:
+  case 437:
 
     { config_inherit = (yyvsp[-1].i);
                                                          LOGDBG("YANG: finished parsing action statement \"%s\"", data_node->name);
@@ -6501,7 +6491,7 @@
 
     break;
 
-  case 439:
+  case 438:
 
     { if (!(actual = yang_read_node(trg, NULL, param->node, s, LYS_RPC, sizeof(struct lys_node_rpc_action)))) {
                                     YYABORT;
@@ -6514,7 +6504,7 @@
 
     break;
 
-  case 440:
+  case 439:
 
     { config_inherit = (yyvsp[-1].i);
                                                 LOGDBG("YANG: finished parsing rpc statement \"%s\"", data_node->name);
@@ -6522,7 +6512,7 @@
 
     break;
 
-  case 442:
+  case 441:
 
     { void *tmp;
 
@@ -6547,7 +6537,7 @@
 
     break;
 
-  case 443:
+  case 442:
 
     { (yyval.nodes).node.ptr_rpc = actual;
                            (yyval.nodes).node.flag = 0;
@@ -6556,7 +6546,7 @@
 
     break;
 
-  case 444:
+  case 443:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).node.ptr_rpc->iffeature,
                                                  (yyvsp[-1].nodes).node.ptr_rpc->iffeature_size);
@@ -6567,7 +6557,7 @@
 
     break;
 
-  case 445:
+  case 444:
 
     { 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");
@@ -6578,7 +6568,7 @@
 
     break;
 
-  case 446:
+  case 445:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc", NODE_PRINT)) {
                                        YYABORT;
@@ -6588,7 +6578,7 @@
 
     break;
 
-  case 447:
+  case 446:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).node.ptr_rpc, s, "rpc", NODE_PRINT)) {
                                      YYABORT;
@@ -6598,7 +6588,7 @@
 
     break;
 
-  case 448:
+  case 447:
 
     { actual = (yyvsp[-1].nodes).node.ptr_rpc;
                                  actual_type = RPC_KEYWORD;
@@ -6606,7 +6596,7 @@
 
     break;
 
-  case 450:
+  case 449:
 
     { actual = (yyvsp[-1].nodes).node.ptr_rpc;
                                   actual_type = RPC_KEYWORD;
@@ -6615,7 +6605,7 @@
 
     break;
 
-  case 452:
+  case 451:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_RPC_INPUT) {
                                  LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_rpc, "input", "rpc");
@@ -6629,13 +6619,13 @@
 
     break;
 
-  case 453:
+  case 452:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 454:
+  case 453:
 
     { if ((yyvsp[-1].nodes).node.flag & LYS_RPC_OUTPUT) {
                                   LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).node.ptr_rpc, "output", "rpc");
@@ -6649,13 +6639,13 @@
 
     break;
 
-  case 455:
+  case 454:
 
     { (yyval.nodes) = (yyvsp[-3].nodes); }
 
     break;
 
-  case 456:
+  case 455:
 
     { s = strdup("input");
                                    if (!s) {
@@ -6671,7 +6661,7 @@
 
     break;
 
-  case 457:
+  case 456:
 
     { void *tmp;
 
@@ -6698,7 +6688,7 @@
 
     break;
 
-  case 458:
+  case 457:
 
     { (yyval.nodes).inout = actual;
                                     actual_type = INPUT_KEYWORD;
@@ -6706,7 +6696,7 @@
 
     break;
 
-  case 459:
+  case 458:
 
     { actual = (yyvsp[-1].nodes).inout;
                                        actual_type = INPUT_KEYWORD;
@@ -6714,7 +6704,7 @@
 
     break;
 
-  case 461:
+  case 460:
 
     { actual = (yyvsp[-1].nodes).inout;
                                           actual_type = INPUT_KEYWORD;
@@ -6722,7 +6712,7 @@
 
     break;
 
-  case 463:
+  case 462:
 
     { actual = (yyvsp[-1].nodes).inout;
                                            actual_type = INPUT_KEYWORD;
@@ -6731,7 +6721,7 @@
 
     break;
 
-  case 465:
+  case 464:
 
     { actual = (yyvsp[-1].nodes).inout;
                                            actual_type = INPUT_KEYWORD;
@@ -6740,7 +6730,7 @@
 
     break;
 
-  case 467:
+  case 466:
 
     { s = strdup("output");
                                      if (!s) {
@@ -6756,7 +6746,7 @@
 
     break;
 
-  case 468:
+  case 467:
 
     { void *tmp;
 
@@ -6783,7 +6773,7 @@
 
     break;
 
-  case 469:
+  case 468:
 
     { if (!(actual = yang_read_node(trg, actual, param->node, s, LYS_NOTIF, sizeof(struct lys_node_notif)))) {
                                              YYABORT;
@@ -6795,13 +6785,13 @@
 
     break;
 
-  case 470:
+  case 469:
 
     { config_inherit = (yyvsp[-1].i); }
 
     break;
 
-  case 472:
+  case 471:
 
     { void *tmp;
 
@@ -6837,7 +6827,7 @@
 
     break;
 
-  case 473:
+  case 472:
 
     { (yyval.nodes).notif = actual;
                                     actual_type = NOTIFICATION_KEYWORD;
@@ -6845,7 +6835,7 @@
 
     break;
 
-  case 474:
+  case 473:
 
     { actual = (yyvsp[-1].nodes).notif;
                                        actual_type = NOTIFICATION_KEYWORD;
@@ -6853,7 +6843,7 @@
 
     break;
 
-  case 476:
+  case 475:
 
     { YANG_ADDELEM((yyvsp[-1].nodes).notif->iffeature, (yyvsp[-1].nodes).notif->iffeature_size);
                                              ((struct lys_iffeature *)actual)->features = (struct lys_feature**)s;
@@ -6863,7 +6853,7 @@
 
     break;
 
-  case 477:
+  case 476:
 
     { if ((yyvsp[-1].nodes).notif->flags & LYS_STATUS_MASK) {
                                            LOGVAL(LYE_TOOMANY, LY_VLOG_LYS, (yyvsp[-1].nodes).notif, "status", "notification");
@@ -6874,7 +6864,7 @@
 
     break;
 
-  case 478:
+  case 477:
 
     { if (yang_read_description(trg, (yyvsp[-1].nodes).notif, s, "notification", NODE_PRINT)) {
                                                 YYABORT;
@@ -6884,7 +6874,7 @@
 
     break;
 
-  case 479:
+  case 478:
 
     { if (yang_read_reference(trg, (yyvsp[-1].nodes).notif, s, "notification", NODE_PRINT)) {
                                               YYABORT;
@@ -6894,7 +6884,7 @@
 
     break;
 
-  case 480:
+  case 479:
 
     { actual = (yyvsp[-1].nodes).notif;
                                           actual_type = NOTIFICATION_KEYWORD;
@@ -6902,7 +6892,7 @@
 
     break;
 
-  case 482:
+  case 481:
 
     { actual = (yyvsp[-1].nodes).notif;
                                            actual_type = NOTIFICATION_KEYWORD;
@@ -6911,7 +6901,7 @@
 
     break;
 
-  case 484:
+  case 483:
 
     { actual = (yyvsp[-1].nodes).notif;
                                            actual_type = NOTIFICATION_KEYWORD;
@@ -6920,7 +6910,7 @@
 
     break;
 
-  case 486:
+  case 485:
 
     { YANG_ADDELEM(trg->deviation, trg->deviation_size);
                                    ((struct lys_deviation *)actual)->target_name = transform_schema2json(trg, s);
@@ -6933,7 +6923,7 @@
 
     break;
 
-  case 487:
+  case 486:
 
     { void *tmp;
 
@@ -6952,7 +6942,7 @@
 
     break;
 
-  case 488:
+  case 487:
 
     { (yyval.dev) = actual;
                                  actual_type = DEVIATION_KEYWORD;
@@ -6960,7 +6950,7 @@
 
     break;
 
-  case 489:
+  case 488:
 
     { if (yang_read_description(trg, (yyvsp[-1].dev), s, "deviation", NODE)) {
                                              YYABORT;
@@ -6971,7 +6961,7 @@
 
     break;
 
-  case 490:
+  case 489:
 
     { if (yang_read_reference(trg, (yyvsp[-1].dev), s, "deviation", NODE)) {
                                            YYABORT;
@@ -6982,7 +6972,7 @@
 
     break;
 
-  case 491:
+  case 490:
 
     { actual = (yyvsp[-3].dev);
                                                                 actual_type = DEVIATION_KEYWORD;
@@ -6991,7 +6981,7 @@
 
     break;
 
-  case 494:
+  case 493:
 
     { if (yang_read_deviate_unsupported(actual)) {
                        YYABORT;
@@ -7000,7 +6990,7 @@
 
     break;
 
-  case 500:
+  case 499:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_ADD))) {
                                          YYABORT;
@@ -7009,7 +6999,7 @@
 
     break;
 
-  case 503:
+  case 502:
 
     { void *tmp;
 
@@ -7043,7 +7033,7 @@
 
     break;
 
-  case 504:
+  case 503:
 
     { (yyval.deviate) = actual;
                                    actual_type = ADD_KEYWORD;
@@ -7051,7 +7041,7 @@
 
     break;
 
-  case 505:
+  case 504:
 
     { if (yang_read_units(trg, actual, s, ADD_KEYWORD)) {
                                          YYABORT;
@@ -7062,7 +7052,7 @@
 
     break;
 
-  case 506:
+  case 505:
 
     { actual = (yyvsp[-2].deviate);
                                               actual_type = ADD_KEYWORD;
@@ -7071,7 +7061,7 @@
 
     break;
 
-  case 507:
+  case 506:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->unique, (yyvsp[-1].deviate)->unique_size);
                                         ((struct lys_unique *)actual)->expr = (const char **)s;
@@ -7082,7 +7072,7 @@
 
     break;
 
-  case 508:
+  case 507:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                          *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7093,7 +7083,7 @@
 
     break;
 
-  case 509:
+  case 508:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_CONFIG_MASK) {
                                           LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "config", "deviate");
@@ -7105,7 +7095,7 @@
 
     break;
 
-  case 510:
+  case 509:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_MAND_MASK) {
                                              LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "mandatory", "deviate");
@@ -7117,7 +7107,7 @@
 
     break;
 
-  case 511:
+  case 510:
 
     { if ((yyvsp[-1].deviate)->min_set) {
                                                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "min-elements", "deviation");
@@ -7130,7 +7120,7 @@
 
     break;
 
-  case 512:
+  case 511:
 
     { if ((yyvsp[-1].deviate)->max_set) {
                                                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "max-elements", "deviation");
@@ -7143,7 +7133,7 @@
 
     break;
 
-  case 513:
+  case 512:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_DEL))) {
                                                YYABORT;
@@ -7152,7 +7142,7 @@
 
     break;
 
-  case 516:
+  case 515:
 
     { void *tmp;
 
@@ -7186,7 +7176,7 @@
 
     break;
 
-  case 517:
+  case 516:
 
     { (yyval.deviate) = actual;
                                       actual_type = DELETE_KEYWORD;
@@ -7194,7 +7184,7 @@
 
     break;
 
-  case 518:
+  case 517:
 
     { if (yang_read_units(trg, actual, s, DELETE_KEYWORD)) {
                                             YYABORT;
@@ -7205,7 +7195,7 @@
 
     break;
 
-  case 519:
+  case 518:
 
     { actual = (yyvsp[-2].deviate);
                                                  actual_type = DELETE_KEYWORD;
@@ -7214,7 +7204,7 @@
 
     break;
 
-  case 520:
+  case 519:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->unique, (yyvsp[-1].deviate)->unique_size);
                                            ((struct lys_unique *)actual)->expr = (const char **)s;
@@ -7225,7 +7215,7 @@
 
     break;
 
-  case 521:
+  case 520:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                             *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7236,7 +7226,7 @@
 
     break;
 
-  case 522:
+  case 521:
 
     { if (!(actual = yang_read_deviate(actual, LY_DEVIATE_RPL))) {
                                                  YYABORT;
@@ -7245,7 +7235,7 @@
 
     break;
 
-  case 525:
+  case 524:
 
     { void *tmp;
 
@@ -7261,7 +7251,7 @@
 
     break;
 
-  case 526:
+  case 525:
 
     { (yyval.deviate) = actual;
                                        actual_type = REPLACE_KEYWORD;
@@ -7269,7 +7259,7 @@
 
     break;
 
-  case 527:
+  case 526:
 
     { actual = (yyvsp[-2].deviate);
                                                   actual_type = REPLACE_KEYWORD;
@@ -7277,7 +7267,7 @@
 
     break;
 
-  case 528:
+  case 527:
 
     { if (yang_read_units(trg, actual, s, DELETE_KEYWORD)) {
                                              YYABORT;
@@ -7288,7 +7278,7 @@
 
     break;
 
-  case 529:
+  case 528:
 
     { YANG_ADDELEM((yyvsp[-1].deviate)->dflt, (yyvsp[-1].deviate)->dflt_size);
                                              *((const char **)actual) = lydict_insert_zc(trg->ctx, s);
@@ -7299,7 +7289,7 @@
 
     break;
 
-  case 530:
+  case 529:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_CONFIG_MASK) {
                                               LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "config", "deviate");
@@ -7311,7 +7301,7 @@
 
     break;
 
-  case 531:
+  case 530:
 
     { if ((yyvsp[-1].deviate)->flags & LYS_MAND_MASK) {
                                                  LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "mandatory", "deviate");
@@ -7323,7 +7313,7 @@
 
     break;
 
-  case 532:
+  case 531:
 
     { if ((yyvsp[-1].deviate)->min_set) {
                                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "min-elements", "deviation");
@@ -7336,7 +7326,7 @@
 
     break;
 
-  case 533:
+  case 532:
 
     { if ((yyvsp[-1].deviate)->max_set) {
                                                     LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, "max-elements", "deviation");
@@ -7349,7 +7339,7 @@
 
     break;
 
-  case 534:
+  case 533:
 
     { if (!(actual=yang_read_when(trg, actual, actual_type, s))) {
                           YYABORT;
@@ -7360,7 +7350,7 @@
 
     break;
 
-  case 539:
+  case 538:
 
     { if (yang_read_description(trg, actual, s, "when", NODE)) {
                                         YYABORT;
@@ -7370,7 +7360,7 @@
 
     break;
 
-  case 540:
+  case 539:
 
     { if (yang_read_reference(trg, actual, s, "when", NODE)) {
                                       YYABORT;
@@ -7380,25 +7370,25 @@
 
     break;
 
-  case 541:
+  case 540:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 542:
+  case 541:
 
     { (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET; }
 
     break;
 
-  case 543:
+  case 542:
 
     { (yyval.i) = LYS_CONFIG_R | LYS_CONFIG_SET; }
 
     break;
 
-  case 544:
+  case 543:
 
     { if (!strcmp(s, "true")) {
                   (yyval.i) = LYS_CONFIG_W | LYS_CONFIG_SET;
@@ -7415,25 +7405,25 @@
 
     break;
 
-  case 545:
+  case 544:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 546:
+  case 545:
 
     { (yyval.i) = LYS_MAND_TRUE; }
 
     break;
 
-  case 547:
+  case 546:
 
     { (yyval.i) = LYS_MAND_FALSE; }
 
     break;
 
-  case 548:
+  case 547:
 
     { if (!strcmp(s, "true")) {
                   (yyval.i) = LYS_MAND_TRUE;
@@ -7450,6 +7440,12 @@
 
     break;
 
+  case 549:
+
+    { (yyval.uint) = (yyvsp[-1].uint); }
+
+    break;
+
   case 550:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
@@ -7458,12 +7454,6 @@
 
   case 551:
 
-    { (yyval.uint) = (yyvsp[-1].uint); }
-
-    break;
-
-  case 552:
-
     { if (strlen(s) == 1 && s[0] == '0') {
                   (yyval.uint) = 0;
                 } else {
@@ -7486,25 +7476,25 @@
 
     break;
 
-  case 553:
+  case 552:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 554:
+  case 553:
 
     { (yyval.uint) = 0; }
 
     break;
 
-  case 555:
+  case 554:
 
     { (yyval.uint) = (yyvsp[-1].uint); }
 
     break;
 
-  case 556:
+  case 555:
 
     { if (!strcmp(s, "unbounded")) {
                   (yyval.uint) = 0;
@@ -7528,25 +7518,25 @@
 
     break;
 
-  case 557:
+  case 556:
 
     { (yyval.i) = (yyvsp[-1].i); }
 
     break;
 
-  case 558:
+  case 557:
 
     { (yyval.i) = LYS_USERORDERED; }
 
     break;
 
-  case 559:
+  case 558:
 
     { (yyval.i) = LYS_SYSTEMORDERED; }
 
     break;
 
-  case 560:
+  case 559:
 
     { if (!strcmp(s, "user")) {
                   (yyval.i) = LYS_USERORDERED;
@@ -7562,7 +7552,7 @@
 
     break;
 
-  case 561:
+  case 560:
 
     { switch (actual_type) {
                        case CONTAINER_KEYWORD:
@@ -7629,7 +7619,7 @@
 
     break;
 
-  case 571:
+  case 570:
 
     { s = strdup(yyget_text(scanner));
                                if (!s) {
@@ -7640,7 +7630,7 @@
 
     break;
 
-  case 574:
+  case 573:
 
     { (yyval.v) = actual;
                         if (!(actual = yang_read_range(trg, actual, s))) {
@@ -7652,7 +7642,7 @@
 
     break;
 
-  case 575:
+  case 574:
 
     { if (s) {
                                                 s = ly_realloc(s,strlen(s) + yyget_leng(scanner) + 2);
@@ -7675,7 +7665,7 @@
 
     break;
 
-  case 579:
+  case 578:
 
     { if (s) {
                                               s = ly_realloc(s,strlen(s) + yyget_leng(scanner) + 1);
@@ -7695,13 +7685,13 @@
 
     break;
 
-  case 581:
+  case 580:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 582:
+  case 581:
 
     { s = strdup(tmp_s);
                                                                 if (!s) {
@@ -7713,13 +7703,13 @@
 
     break;
 
-  case 583:
+  case 582:
 
     { tmp_s = yyget_text(scanner); }
 
     break;
 
-  case 584:
+  case 583:
 
     { s = strdup(tmp_s);
                                                       if (!s) {
@@ -7731,7 +7721,7 @@
 
     break;
 
-  case 608:
+  case 607:
 
     { /* convert it to uint32_t */
                                                 unsigned long val;
@@ -7746,25 +7736,25 @@
 
     break;
 
-  case 609:
+  case 608:
 
     { (yyval.uint) = 0; }
 
     break;
 
-  case 610:
+  case 609:
 
     { (yyval.uint) = (yyvsp[0].uint); }
 
     break;
 
-  case 611:
+  case 610:
 
     { (yyval.i) = 0; }
 
     break;
 
-  case 612:
+  case 611:
 
     { /* convert it to int32_t */
                              int64_t val;
@@ -7779,7 +7769,7 @@
 
     break;
 
-  case 618:
+  case 617:
 
     { if (lyp_check_identifier(s, LY_IDENT_SIMPLE, trg, NULL)) {
                     free(s);
@@ -7789,7 +7779,7 @@
 
     break;
 
-  case 623:
+  case 622:
 
     { char *tmp;
 
@@ -7817,7 +7807,7 @@
 
     break;
 
-  case 629:
+  case 628:
 
     { if (yang_use_extension(trg, data_node, actual, yyget_text(scanner))) {
                                         YYABORT;
@@ -7826,7 +7816,7 @@
 
     break;
 
-  case 652:
+  case 651:
 
     { s = strdup(yyget_text(scanner));
                   if (!s) {
@@ -7837,7 +7827,7 @@
 
     break;
 
-  case 743:
+  case 742:
 
     { s = strdup(yyget_text(scanner));
                           if (!s) {
@@ -7848,7 +7838,7 @@
 
     break;
 
-  case 744:
+  case 743:
 
     { s = strdup(yyget_text(scanner));
                                     if (!s) {
diff --git a/src/parser_yin.c b/src/parser_yin.c
index 4935248..ea5f9bd 100644
--- a/src/parser_yin.c
+++ b/src/parser_yin.c
@@ -5308,11 +5308,11 @@
                 struct unres_schema *unres)
 {
     struct ly_ctx *ctx = module->ctx;
-    struct lyxml_elem *next, *child, *child2, root, grps, augs;
+    struct lyxml_elem *next, *child, *child2, root, grps, augs, revs;
     struct lys_node *node = NULL;
     struct lys_module *trg;
     const char *value;
-    int i, r;
+    int i, r, ret = -1;
     int version_flag = 0;
     /* (sub)module substatements are ordered in groups, increment this value when moving to another group
      * 0 - header-stmts, 1 - linkage-stmts, 2 - meta-stmts, 3 - revision-stmts, 4 - body-stmts */
@@ -5329,6 +5329,7 @@
     memset(&root, 0, sizeof root);
     memset(&grps, 0, sizeof grps);
     memset(&augs, 0, sizeof augs);
+    memset(&revs, 0, sizeof revs);
 
     /*
      * in the first run, we process elements with cardinality of 1 or 0..1 and
@@ -5355,12 +5356,12 @@
                 goto error;
             }
 
-            if (module->ns) {
+            if (trg->ns) {
                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child->name, yin->name);
                 goto error;
             }
             GETVAL(value, child, "uri");
-            module->ns = lydict_insert(ctx, value, strlen(value));
+            trg->ns = lydict_insert(ctx, value, strlen(value));
             lyxml_free(ctx, child);
 
             substmt_prev = "namespace";
@@ -5372,15 +5373,15 @@
                 goto error;
             }
 
-            if (module->prefix) {
+            if (trg->prefix) {
                 LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child->name, yin->name);
                 goto error;
             }
             GETVAL(value, child, "value");
-            if (lyp_check_identifier(value, LY_IDENT_PREFIX, module, NULL)) {
+            if (lyp_check_identifier(value, LY_IDENT_PREFIX, trg, NULL)) {
                 goto error;
             }
-            module->prefix = lydict_insert(ctx, value, strlen(value));
+            trg->prefix = lydict_insert(ctx, value, strlen(value));
             lyxml_free(ctx, child);
 
             substmt_prev = "prefix";
@@ -5452,6 +5453,9 @@
 
             c_rev++;
 
+            lyxml_unlink_elem(ctx, child, 2);
+            lyxml_add_child(ctx, &revs, child);
+
             substmt_prev = "revision";
         } else if (!strcmp(child->name, "typedef")) {
             substmt_group = 4;
@@ -5685,11 +5689,11 @@
             }
         }
     } else {
-        if (!module->ns) {
+        if (!trg->ns) {
             LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "namespace", "module");
             goto error;
         }
-        if (!module->prefix) {
+        if (!trg->prefix) {
             LOGVAL(LYE_MISSCHILDSTMT, LY_VLOG_NONE, NULL, "prefix", "module");
             goto error;
         }
@@ -5753,7 +5757,91 @@
         }
     }
 
-    /* middle part - process nodes with cardinality of 0..n except the data nodes and augments */
+    /* middle part 1 - process revision and then check whether this (sub)module was not already parsed, add it there */
+    LY_TREE_FOR_SAFE(revs.child, next, child) {
+        GETVAL(value, child, "date");
+        if (lyp_check_date(value)) {
+            goto error;
+        }
+        memcpy(trg->rev[trg->rev_size].date, value, LY_REV_SIZE - 1);
+        /* check uniqueness of the revision date - not required by RFC */
+        for (i = 0; i < trg->rev_size; i++) {
+            if (!strcmp(value, trg->rev[i].date)) {
+                LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, child->name);
+                LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Revision is not unique.");
+            }
+        }
+
+        LY_TREE_FOR(child->child, child2) {
+            if (!strcmp(child2->name, "description")) {
+                if (trg->rev[trg->rev_size].dsc) {
+                    LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child2->name, child->name);
+                    goto error;
+                }
+                trg->rev[trg->rev_size].dsc = read_yin_subnode(ctx, child2, "text");
+                if (!trg->rev[trg->rev_size].dsc) {
+                    goto error;
+                }
+            } else if (!strcmp(child2->name, "reference")) {
+                if (trg->rev[trg->rev_size].ref) {
+                    LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child2->name, child->name);
+                    goto error;
+                }
+                trg->rev[trg->rev_size].ref = read_yin_subnode(ctx, child2, "text");
+                if (!trg->rev[trg->rev_size].ref) {
+                    goto error;
+                }
+            } else {
+                LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child2->name);
+                goto error;
+            }
+        }
+
+        /* keep the latest revision at position 0 */
+        if (trg->rev_size && strcmp(trg->rev[trg->rev_size].date, trg->rev[0].date) > 0) {
+            /* switch their position */
+            value = strdup(trg->rev[0].date);
+            if (!value) {
+                LOGMEM;
+                goto error;
+            }
+            memcpy(trg->rev[0].date, trg->rev[trg->rev_size].date, LY_REV_SIZE - 1);
+            memcpy(trg->rev[trg->rev_size].date, value, LY_REV_SIZE - 1);
+            free((char *)value);
+
+            if (!ly_strequal(trg->rev[0].dsc, trg->rev[trg->rev_size].dsc, 1)) {
+                value = trg->rev[0].dsc;
+                trg->rev[0].dsc = trg->rev[trg->rev_size].dsc;
+                trg->rev[trg->rev_size].dsc = value;
+            }
+
+            if (!ly_strequal(trg->rev[0].ref, trg->rev[trg->rev_size].ref, 1)) {
+                value = trg->rev[0].ref;
+                trg->rev[0].ref = trg->rev[trg->rev_size].ref;
+                trg->rev[trg->rev_size].ref = value;
+            }
+        }
+
+        trg->rev_size++;
+
+        lyxml_free(ctx, child);
+    }
+
+    /* check the module with respect to the context now */
+    if (!submodule) {
+        switch (lyp_ctx_check_module(module)) {
+        case -1:
+            goto error;
+        case 0:
+            break;
+        case 1:
+            /* it's already there */
+            ret = 1;
+            goto error;
+        }
+    }
+
+    /* middle part 2 - process nodes with cardinality of 0..n except the data nodes and augments */
     LY_TREE_FOR_SAFE(yin->child, next, child) {
         if (!strcmp(child->name, "import")) {
             r = fill_yin_import(trg, child, &trg->imp[trg->imp_size]);
@@ -5769,72 +5857,6 @@
                 goto error;
             }
 
-        } else if (!strcmp(child->name, "revision")) {
-            GETVAL(value, child, "date");
-            if (lyp_check_date(value)) {
-                goto error;
-            }
-            memcpy(trg->rev[trg->rev_size].date, value, LY_REV_SIZE - 1);
-            /* check uniqueness of the revision date - not required by RFC */
-            for (i = 0; i < trg->rev_size; i++) {
-                if (!strcmp(value, trg->rev[i].date)) {
-                    LOGVAL(LYE_INARG, LY_VLOG_NONE, NULL, value, child->name);
-                    LOGVAL(LYE_SPEC, LY_VLOG_NONE, NULL, "Revision is not unique.");
-                }
-            }
-
-            LY_TREE_FOR(child->child, child2) {
-                if (!strcmp(child2->name, "description")) {
-                    if (trg->rev[trg->rev_size].dsc) {
-                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child2->name, child->name);
-                        goto error;
-                    }
-                    trg->rev[trg->rev_size].dsc = read_yin_subnode(ctx, child2, "text");
-                    if (!trg->rev[trg->rev_size].dsc) {
-                        goto error;
-                    }
-                } else if (!strcmp(child2->name, "reference")) {
-                    if (trg->rev[trg->rev_size].ref) {
-                        LOGVAL(LYE_TOOMANY, LY_VLOG_NONE, NULL, child2->name, child->name);
-                        goto error;
-                    }
-                    trg->rev[trg->rev_size].ref = read_yin_subnode(ctx, child2, "text");
-                    if (!trg->rev[trg->rev_size].ref) {
-                        goto error;
-                    }
-                } else {
-                    LOGVAL(LYE_INSTMT, LY_VLOG_NONE, NULL, child2->name);
-                    goto error;
-                }
-            }
-
-            /* keep the latest revision at position 0 */
-            if (trg->rev_size && strcmp(trg->rev[trg->rev_size].date, trg->rev[0].date) > 0) {
-                /* switch their position */
-                value = strdup(trg->rev[0].date);
-                if (!value) {
-                    LOGMEM;
-                    goto error;
-                }
-                memcpy(trg->rev[0].date, trg->rev[trg->rev_size].date, LY_REV_SIZE - 1);
-                memcpy(trg->rev[trg->rev_size].date, value, LY_REV_SIZE - 1);
-                free((char *)value);
-
-                if (!ly_strequal(trg->rev[0].dsc, trg->rev[trg->rev_size].dsc, 1)) {
-                    value = trg->rev[0].dsc;
-                    trg->rev[0].dsc = trg->rev[trg->rev_size].dsc;
-                    trg->rev[trg->rev_size].dsc = value;
-                }
-
-                if (!ly_strequal(trg->rev[0].ref, trg->rev[trg->rev_size].ref, 1)) {
-                    value = trg->rev[0].ref;
-                    trg->rev[0].ref = trg->rev[trg->rev_size].ref;
-                    trg->rev[trg->rev_size].ref = value;
-                }
-            }
-
-            trg->rev_size++;
-
         } else if (!strcmp(child->name, "typedef")) {
             r = fill_yin_typedef(trg, NULL, child, &trg->tpdf[trg->tpdf_size], unres);
             trg->tpdf_size++;
@@ -5920,21 +5942,23 @@
         lyxml_free(ctx, child);
     }
 
-    return EXIT_SUCCESS;
+    return 0;
 
 error:
-    /* cleanup */
     while (root.child) {
-        lyxml_free(module->ctx, root.child);
+        lyxml_free(ctx, root.child);
     }
     while (grps.child) {
-        lyxml_free(module->ctx, grps.child);
+        lyxml_free(ctx, grps.child);
     }
     while (augs.child) {
-        lyxml_free(module->ctx, augs.child);
+        lyxml_free(ctx, augs.child);
+    }
+    while (revs.child) {
+        lyxml_free(ctx, revs.child);
     }
 
-    return EXIT_FAILURE;
+    return ret;
 }
 
 /* logs directly */
@@ -5975,6 +5999,7 @@
     submodule->belongsto = module;
 
     LOGVRB("Reading submodule \"%s\".", submodule->name);
+    /* module cannot be changed in this case and 1 cannot be returned */
     if (read_sub_module(module, submodule, yin, unres)) {
         goto error;
     }
@@ -6011,6 +6036,7 @@
     struct lys_module *module = NULL;
     struct unres_schema *unres;
     const char *value;
+    int ret;
 
     unres = calloc(1, sizeof *unres);
     if (!unres) {
@@ -6050,13 +6076,23 @@
     module->implemented = (implement ? 1 : 0);
 
     LOGVRB("Reading module \"%s\".", module->name);
-    if (read_sub_module(module, NULL, yin, unres)) {
+    ret = read_sub_module(module, NULL, yin, unres);
+    if (ret == -1) {
         goto error;
     }
 
-    /* resolve rest of unres items */
-    if (unres->count && resolve_unres_schema(module, unres)) {
-        goto error;
+    if (ret == 1) {
+        assert(!unres->count);
+    } else {
+        /* resolve rest of unres items */
+        if (unres->count && resolve_unres_schema(module, unres)) {
+            goto error;
+        }
+
+        /* check correctness of includes */
+        if (lyp_check_include_missing(module)) {
+            goto error;
+        }
     }
 
     if (revision) {
@@ -6068,22 +6104,27 @@
         }
     }
 
-    /* check correctness of includes */
-    if (lyp_check_include_missing(module)) {
-        goto error;
-    }
+    /* add into context if not already there */
+    if (!ret) {
+        if (module->deviation_size && !module->implemented) {
+            LOGVRB("Module \"%s\" includes deviations, changing its conformance to \"implement\".", module->name);
+            /* deviations always causes target to be made implemented,
+             * but augents and leafrefs not, so we have to apply them now */
+            if (lys_set_implemented(module)) {
+                goto error;
+            }
+        }
 
-    if (lyp_ctx_add_module(&module)) {
-        goto error;
-    }
-
-    if (module->deviation_size && !module->implemented) {
-        LOGVRB("Module \"%s\" includes deviations, changing its conformance to \"implement\".", module->name);
-        /* deviations always causes target to be made implemented,
-         * but augents and leafrefs not, so we have to apply them now */
-        if (lys_set_implemented(module)) {
+        if (lyp_ctx_add_module(module)) {
             goto error;
         }
+    } else {
+        /* free what was parsed */
+        lys_free(module, NULL, 0);
+
+        /* get the model from the context */
+        module = (struct lys_module *)ly_ctx_get_module(ctx, value, revision);
+        assert(module);
     }
 
     lyxml_free(ctx, yin);
diff --git a/src/yang.y.in b/src/yang.y.in
index aa3729c..6bf05c6 100644
--- a/src/yang.y.in
+++ b/src/yang.y.in
@@ -324,7 +324,7 @@
 module_stmt: optsep MODULE_KEYWORD sep module_arg_str

              '{' stmtsep

                  module_header_stmts

-                 linkage_stmt

+                 linkage_stmts

                  meta_stmts

                  revision_stmts

                  body_stmts_end

@@ -370,7 +370,7 @@
 submodule_stmt: optsep SUBMODULE_KEYWORD sep submodule_arg_str

                 '{' stmtsep

                     submodule_header_stmts

-                    linkage_stmt

+                    linkage_stmts

                     meta_stmts

                     revision_stmts

                     body_stmts_end

@@ -403,16 +403,9 @@
 

 namespace_stmt: NAMESPACE_KEYWORD sep string stmtend;

 

-linkage_stmt: linkage_stmts { *param->remove_import = 0;

-                              if (yang_check_imports(trg, param->unres)) {

-                                YYABORT;

-                              }

-                            }

-

 linkage_stmts: @EMPTYDIR@

  |  linkage_stmts import_stmt

  |  linkage_stmts include_stmt

- ;

 

 import_stmt: IMPORT_KEYWORD sep import_arg_str

              '{' stmtsep

@@ -657,7 +650,25 @@
                              }

                            }

 

-body_stmts: @EMPTYDIR@ { actual = NULL; }

+body_stmts: @EMPTYDIR@ { /* check the module with respect to the context now */

+                         if (!param->submodule) {

+                           switch (lyp_ctx_check_module(trg)) {

+                           case -1:

+                             YYABORT;

+                           case 0:

+                             break;

+                           case 1:

+                             /* it's already there */

+                             param->exist_module = 1;

+                             YYABORT;

+                           }

+                         }

+                         param->remove_import = 0;

+                         if (yang_check_imports(trg, param->unres)) {

+                           YYABORT;

+                         }

+                         actual = NULL;

+                       }

   | body_stmts body_stmt stmtsep { actual = NULL; }