*** empty log message ***


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1183 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_module.h b/libasn1parser/asn1p_module.h
index 5e7ce15..ad9eab0 100644
--- a/libasn1parser/asn1p_module.h
+++ b/libasn1parser/asn1p_module.h
@@ -51,16 +51,16 @@
 	asn1p_module_flags_e module_flags;	/* AUTOMATIC TAGS? */
 
 	/*
-	 * List of everything that this module IMPORTS.
-	 */
-	TQ_HEAD(struct asn1p_xports_s)	imports;
-
-	/*
 	 * List of everything that this module EXPORTS.
 	 */
 	TQ_HEAD(struct asn1p_xports_s)	exports;
 
 	/*
+	 * List of everything that this module IMPORTS.
+	 */
+	TQ_HEAD(struct asn1p_xports_s)	imports;
+
+	/*
 	 * List of everything that this module defines itself.
 	 */
 	TQ_HEAD(struct asn1p_expr_s)	members;
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index ba23ed2..d1105a5 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -336,6 +336,19 @@
 		}							\
 	} while(0)
 
+#ifdef	AL_IMPORT
+#error	AL_IMPORT DEFINED ELSEWHERE!
+#endif
+#define	AL_IMPORT(to,where,from,field)	do {				\
+		if(!(from)) break;					\
+		while(TQ_FIRST(&((from)->where))) {			\
+			TQ_ADD(&((to)->where),				\
+				TQ_REMOVE(&((from)->where), field),	\
+				field);					\
+		}							\
+		assert(TQ_FIRST(&((from)->where)) == 0);		\
+	} while(0)
+
 
 
 /* Enabling traces.  */
@@ -352,7 +365,7 @@
 #endif
 
 #ifndef YYSTYPE
-#line 72 "asn1p_y.y"
+#line 85 "asn1p_y.y"
 typedef union {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
@@ -388,7 +401,7 @@
 	} tv_nametag;
 } yystype;
 /* Line 193 of /usr/local/share/bison/yacc.c.  */
-#line 392 "asn1p_y.c"
+#line 405 "asn1p_y.c"
 # define YYSTYPE yystype
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
@@ -409,7 +422,7 @@
 
 
 /* Line 213 of /usr/local/share/bison/yacc.c.  */
-#line 413 "asn1p_y.c"
+#line 426 "asn1p_y.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -507,16 +520,16 @@
 
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  7
-#define YYLAST   803
+#define YYLAST   816
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  121
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  109
+#define YYNNTS  112
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  293
+#define YYNRULES  296
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  450
+#define YYNSTATES  453
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -574,157 +587,158 @@
 {
        0,     0,     3,     5,     7,    10,    19,    20,    22,    26,
       29,    31,    34,    36,    41,    43,    44,    46,    48,    51,
-      54,    57,    60,    63,    66,    67,    69,    71,    74,    76,
-      78,    80,    82,    84,    85,    89,    91,    95,    98,   100,
-     103,   104,   106,   111,   113,   117,   119,   123,   125,   129,
-     133,   136,   138,   142,   144,   148,   150,   154,   159,   161,
-     163,   168,   172,   176,   183,   190,   192,   196,   198,   202,
-     206,   210,   214,   216,   220,   222,   224,   226,   228,   229,
-     231,   233,   237,   241,   244,   248,   250,   252,   256,   259,
-     261,   263,   269,   270,   272,   274,   278,   281,   286,   290,
-     294,   298,   302,   306,   307,   309,   310,   317,   319,   322,
-     324,   326,   328,   332,   334,   338,   342,   346,   347,   350,
-     352,   357,   362,   367,   374,   381,   383,   388,   392,   394,
-     398,   402,   406,   408,   412,   414,   418,   420,   422,   424,
-     426,   430,   434,   436,   441,   443,   445,   449,   450,   454,
-     456,   458,   460,   462,   464,   466,   468,   470,   474,   476,
-     478,   480,   482,   485,   487,   489,   491,   493,   496,   499,
-     501,   503,   506,   509,   511,   513,   515,   517,   519,   522,
-     524,   527,   529,   531,   533,   535,   537,   539,   541,   543,
+      54,    57,    60,    63,    66,    67,    69,    73,    75,    78,
+      80,    82,    84,    85,    89,    91,    92,    94,    98,   101,
+     103,   106,   107,   109,   114,   116,   120,   122,   126,   128,
+     129,   131,   135,   139,   142,   144,   148,   150,   154,   156,
+     160,   165,   167,   169,   174,   178,   182,   189,   196,   198,
+     202,   204,   208,   212,   216,   220,   222,   226,   228,   230,
+     232,   234,   235,   237,   239,   243,   247,   250,   254,   256,
+     258,   262,   265,   267,   269,   275,   276,   278,   280,   284,
+     287,   292,   296,   300,   304,   308,   312,   313,   315,   316,
+     323,   325,   328,   330,   332,   334,   338,   340,   344,   348,
+     352,   353,   356,   358,   363,   368,   373,   380,   387,   389,
+     394,   398,   400,   404,   408,   412,   414,   418,   420,   424,
+     426,   428,   430,   432,   436,   440,   442,   447,   449,   451,
+     455,   456,   460,   462,   464,   466,   468,   470,   472,   474,
+     476,   480,   482,   484,   486,   488,   491,   493,   495,   497,
+     499,   502,   505,   507,   509,   512,   515,   517,   519,   521,
+     523,   525,   528,   530,   533,   535,   537,   539,   541,   543,
      545,   547,   549,   551,   553,   555,   557,   559,   561,   563,
-     565,   566,   568,   570,   575,   579,   584,   586,   588,   592,
-     598,   600,   604,   608,   612,   616,   621,   625,   627,   629,
-     633,   637,   641,   645,   647,   649,   650,   656,   658,   661,
-     664,   668,   670,   672,   674,   676,   678,   680,   682,   684,
-     688,   694,   696,   700,   702,   706,   707,   709,   711,   713,
-     715,   717,   719,   723,   728,   730,   734,   737,   741,   743,
-     747,   748,   750,   752,   755,   758,   762,   764,   768,   770,
-     775,   780,   782,   784,   786,   788,   790,   792,   793,   795,
-     798,   803,   804,   806,   808,   810,   811,   813,   815,   817,
-     819,   821,   822,   824
+     565,   567,   569,   571,   572,   574,   576,   581,   585,   590,
+     592,   594,   598,   604,   606,   610,   614,   618,   622,   627,
+     631,   633,   635,   639,   643,   647,   651,   653,   655,   656,
+     662,   664,   667,   670,   674,   676,   678,   680,   682,   684,
+     686,   688,   690,   694,   700,   702,   706,   708,   712,   713,
+     715,   717,   719,   721,   723,   725,   729,   734,   736,   740,
+     743,   747,   749,   753,   754,   756,   758,   761,   764,   768,
+     770,   774,   776,   781,   786,   788,   790,   792,   794,   796,
+     798,   799,   801,   804,   809,   810,   812,   814,   816,   817,
+     819,   821,   823,   825,   827,   828,   830
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const short yyrhs[] =
 {
      122,     0,    -1,   123,    -1,   124,    -1,   123,   124,    -1,
-     226,   125,    39,   129,     3,    26,   132,    44,    -1,    -1,
+     229,   125,    39,   129,     3,    26,   132,    44,    -1,    -1,
      126,    -1,   108,   127,   109,    -1,   108,   109,    -1,   128,
-      -1,   127,   128,    -1,   229,    -1,   229,   110,    10,   111,
+      -1,   127,   128,    -1,   232,    -1,   232,   110,    10,   111,
       -1,    10,    -1,    -1,   130,    -1,   131,    -1,   130,   131,
       -1,    46,    89,    -1,    57,    89,    -1,    25,    89,    -1,
-      48,    58,    -1,    16,    62,    -1,    -1,   133,    -1,   134,
-      -1,   133,   134,    -1,   136,    -1,   142,    -1,   148,    -1,
-     178,    -1,   146,    -1,    -1,    43,    16,   135,    -1,   188,
-      -1,    59,   137,   112,    -1,    59,    51,    -1,   139,    -1,
-     137,   139,    -1,    -1,   126,    -1,   140,    51,   226,   138,
-      -1,   141,    -1,   140,   113,   141,    -1,   226,    -1,   226,
-     108,   109,    -1,   229,    -1,    47,   143,   112,    -1,    47,
-      22,   112,    -1,    47,   112,    -1,   144,    -1,   143,   113,
-     144,    -1,   226,    -1,   226,   108,   109,    -1,   229,    -1,
-     108,   195,   109,    -1,   226,   147,     3,   145,    -1,   187,
-      -1,   172,    -1,   172,   108,   151,   109,    -1,   226,     3,
-     168,    -1,   226,     3,   158,    -1,   226,   108,   149,   109,
-       3,   168,    -1,   226,   108,   149,   109,     3,   158,    -1,
-     150,    -1,   149,   113,   150,    -1,   226,    -1,   226,   114,
-     229,    -1,   226,   114,   226,    -1,   185,   114,   229,    -1,
-     185,   114,   226,    -1,   152,    -1,   151,   113,   152,    -1,
-     168,    -1,   181,    -1,   229,    -1,   145,    -1,    -1,   154,
-      -1,   155,    -1,   154,   113,   155,    -1,   229,   168,   214,
-      -1,   168,   214,    -1,    35,    73,   168,    -1,   167,    -1,
-     157,    -1,   156,   113,   157,    -1,   229,   168,    -1,   167,
-      -1,   168,    -1,    33,   108,   160,   109,   162,    -1,    -1,
-      93,    -1,   161,    -1,   160,   113,   161,    -1,    17,   214,
-      -1,    18,   168,   159,   214,    -1,    18,   176,   214,    -1,
-      18,   177,   214,    -1,    17,   176,   214,    -1,    17,   168,
-     214,    -1,    17,   177,   214,    -1,    -1,   163,    -1,    -1,
-     100,    87,   108,   164,   165,   109,    -1,   166,    -1,   165,
-     166,    -1,     4,    -1,    19,    -1,   175,    -1,   115,   165,
-     116,    -1,   107,    -1,   107,   117,   182,    -1,   107,   117,
-     219,    -1,   221,   170,   192,    -1,    -1,   169,   171,    -1,
-     147,    -1,    32,   108,   156,   109,    -1,    83,   108,   153,
-     109,    -1,    84,   108,   153,   109,    -1,    83,   192,    73,
-     228,   221,   170,    -1,    84,   192,    73,   228,   221,   170,
-      -1,    23,    -1,    23,    40,    30,   229,    -1,    61,    73,
-     172,    -1,    15,    -1,    15,   118,   226,    -1,   227,   118,
-     226,    -1,    15,   118,   229,    -1,   227,    -1,   227,   118,
-     173,    -1,   174,    -1,   173,   118,   174,    -1,   175,    -1,
-      17,    -1,    18,    -1,    17,    -1,   176,   118,    17,    -1,
-     176,   118,    18,    -1,    16,    -1,   229,   147,     3,   179,
-      -1,   181,    -1,   182,    -1,   229,   114,   179,    -1,    -1,
-     108,   180,   184,    -1,    68,    -1,    50,    -1,    91,    -1,
-       6,    -1,     8,    -1,   183,    -1,   219,    -1,   229,    -1,
-     226,   118,   229,    -1,     7,    -1,    13,    -1,    14,    -1,
-       5,    -1,   184,     5,    -1,    29,    -1,    68,    -1,    81,
-      -1,   186,    -1,    72,    86,    -1,    70,    56,    -1,    82,
-      -1,    49,    -1,    41,    76,    -1,    31,    86,    -1,    96,
-      -1,    52,    -1,   188,    -1,    63,    -1,    45,    -1,    27,
-      86,    -1,   185,    -1,   186,   216,    -1,    28,    -1,    53,
-      -1,    54,    -1,    55,    -1,    64,    -1,    69,    -1,    79,
-      -1,    88,    -1,    90,    -1,    95,    -1,    97,    -1,    98,
-      -1,    99,    -1,    71,    -1,   104,    -1,   105,    -1,   102,
-      -1,   103,    -1,   101,    -1,    -1,   193,    -1,   194,    -1,
-      85,   110,   195,   111,    -1,   110,   195,   111,    -1,   194,
-     110,   195,   111,    -1,   107,    -1,   196,    -1,   196,   113,
-     107,    -1,   196,   113,   107,   113,   196,    -1,   197,    -1,
-      22,   101,   197,    -1,   196,   189,   197,    -1,   196,   190,
-     197,    -1,   197,   191,   197,    -1,   200,   110,   195,   111,
-      -1,   110,   195,   111,    -1,   201,    -1,   202,    -1,   201,
-     199,   201,    -1,    66,   199,   201,    -1,   201,   199,    65,
-      -1,    66,   199,    65,    -1,   208,    -1,   203,    -1,    -1,
-      36,    30,   108,   198,   184,    -1,   106,    -1,   106,   119,
-      -1,   119,   106,    -1,   119,   106,   119,    -1,    85,    -1,
-      51,    -1,    50,    -1,    91,    -1,   220,    -1,   183,    -1,
-     229,    -1,   226,    -1,   100,    34,   194,    -1,   100,    35,
-     108,   204,   109,    -1,   205,    -1,   204,   113,   205,    -1,
-     107,    -1,   229,   192,   206,    -1,    -1,   207,    -1,    78,
-      -1,    20,    -1,    74,    -1,   209,    -1,   210,    -1,   108,
-     226,   109,    -1,   209,   108,   211,   109,    -1,   212,    -1,
-     211,   113,   212,    -1,   120,   213,    -1,   120,   118,   213,
-      -1,   229,    -1,   213,   118,   229,    -1,    -1,   215,    -1,
-      74,    -1,    38,   179,    -1,   108,   109,    -1,   108,   217,
-     109,    -1,   218,    -1,   217,   113,   218,    -1,   229,    -1,
-     229,   110,   219,   111,    -1,   229,   110,   182,   111,    -1,
-     219,    -1,   107,    -1,    10,    -1,    11,    -1,   219,    -1,
-      12,    -1,    -1,   222,    -1,   223,   225,    -1,   115,   224,
-      10,   116,    -1,    -1,    94,    -1,    24,    -1,    80,    -1,
-      -1,    57,    -1,    46,    -1,    15,    -1,    16,    -1,    16,
-      -1,    -1,   229,    -1,     9,    -1
+      48,    58,    -1,    16,    62,    -1,    -1,   133,    -1,   144,
+     137,   134,    -1,   135,    -1,   134,   135,    -1,   151,    -1,
+     181,    -1,   149,    -1,    -1,    43,    16,   136,    -1,   191,
+      -1,    -1,   138,    -1,    59,   139,   112,    -1,    59,    51,
+      -1,   141,    -1,   139,   141,    -1,    -1,   126,    -1,   142,
+      51,   229,   140,    -1,   143,    -1,   142,   113,   143,    -1,
+     229,    -1,   229,   108,   109,    -1,   232,    -1,    -1,   145,
+      -1,    47,   146,   112,    -1,    47,    22,   112,    -1,    47,
+     112,    -1,   147,    -1,   146,   113,   147,    -1,   229,    -1,
+     229,   108,   109,    -1,   232,    -1,   108,   198,   109,    -1,
+     229,   150,     3,   148,    -1,   190,    -1,   175,    -1,   175,
+     108,   154,   109,    -1,   229,     3,   171,    -1,   229,     3,
+     161,    -1,   229,   108,   152,   109,     3,   171,    -1,   229,
+     108,   152,   109,     3,   161,    -1,   153,    -1,   152,   113,
+     153,    -1,   229,    -1,   229,   114,   232,    -1,   229,   114,
+     229,    -1,   188,   114,   232,    -1,   188,   114,   229,    -1,
+     155,    -1,   154,   113,   155,    -1,   171,    -1,   184,    -1,
+     232,    -1,   148,    -1,    -1,   157,    -1,   158,    -1,   157,
+     113,   158,    -1,   232,   171,   217,    -1,   171,   217,    -1,
+      35,    73,   171,    -1,   170,    -1,   160,    -1,   159,   113,
+     160,    -1,   232,   171,    -1,   170,    -1,   171,    -1,    33,
+     108,   163,   109,   165,    -1,    -1,    93,    -1,   164,    -1,
+     163,   113,   164,    -1,    17,   217,    -1,    18,   171,   162,
+     217,    -1,    18,   179,   217,    -1,    18,   180,   217,    -1,
+      17,   179,   217,    -1,    17,   171,   217,    -1,    17,   180,
+     217,    -1,    -1,   166,    -1,    -1,   100,    87,   108,   167,
+     168,   109,    -1,   169,    -1,   168,   169,    -1,     4,    -1,
+      19,    -1,   178,    -1,   115,   168,   116,    -1,   107,    -1,
+     107,   117,   185,    -1,   107,   117,   222,    -1,   224,   173,
+     195,    -1,    -1,   172,   174,    -1,   150,    -1,    32,   108,
+     159,   109,    -1,    83,   108,   156,   109,    -1,    84,   108,
+     156,   109,    -1,    83,   195,    73,   231,   224,   173,    -1,
+      84,   195,    73,   231,   224,   173,    -1,    23,    -1,    23,
+      40,    30,   232,    -1,    61,    73,   175,    -1,    15,    -1,
+      15,   118,   229,    -1,   230,   118,   229,    -1,    15,   118,
+     232,    -1,   230,    -1,   230,   118,   176,    -1,   177,    -1,
+     176,   118,   177,    -1,   178,    -1,    17,    -1,    18,    -1,
+      17,    -1,   179,   118,    17,    -1,   179,   118,    18,    -1,
+      16,    -1,   232,   150,     3,   182,    -1,   184,    -1,   185,
+      -1,   232,   114,   182,    -1,    -1,   108,   183,   187,    -1,
+      68,    -1,    50,    -1,    91,    -1,     6,    -1,     8,    -1,
+     186,    -1,   222,    -1,   232,    -1,   229,   118,   232,    -1,
+       7,    -1,    13,    -1,    14,    -1,     5,    -1,   187,     5,
+      -1,    29,    -1,    68,    -1,    81,    -1,   189,    -1,    72,
+      86,    -1,    70,    56,    -1,    82,    -1,    49,    -1,    41,
+      76,    -1,    31,    86,    -1,    96,    -1,    52,    -1,   191,
+      -1,    63,    -1,    45,    -1,    27,    86,    -1,   188,    -1,
+     189,   219,    -1,    28,    -1,    53,    -1,    54,    -1,    55,
+      -1,    64,    -1,    69,    -1,    79,    -1,    88,    -1,    90,
+      -1,    95,    -1,    97,    -1,    98,    -1,    99,    -1,    71,
+      -1,   104,    -1,   105,    -1,   102,    -1,   103,    -1,   101,
+      -1,    -1,   196,    -1,   197,    -1,    85,   110,   198,   111,
+      -1,   110,   198,   111,    -1,   197,   110,   198,   111,    -1,
+     107,    -1,   199,    -1,   199,   113,   107,    -1,   199,   113,
+     107,   113,   199,    -1,   200,    -1,    22,   101,   200,    -1,
+     199,   192,   200,    -1,   199,   193,   200,    -1,   200,   194,
+     200,    -1,   203,   110,   198,   111,    -1,   110,   198,   111,
+      -1,   204,    -1,   205,    -1,   204,   202,   204,    -1,    66,
+     202,   204,    -1,   204,   202,    65,    -1,    66,   202,    65,
+      -1,   211,    -1,   206,    -1,    -1,    36,    30,   108,   201,
+     187,    -1,   106,    -1,   106,   119,    -1,   119,   106,    -1,
+     119,   106,   119,    -1,    85,    -1,    51,    -1,    50,    -1,
+      91,    -1,   223,    -1,   186,    -1,   232,    -1,   229,    -1,
+     100,    34,   197,    -1,   100,    35,   108,   207,   109,    -1,
+     208,    -1,   207,   113,   208,    -1,   107,    -1,   232,   195,
+     209,    -1,    -1,   210,    -1,    78,    -1,    20,    -1,    74,
+      -1,   212,    -1,   213,    -1,   108,   229,   109,    -1,   212,
+     108,   214,   109,    -1,   215,    -1,   214,   113,   215,    -1,
+     120,   216,    -1,   120,   118,   216,    -1,   232,    -1,   216,
+     118,   232,    -1,    -1,   218,    -1,    74,    -1,    38,   182,
+      -1,   108,   109,    -1,   108,   220,   109,    -1,   221,    -1,
+     220,   113,   221,    -1,   232,    -1,   232,   110,   222,   111,
+      -1,   232,   110,   185,   111,    -1,   222,    -1,   107,    -1,
+      10,    -1,    11,    -1,   222,    -1,    12,    -1,    -1,   225,
+      -1,   226,   228,    -1,   115,   227,    10,   116,    -1,    -1,
+      94,    -1,    24,    -1,    80,    -1,    -1,    57,    -1,    46,
+      -1,    15,    -1,    16,    -1,    16,    -1,    -1,   232,    -1,
+       9,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   326,   326,   332,   338,   354,   379,   381,   384,   388,
-     393,   400,   408,   413,   417,   426,   428,   436,   440,   448,
-     452,   455,   458,   462,   482,   484,   492,   496,   528,   532,
-     541,   548,   561,   569,   568,   582,   594,   605,   610,   616,
-     622,   624,   627,   638,   644,   650,   657,   663,   671,   675,
-     678,   685,   691,   697,   704,   710,   719,   721,   731,   745,
-     755,   771,   781,   797,   803,   810,   820,   830,   835,   842,
-     849,   857,   867,   873,   879,   883,   891,   902,   924,   926,
-     928,   934,   940,   948,   954,   961,   966,   972,   978,   984,
-     987,   993,  1003,  1005,  1008,  1016,  1023,  1036,  1047,  1057,
-    1068,  1078,  1089,  1100,  1102,  1109,  1107,  1116,  1121,  1127,
-    1132,  1135,  1139,  1144,  1153,  1162,  1173,  1195,  1202,  1221,
-    1225,  1231,  1237,  1243,  1253,  1263,  1269,  1280,  1294,  1303,
-    1313,  1323,  1333,  1341,  1362,  1371,  1380,  1382,  1389,  1396,
-    1402,  1406,  1412,  1432,  1442,  1444,  1445,  1452,  1452,  1457,
-    1464,  1470,  1475,  1479,  1483,  1486,  1491,  1503,  1520,  1525,
-    1530,  1563,  1573,  1587,  1589,  1590,  1591,  1592,  1593,  1594,
-    1595,  1596,  1597,  1598,  1599,  1600,  1606,  1608,  1609,  1612,
-    1619,  1631,  1633,  1637,  1641,  1642,  1643,  1644,  1645,  1649,
-    1650,  1651,  1652,  1656,  1657,  1664,  1664,  1665,  1665,  1666,
-    1668,  1670,  1675,  1679,  1688,  1692,  1697,  1702,  1705,  1711,
-    1721,  1725,  1728,  1731,  1734,  1739,  1748,  1756,  1762,  1768,
-    1775,  1783,  1791,  1800,  1803,  1807,  1806,  1817,  1819,  1820,
-    1821,  1824,  1828,  1833,  1839,  1844,  1845,  1846,  1859,  1873,
-    1877,  1882,  1886,  1891,  1898,  1911,  1913,  1916,  1920,  1923,
-    1928,  1932,  1940,  1955,  1961,  1968,  1981,  1993,  2008,  2012,
-    2029,  2034,  2037,  2042,  2064,  2069,  2074,  2080,  2086,  2094,
-    2102,  2110,  2117,  2127,  2132,  2138,  2140,  2170,  2172,  2175,
-    2182,  2188,  2190,  2191,  2192,  2195,  2197,  2198,  2201,  2206,
-    2213,  2220,  2222,  2227
+       0,   342,   342,   348,   354,   370,   395,   397,   400,   404,
+     409,   416,   424,   429,   433,   442,   444,   452,   456,   464,
+     468,   471,   474,   478,   498,   500,   508,   517,   521,   536,
+     544,   557,   565,   564,   578,   590,   592,   594,   605,   610,
+     616,   622,   624,   627,   638,   644,   650,   657,   663,   672,
+     674,   685,   689,   692,   699,   705,   711,   718,   724,   733,
+     735,   745,   759,   769,   785,   795,   811,   817,   824,   834,
+     844,   849,   856,   863,   871,   881,   887,   893,   897,   905,
+     916,   938,   940,   942,   948,   954,   962,   968,   975,   980,
+     986,   992,   998,  1001,  1007,  1017,  1019,  1022,  1030,  1037,
+    1050,  1061,  1071,  1082,  1092,  1103,  1114,  1116,  1123,  1121,
+    1130,  1135,  1141,  1146,  1149,  1153,  1158,  1167,  1176,  1187,
+    1209,  1216,  1235,  1239,  1245,  1251,  1257,  1267,  1277,  1283,
+    1294,  1308,  1317,  1327,  1337,  1347,  1355,  1376,  1385,  1394,
+    1396,  1403,  1410,  1416,  1420,  1426,  1446,  1456,  1458,  1459,
+    1466,  1466,  1471,  1478,  1484,  1489,  1493,  1497,  1500,  1505,
+    1517,  1534,  1539,  1544,  1577,  1587,  1601,  1603,  1604,  1605,
+    1606,  1607,  1608,  1609,  1610,  1611,  1612,  1613,  1614,  1620,
+    1622,  1623,  1626,  1633,  1645,  1647,  1651,  1655,  1656,  1657,
+    1658,  1659,  1663,  1664,  1665,  1666,  1670,  1671,  1678,  1678,
+    1679,  1679,  1680,  1682,  1684,  1689,  1693,  1702,  1706,  1711,
+    1716,  1719,  1725,  1735,  1739,  1742,  1745,  1748,  1753,  1762,
+    1770,  1776,  1782,  1789,  1797,  1805,  1814,  1817,  1821,  1820,
+    1831,  1833,  1834,  1835,  1838,  1842,  1847,  1853,  1858,  1859,
+    1860,  1873,  1887,  1891,  1896,  1900,  1905,  1912,  1925,  1927,
+    1930,  1934,  1937,  1942,  1946,  1954,  1969,  1975,  1982,  1995,
+    2007,  2022,  2026,  2043,  2048,  2051,  2056,  2078,  2083,  2088,
+    2094,  2100,  2108,  2116,  2124,  2131,  2141,  2146,  2152,  2154,
+    2184,  2186,  2189,  2196,  2202,  2204,  2205,  2206,  2209,  2211,
+    2212,  2215,  2220,  2227,  2234,  2236,  2241
 };
 #endif
 
@@ -761,29 +775,29 @@
   "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", 
   "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'", 
   "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept", 
-  "ParsedGrammar", "ModuleList", "ModuleSpecification", 
+  "ParsedGrammar", "ModuleList", "ModuleDefinition", 
   "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody", 
-  "ObjectIdentifierElement", "optModuleSpecificationFlags", 
-  "ModuleSpecificationFlags", "ModuleSpecificationFlag", 
-  "optModuleSpecificationBody", "ModuleSpecificationBody", 
-  "ModuleSpecificationElement", "@1", "ImportsDefinition", 
-  "ImportsBundleSet", "AssignedIdentifier", "ImportsBundle", 
-  "ImportsList", "ImportsElement", "ExportsDefinition", "ExportsBody", 
-  "ExportsElement", "ValueSet", "ValueSetTypeAssignment", "DefinedType", 
-  "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName", 
-  "ActualParameterList", "ActualParameter", "optComponentTypeLists", 
-  "ComponentTypeLists", "ComponentType", "AlternativeTypeLists", 
-  "AlternativeType", "ObjectClass", "optUnique", "FieldSpec", 
-  "ClassField", "optWithSyntax", "WithSyntax", "@2", "WithSyntaxList", 
-  "WithSyntaxToken", "ExtensionAndException", "Type", 
-  "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet", 
-  "ComplexTypeReference", "ComplexTypeReferenceAmpList", 
-  "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName", 
-  "DefinedObjectClass", "ValueDefinition", "Value", "@3", "SimpleValue", 
-  "DefinedValue", "RestrictedCharacterStringValue", "Opaque", 
-  "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType", 
-  "BasicString", "Union", "Intersection", "Except", "optConstraints", 
-  "Constraints", "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec", 
+  "ObjectIdentifierElement", "optModuleDefinitionFlags", 
+  "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody", 
+  "ModuleBody", "AssignmentList", "Assignment", "@1", "optImports", 
+  "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier", 
+  "ImportsBundle", "ImportsList", "ImportsElement", "optExports", 
+  "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet", 
+  "ValueSetTypeAssignment", "DefinedType", "DataTypeReference", 
+  "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList", 
+  "ActualParameter", "optComponentTypeLists", "ComponentTypeLists", 
+  "ComponentType", "AlternativeTypeLists", "AlternativeType", 
+  "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax", 
+  "WithSyntax", "@2", "WithSyntaxList", "WithSyntaxToken", 
+  "ExtensionAndException", "Type", "NSTD_IndirectMarker", 
+  "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference", 
+  "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement", 
+  "PrimitiveFieldReference", "FieldName", "DefinedObjectClass", 
+  "ValueDefinition", "Value", "@3", "SimpleValue", "DefinedValue", 
+  "RestrictedCharacterStringValue", "Opaque", "BasicTypeId", 
+  "BasicTypeId_UniverationCompatible", "BasicType", "BasicString", 
+  "Union", "Intersection", "Except", "optConstraints", "Constraints", 
+  "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec", 
   "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec", 
   "ConstraintSpec", "SingleValue", "ContainedSubtype", 
   "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement", 
@@ -823,34 +837,34 @@
 {
        0,   121,   122,   123,   123,   124,   125,   125,   126,   126,
      127,   127,   128,   128,   128,   129,   129,   130,   130,   131,
-     131,   131,   131,   131,   132,   132,   133,   133,   134,   134,
-     134,   134,   134,   135,   134,   134,   136,   136,   137,   137,
-     138,   138,   139,   140,   140,   141,   141,   141,   142,   142,
-     142,   143,   143,   144,   144,   144,   145,   146,   147,   147,
-     147,   148,   148,   148,   148,   149,   149,   150,   150,   150,
-     150,   150,   151,   151,   152,   152,   152,   152,   153,   153,
-     154,   154,   155,   155,   155,   155,   156,   156,   157,   157,
-     157,   158,   159,   159,   160,   160,   161,   161,   161,   161,
-     161,   161,   161,   162,   162,   164,   163,   165,   165,   166,
-     166,   166,   166,   167,   167,   167,   168,   169,   170,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   172,   172,
-     172,   172,   172,   172,   173,   173,   174,   175,   175,   176,
-     176,   176,   177,   178,   179,   179,   179,   180,   179,   179,
-     181,   181,   181,   181,   181,   181,   182,   182,   183,   183,
-     183,   184,   184,   185,   185,   185,   185,   185,   185,   185,
-     185,   185,   185,   185,   185,   185,   186,   186,   186,   187,
-     187,   188,   188,   188,   188,   188,   188,   188,   188,   188,
-     188,   188,   188,   188,   188,   189,   189,   190,   190,   191,
-     192,   192,   193,   193,   194,   194,   195,   195,   195,   195,
-     196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
-     197,   197,   197,   197,   197,   198,   197,   199,   199,   199,
-     199,   200,   200,   201,   201,   201,   201,   201,   202,   203,
-     203,   204,   204,   205,   205,   206,   206,   207,   207,   207,
-     208,   208,   209,   210,   211,   211,   212,   212,   213,   213,
-     214,   214,   215,   215,   216,   216,   217,   217,   218,   218,
-     218,   218,   218,   219,   219,   220,   220,   221,   221,   222,
-     223,   224,   224,   224,   224,   225,   225,   225,   226,   226,
-     227,   228,   228,   229
+     131,   131,   131,   131,   132,   132,   133,   134,   134,   135,
+     135,   135,   136,   135,   135,   137,   137,   138,   138,   139,
+     139,   140,   140,   141,   142,   142,   143,   143,   143,   144,
+     144,   145,   145,   145,   146,   146,   147,   147,   147,   148,
+     149,   150,   150,   150,   151,   151,   151,   151,   152,   152,
+     153,   153,   153,   153,   153,   154,   154,   155,   155,   155,
+     155,   156,   156,   157,   157,   158,   158,   158,   158,   159,
+     159,   160,   160,   160,   161,   162,   162,   163,   163,   164,
+     164,   164,   164,   164,   164,   164,   165,   165,   167,   166,
+     168,   168,   169,   169,   169,   169,   170,   170,   170,   171,
+     172,   173,   174,   174,   174,   174,   174,   174,   174,   174,
+     174,   175,   175,   175,   175,   175,   175,   176,   176,   177,
+     178,   178,   179,   179,   179,   180,   181,   182,   182,   182,
+     183,   182,   182,   184,   184,   184,   184,   184,   184,   185,
+     185,   186,   186,   186,   187,   187,   188,   188,   188,   188,
+     188,   188,   188,   188,   188,   188,   188,   188,   188,   189,
+     189,   189,   190,   190,   191,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   191,   192,   192,
+     193,   193,   194,   195,   195,   196,   196,   197,   197,   198,
+     198,   198,   198,   199,   199,   199,   199,   199,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   201,   200,
+     202,   202,   202,   202,   203,   203,   204,   204,   204,   204,
+     204,   205,   206,   206,   207,   207,   208,   208,   209,   209,
+     210,   210,   210,   211,   211,   212,   213,   214,   214,   215,
+     215,   216,   216,   217,   217,   218,   218,   219,   219,   220,
+     220,   221,   221,   221,   221,   221,   222,   222,   223,   223,
+     224,   224,   225,   226,   227,   227,   227,   227,   228,   228,
+     228,   229,   229,   230,   231,   231,   232
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -858,34 +872,34 @@
 {
        0,     2,     1,     1,     2,     8,     0,     1,     3,     2,
        1,     2,     1,     4,     1,     0,     1,     1,     2,     2,
-       2,     2,     2,     2,     0,     1,     1,     2,     1,     1,
-       1,     1,     1,     0,     3,     1,     3,     2,     1,     2,
-       0,     1,     4,     1,     3,     1,     3,     1,     3,     3,
-       2,     1,     3,     1,     3,     1,     3,     4,     1,     1,
-       4,     3,     3,     6,     6,     1,     3,     1,     3,     3,
-       3,     3,     1,     3,     1,     1,     1,     1,     0,     1,
-       1,     3,     3,     2,     3,     1,     1,     3,     2,     1,
-       1,     5,     0,     1,     1,     3,     2,     4,     3,     3,
-       3,     3,     3,     0,     1,     0,     6,     1,     2,     1,
-       1,     1,     3,     1,     3,     3,     3,     0,     2,     1,
-       4,     4,     4,     6,     6,     1,     4,     3,     1,     3,
-       3,     3,     1,     3,     1,     3,     1,     1,     1,     1,
-       3,     3,     1,     4,     1,     1,     3,     0,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     1,     1,
-       1,     1,     2,     1,     1,     1,     1,     2,     2,     1,
-       1,     2,     2,     1,     1,     1,     1,     1,     2,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     0,     1,     3,     1,     2,     1,
+       1,     1,     0,     3,     1,     0,     1,     3,     2,     1,
+       2,     0,     1,     4,     1,     3,     1,     3,     1,     0,
+       1,     3,     3,     2,     1,     3,     1,     3,     1,     3,
+       4,     1,     1,     4,     3,     3,     6,     6,     1,     3,
+       1,     3,     3,     3,     3,     1,     3,     1,     1,     1,
+       1,     0,     1,     1,     3,     3,     2,     3,     1,     1,
+       3,     2,     1,     1,     5,     0,     1,     1,     3,     2,
+       4,     3,     3,     3,     3,     3,     0,     1,     0,     6,
+       1,     2,     1,     1,     1,     3,     1,     3,     3,     3,
+       0,     2,     1,     4,     4,     4,     6,     6,     1,     4,
+       3,     1,     3,     3,     3,     1,     3,     1,     3,     1,
+       1,     1,     1,     3,     3,     1,     4,     1,     1,     3,
+       0,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     1,     1,     1,     1,     2,     1,     1,     1,     1,
+       2,     2,     1,     1,     2,     2,     1,     1,     1,     1,
+       1,     2,     1,     2,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     1,     1,     4,     3,     4,     1,     1,     3,     5,
-       1,     3,     3,     3,     3,     4,     3,     1,     1,     3,
-       3,     3,     3,     1,     1,     0,     5,     1,     2,     2,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       5,     1,     3,     1,     3,     0,     1,     1,     1,     1,
-       1,     1,     3,     4,     1,     3,     2,     3,     1,     3,
-       0,     1,     1,     2,     2,     3,     1,     3,     1,     4,
-       4,     1,     1,     1,     1,     1,     1,     0,     1,     2,
-       4,     0,     1,     1,     1,     0,     1,     1,     1,     1,
-       1,     0,     1,     1
+       1,     1,     1,     0,     1,     1,     4,     3,     4,     1,
+       1,     3,     5,     1,     3,     3,     3,     3,     4,     3,
+       1,     1,     3,     3,     3,     3,     1,     1,     0,     5,
+       1,     2,     2,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     3,     5,     1,     3,     1,     3,     0,     1,
+       1,     1,     1,     1,     1,     3,     4,     1,     3,     2,
+       3,     1,     3,     0,     1,     1,     2,     2,     3,     1,
+       3,     1,     4,     4,     1,     1,     1,     1,     1,     1,
+       0,     1,     2,     4,     0,     1,     1,     1,     0,     1,
+       1,     1,     1,     1,     0,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -893,361 +907,368 @@
    means the default is an error.  */
 static const unsigned short yydefact[] =
 {
-       0,   288,   289,     0,     2,     3,     6,     1,     4,     0,
-       0,     7,   293,    14,     9,     0,    10,    12,    15,     8,
+       0,   291,   292,     0,     2,     3,     6,     1,     4,     0,
+       0,     7,   296,    14,     9,     0,    10,    12,    15,     8,
       11,     0,     0,     0,     0,     0,     0,     0,    16,    17,
-       0,    23,    21,    19,    22,    20,     0,    18,    13,    24,
-     181,     0,     0,   182,   183,   184,     0,   185,   186,   194,
-     187,   188,   189,   190,   191,   192,   193,     0,    25,    26,
-      28,    29,    32,    30,    31,    35,     0,     0,    33,     0,
-      50,     0,    51,    53,    55,    37,     0,    38,     0,    43,
-      45,    47,     5,    27,   277,   128,   290,     0,   163,     0,
-       0,   177,   170,   174,   176,   164,     0,     0,   165,   169,
-     173,     0,     0,    59,   179,   166,    58,   175,   132,     0,
-      34,    49,    48,     0,     0,    36,    39,     0,     0,     0,
-       0,   281,    62,    61,   117,   278,   285,     0,   178,   172,
-     171,   168,   167,     0,    65,     0,   166,    67,     0,   277,
-       0,   180,     0,     0,    52,    54,    40,    44,    46,     0,
-     283,   284,   282,     0,     0,   200,   287,   286,   279,   129,
-     131,     0,     0,     0,     0,     0,    57,   152,   158,   153,
-     273,   274,   159,   160,   150,   151,    77,     0,    72,    74,
-      75,   154,   155,    76,   272,   264,     0,   266,   271,   268,
-     137,   138,   133,   134,   136,   130,   149,   147,   143,   144,
-     145,     0,   156,    41,    42,   277,   277,     0,    94,     0,
-     125,     0,     0,   200,   200,   119,   118,     0,     0,   116,
-     201,   202,   277,    66,    71,    70,    69,    68,   276,     0,
-       0,   233,   232,     0,   231,   234,     0,   206,     0,     0,
-     236,     0,   207,   210,     0,   217,   218,   224,   223,   250,
-     251,   275,   235,   238,   237,    60,   277,   265,     0,     0,
-       0,     0,     0,     0,   142,   139,     0,   262,   260,   260,
-     260,    96,   261,    92,   260,   260,   103,     0,   280,     0,
-     277,     0,   277,     0,   277,     0,     0,     0,     0,    64,
-      63,     0,     0,   227,     0,     0,     0,     0,     0,     0,
-      56,   197,   198,   195,   196,     0,     0,     0,   199,     0,
-       0,     0,     0,    73,   267,     0,     0,   156,   135,   161,
-     148,   157,   146,   263,   101,     0,   100,   102,    93,   260,
-      98,    99,     0,    91,   104,    95,     0,   113,     0,    86,
-      89,    90,   277,   127,     0,     0,    79,    80,    85,   260,
-     277,   291,     0,   291,     0,   204,     0,   211,   225,   228,
-     229,   222,   220,   239,     0,   252,   216,   208,   212,   213,
-     214,     0,   221,   219,     0,     0,   254,   270,   269,   162,
-     140,   141,    97,     0,   126,     0,   120,   277,    88,   277,
-     121,   277,    83,   260,   277,   292,   122,   277,   203,   205,
-       0,   230,   243,     0,   241,   200,     0,   215,     0,   256,
-     258,   253,     0,   105,   114,   115,    87,    84,    81,    82,
-     117,   117,   226,   240,     0,   245,   209,   257,     0,   255,
-       0,   123,   124,   242,   248,   249,   247,   244,   246,   259,
-     109,   110,     0,     0,   107,   111,     0,   106,   108,   112
+       0,    23,    21,    19,    22,    20,     0,    18,    13,    49,
+       0,     0,    25,    35,    50,     0,    53,     0,    54,    56,
+      58,     5,     0,     0,    36,    52,    51,     0,     0,    38,
+       0,    39,     0,    44,    46,    48,   184,     0,   185,   186,
+     187,   188,   189,   197,   190,   191,   192,   193,   194,   195,
+     196,    26,    27,    31,    29,    30,    34,     0,     0,    55,
+      57,    37,    40,     0,     0,     0,    32,    28,   280,   131,
+     293,     0,   166,     0,     0,   180,   173,   177,   179,   167,
+       0,     0,   168,   172,   176,     0,     0,    62,   182,   169,
+      61,   178,   135,     0,    41,    45,    47,    33,     0,   284,
+      65,    64,   120,   281,   288,     0,   181,   175,   174,   171,
+     170,     0,    68,     0,   169,    70,     0,   280,     0,   183,
+       0,     0,    42,    43,     0,   286,   287,   285,     0,     0,
+     203,   290,   289,   282,   132,   134,     0,     0,     0,     0,
+       0,    60,   155,   161,   156,   276,   277,   162,   163,   153,
+     154,    80,     0,    75,    77,    78,   157,   158,    79,   275,
+     267,     0,   269,   274,   271,   140,   141,   136,   137,   139,
+     133,   152,   150,   146,   147,   148,     0,   159,   280,   280,
+       0,    97,     0,   128,     0,     0,   203,   203,   122,   121,
+       0,     0,   119,   204,   205,   280,    69,    74,    73,    72,
+      71,   279,     0,     0,   236,   235,     0,   234,   237,     0,
+     209,     0,     0,   239,     0,   210,   213,     0,   220,   221,
+     227,   226,   253,   254,   278,   238,   241,   240,    63,   280,
+     268,     0,     0,     0,     0,     0,     0,   145,   142,     0,
+     265,   263,   263,   263,    99,   264,    95,   263,   263,   106,
+       0,   283,     0,   280,     0,   280,     0,   280,     0,     0,
+       0,     0,    67,    66,     0,     0,   230,     0,     0,     0,
+       0,     0,     0,    59,   200,   201,   198,   199,     0,     0,
+       0,   202,     0,     0,     0,     0,    76,   270,     0,     0,
+     159,   138,   164,   151,   160,   149,   266,   104,     0,   103,
+     105,    96,   263,   101,   102,     0,    94,   107,    98,     0,
+     116,     0,    89,    92,    93,   280,   130,     0,     0,    82,
+      83,    88,   263,   280,   294,     0,   294,     0,   207,     0,
+     214,   228,   231,   232,   225,   223,   242,     0,   255,   219,
+     211,   215,   216,   217,     0,   224,   222,     0,     0,   257,
+     273,   272,   165,   143,   144,   100,     0,   129,     0,   123,
+     280,    91,   280,   124,   280,    86,   263,   280,   295,   125,
+     280,   206,   208,     0,   233,   246,     0,   244,   203,     0,
+     218,     0,   259,   261,   256,     0,   108,   117,   118,    90,
+      87,    84,    85,   120,   120,   229,   243,     0,   248,   212,
+     260,     0,   258,     0,   126,   127,   245,   251,   252,   250,
+     247,   249,   262,   112,   113,     0,     0,   110,   114,     0,
+     109,   111,   115
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
       -1,     3,     4,     5,    10,    11,    15,    16,    27,    28,
-      29,    57,    58,    59,   110,    60,    76,   204,    77,    78,
-      79,    61,    71,    72,   176,    62,   102,    63,   133,   134,
-     177,   178,   345,   346,   347,   338,   339,   122,   329,   207,
-     208,   333,   334,   430,   443,   444,   348,   349,   154,   155,
-     216,   103,   192,   193,   445,   269,   270,    64,   198,   261,
-     199,   200,   240,   320,   104,   105,   106,   107,   306,   307,
-     309,   219,   220,   221,   241,   242,   243,   400,   295,   244,
-     245,   246,   247,   403,   404,   437,   438,   248,   249,   250,
-     375,   376,   409,   271,   272,   141,   186,   187,   251,   252,
-     124,   125,   126,   153,   158,   253,   108,   394,   254
+      29,    41,    42,    81,    82,   127,    53,    54,    60,   153,
+      61,    62,    63,    43,    44,    47,    48,   181,    83,   116,
+      84,   141,   142,   182,   183,   348,   349,   350,   341,   342,
+     130,   332,   210,   211,   336,   337,   433,   446,   447,   351,
+     352,   159,   160,   219,   117,   197,   198,   448,   272,   273,
+      85,   203,   264,   204,   205,   243,   323,   118,   119,   120,
+     121,   309,   310,   312,   222,   223,   224,   244,   245,   246,
+     403,   298,   247,   248,   249,   250,   406,   407,   440,   441,
+     251,   252,   253,   378,   379,   412,   274,   275,   149,   191,
+     192,   254,   255,   132,   133,   134,   158,   163,   256,   122,
+     397,   257
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -291
+#define YYPACT_NINF -357
 static const short yypact[] =
 {
-     159,  -291,  -291,    40,   159,  -291,   -39,  -291,  -291,     5,
-      47,  -291,  -291,  -291,  -291,    17,  -291,   -22,   252,  -291,
-    -291,    85,    84,    51,    59,   109,    87,   190,   252,  -291,
-      94,  -291,  -291,  -291,  -291,  -291,   194,  -291,  -291,   475,
-    -291,   256,    76,  -291,  -291,  -291,   180,  -291,  -291,  -291,
-    -291,  -291,  -291,  -291,  -291,  -291,  -291,   230,   475,  -291,
-    -291,  -291,  -291,  -291,  -291,  -291,   332,   628,  -291,   168,
-    -291,   132,  -291,   174,  -291,  -291,    16,  -291,   -23,  -291,
-     182,  -291,  -291,  -291,     1,   177,  -291,   221,  -291,   225,
-     242,  -291,  -291,  -291,  -291,  -291,   265,   237,  -291,  -291,
-    -291,   704,   340,   248,  -291,   249,  -291,  -291,   240,   359,
-    -291,  -291,  -291,   155,   255,  -291,  -291,   159,   155,   257,
-     259,    26,  -291,  -291,  -291,  -291,     8,   155,  -291,  -291,
-    -291,  -291,  -291,    -6,  -291,   254,  -291,   258,   261,   193,
-      71,  -291,   323,   202,  -291,  -291,   -39,  -291,  -291,   271,
-    -291,  -291,  -291,   360,   552,   -50,  -291,  -291,  -291,  -291,
-    -291,   368,   704,   155,   155,   212,  -291,  -291,  -291,  -291,
-    -291,  -291,  -291,  -291,  -291,  -291,  -291,    78,  -291,  -291,
-    -291,  -291,  -291,  -291,  -291,  -291,   133,  -291,  -291,   264,
-    -291,  -291,   262,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
-    -291,   270,   269,  -291,  -291,    77,    27,   142,  -291,   263,
-     335,   281,   317,   156,   184,  -291,  -291,   282,   212,  -291,
-    -291,   283,     1,  -291,  -291,  -291,  -291,  -291,  -291,   290,
-     364,  -291,  -291,   -49,  -291,  -291,   291,  -291,   159,   212,
-    -291,   288,   211,   297,   296,   -49,  -291,  -291,  -291,   299,
-    -291,  -291,  -291,  -291,  -291,  -291,   193,  -291,    91,   321,
-     311,   403,   400,   202,  -291,  -291,   202,  -291,   -27,    25,
-     -27,  -291,  -291,   319,    25,   -27,   310,   271,  -291,   386,
-      37,   318,    70,   344,    70,   345,   212,   312,   212,  -291,
-    -291,   450,   313,   305,   320,   226,   315,   324,   325,   322,
-    -291,  -291,  -291,  -291,  -291,   329,   450,   450,  -291,   450,
-     212,   460,   330,  -291,  -291,   326,   327,  -291,  -291,  -291,
-     430,  -291,  -291,  -291,  -291,   328,  -291,  -291,  -291,   -27,
-    -291,  -291,   362,  -291,  -291,  -291,   400,   334,   147,  -291,
-    -291,  -291,   337,  -291,   380,   346,   343,  -291,  -291,   -27,
-     337,   400,   349,   400,   365,  -291,   366,  -291,  -291,  -291,
-     356,  -291,  -291,   283,    10,  -291,  -291,   367,  -291,  -291,
-    -291,   370,  -291,  -291,    -5,   152,  -291,  -291,  -291,  -291,
-    -291,  -291,  -291,   371,  -291,   321,  -291,    37,  -291,   337,
-    -291,     4,  -291,   -27,   337,  -291,  -291,   337,  -291,  -291,
-     403,  -291,  -291,   172,  -291,   -50,   432,  -291,   400,   369,
-    -291,  -291,   330,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
-    -291,  -291,   430,  -291,    10,     9,   247,   369,   400,  -291,
-      54,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,  -291,
-    -291,  -291,    54,    57,  -291,  -291,    34,  -291,  -291,  -291
+      83,  -357,  -357,    18,    83,  -357,   -80,  -357,  -357,    64,
+       3,  -357,  -357,  -357,  -357,    74,  -357,     2,   266,  -357,
+    -357,   139,   100,    88,    90,   148,   142,   230,   266,  -357,
+     135,  -357,  -357,  -357,  -357,  -357,   242,  -357,  -357,   127,
+      53,   233,  -357,   238,  -357,   177,  -357,    80,  -357,   199,
+    -357,  -357,   173,   256,  -357,  -357,  -357,   213,   206,  -357,
+      55,  -357,     8,  -357,   211,  -357,  -357,   308,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,
+    -357,   256,  -357,  -357,  -357,  -357,  -357,   345,   641,  -357,
+    -357,  -357,  -357,    83,   213,   217,  -357,  -357,   -23,   222,
+    -357,   257,  -357,   271,   276,  -357,  -357,  -357,  -357,  -357,
+     303,   281,  -357,  -357,  -357,   717,   359,   261,  -357,   262,
+    -357,  -357,   253,   372,   -80,  -357,  -357,  -357,   269,     6,
+    -357,  -357,  -357,  -357,   134,   213,  -357,  -357,  -357,  -357,
+    -357,    89,  -357,   264,  -357,   273,   272,    95,    69,  -357,
+     277,   205,  -357,  -357,   300,  -357,  -357,  -357,   373,   565,
+     -61,  -357,  -357,  -357,  -357,  -357,   381,   717,   213,   213,
+     445,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,  -357,
+    -357,  -357,    92,  -357,  -357,  -357,  -357,  -357,  -357,  -357,
+    -357,   114,  -357,  -357,   278,  -357,  -357,   274,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,  -357,   275,   282,    72,    40,
+     117,  -357,   279,   351,   293,   330,    87,    99,  -357,  -357,
+     294,   445,  -357,  -357,   295,   -23,  -357,  -357,  -357,  -357,
+    -357,  -357,   305,   377,  -357,  -357,   -79,  -357,  -357,   287,
+    -357,    83,   445,  -357,   301,   229,   310,   302,   -79,  -357,
+    -357,  -357,   312,  -357,  -357,  -357,  -357,  -357,  -357,    95,
+    -357,    27,   270,   311,   414,   412,   205,  -357,  -357,   205,
+    -357,   116,   126,   116,  -357,  -357,   332,   126,   116,   323,
+     300,  -357,   398,    41,   334,     4,   356,     4,   357,   445,
+     320,   445,  -357,  -357,   491,   324,   315,   331,   225,   326,
+     337,   329,   328,  -357,  -357,  -357,  -357,  -357,   339,   491,
+     491,  -357,   491,   445,   291,   327,  -357,  -357,   338,   340,
+    -357,  -357,  -357,   443,  -357,  -357,  -357,  -357,   346,  -357,
+    -357,  -357,   116,  -357,  -357,   363,  -357,  -357,  -357,   412,
+     347,   138,  -357,  -357,  -357,   348,  -357,   389,   360,   352,
+    -357,  -357,   116,   348,   412,   362,   412,   355,  -357,   369,
+    -357,  -357,  -357,   349,  -357,  -357,   295,    51,  -357,  -357,
+     370,  -357,  -357,  -357,   371,  -357,  -357,    10,   145,  -357,
+    -357,  -357,  -357,  -357,  -357,  -357,   376,  -357,   270,  -357,
+      41,  -357,   348,  -357,    46,  -357,   116,   348,  -357,  -357,
+     348,  -357,  -357,   414,  -357,  -357,   174,  -357,   -61,   463,
+    -357,   412,   368,  -357,  -357,   327,  -357,  -357,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,   443,  -357,    51,   130,   234,
+     368,   412,  -357,    28,  -357,  -357,  -357,  -357,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,    28,    48,  -357,  -357,    16,
+    -357,  -357,  -357
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -291,  -291,  -291,   474,  -291,   339,  -291,   473,  -291,  -291,
-     461,  -291,  -291,   434,  -291,  -291,  -291,  -291,   417,  -291,
-     376,  -291,  -291,   382,   358,  -291,   -46,  -291,  -291,   342,
-    -291,   241,   215,  -291,   111,  -291,   118,   284,  -291,  -291,
-     231,  -291,  -291,  -291,    65,  -290,  -275,   -83,  -291,   -67,
-    -291,   228,  -291,   251,  -133,   306,   307,  -291,    33,  -291,
-    -132,  -249,  -131,   114,   -33,   -17,  -291,    -3,  -291,  -291,
-    -291,  -211,  -291,   219,  -129,   113,   -77,  -291,   275,  -291,
-    -247,  -291,  -291,  -291,    97,  -291,  -291,  -291,  -291,  -291,
-    -291,   112,   119,  -252,  -291,  -291,  -291,   268,   -98,  -291,
-     -92,  -291,  -291,  -291,  -291,    20,  -291,   178,    -9
+    -357,  -357,  -357,   483,  -357,   364,  -357,   474,  -357,  -357,
+     462,  -357,  -357,  -357,   410,  -357,  -357,  -357,  -357,  -357,
+     432,  -357,   399,  -357,  -357,  -357,   437,   366,  -357,   -62,
+    -357,  -357,   341,  -357,   250,   210,  -357,   121,  -357,   120,
+     292,  -357,  -357,   236,  -357,  -357,  -357,    73,  -356,  -272,
+     -84,  -357,   -58,  -357,   235,  -357,   258,  -146,   313,   314,
+    -357,   -21,  -357,  -124,  -255,  -122,   122,   -38,    -1,  -357,
+      34,  -357,  -357,  -357,  -214,  -357,   221,   -25,   115,   -69,
+    -357,   280,  -357,  -207,  -357,  -357,  -357,   104,  -357,  -357,
+    -357,  -357,  -357,  -357,   111,   123,  -256,  -357,  -357,  -357,
+     283,  -139,  -357,  -138,  -357,  -357,  -357,  -357,     1,  -357,
+     176,    -9
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, parse error.  */
-#define YYTABLE_NINF -261
+#define YYTABLE_NINF -264
 static const short yytable[] =
 {
-      17,   123,   283,   285,    12,   340,    17,   180,   181,   194,
-     315,   266,   181,    12,    12,    13,   324,   326,   327,    12,
-       6,   109,   330,   331,     6,    12,    12,    13,   117,   434,
-      67,     1,     2,    74,   120,   217,    65,    81,   440,   344,
-       7,   182,   188,   264,   265,   182,    12,   267,   362,    67,
-     150,   190,   191,   441,   156,    65,   179,   293,   440,    66,
-     218,   440,    73,   266,   373,   157,    80,    81,   135,     9,
-     294,   190,   191,   441,   190,   191,   441,   382,    66,    12,
-      12,   170,   171,   435,   136,    12,    18,   436,    21,   287,
-     118,     1,     2,   264,   265,    30,    80,   392,    69,   267,
-      12,   170,   171,   161,    74,   344,   151,   162,   215,    81,
-     299,   337,   340,   408,    14,   266,   121,   402,   160,   121,
-     152,   137,   268,   273,   180,   181,    19,   194,   115,   135,
-     183,   189,   181,    73,   202,   181,   414,   146,    80,   290,
-      32,   419,   121,   325,   337,   136,    31,   159,    33,   442,
-     449,   267,   121,   448,   225,   227,   448,   354,   182,   356,
-     188,   316,   195,   201,    12,   182,   447,    34,   182,   442,
-       1,     2,   442,   179,     1,     2,    35,   337,   184,   -78,
-     185,   371,   137,   224,   226,   121,  -260,   255,    70,    12,
-    -260,   256,   121,    36,   425,     1,     2,   341,   184,   167,
-     168,   169,    12,   170,   171,    38,   172,   173,   167,   168,
-     169,    12,   170,   171,   357,   172,   173,     1,     2,   168,
-      39,    12,   170,   171,   228,   172,   173,     1,     2,   368,
-     369,    75,   370,   168,   229,    12,   170,   171,   228,   172,
-     173,   217,   257,   174,   112,   113,   258,   183,   230,   189,
-     317,   276,   174,   321,   202,   277,   386,   202,   298,   388,
-     387,   411,   231,   232,   282,   412,   218,   393,    22,   217,
-     196,   342,    68,   350,    82,   350,   231,    23,   233,   201,
-     111,   423,   114,   201,   175,   424,   201,   415,   205,   206,
-     119,   361,   284,   175,   218,   127,   322,   234,    24,   323,
-      25,   165,   420,   235,   341,   421,   417,   128,   121,    26,
-     197,   129,   236,   301,   302,   303,   304,   235,   130,   237,
-     238,   131,   239,   132,   305,   296,   297,   384,   190,   191,
-      12,   170,   171,    85,    86,    84,     1,     2,     1,     2,
-     190,   191,   395,   138,   395,   380,   381,    85,    86,   301,
-     302,   303,   304,   431,   432,   405,   139,   140,   142,    87,
-      40,    88,   143,    89,   145,   410,   148,   149,   163,   165,
-     209,   222,   164,    90,   259,   279,   317,    91,   342,   278,
-     260,    92,   350,   263,    93,    43,    44,    45,   262,   280,
-     281,   291,   286,   288,   292,    94,    47,   300,   308,   410,
-      95,    48,    96,    49,    97,   201,   310,   312,   319,    12,
-     332,    50,   328,    98,    99,   405,   336,   351,   353,   439,
-      51,   358,    52,   355,   359,   218,   360,    53,   100,    54,
-      55,    56,   364,   366,   365,   379,   367,   377,   378,   168,
-     101,    12,   170,   171,   228,   172,   173,     1,     2,   383,
-     374,   385,   121,   389,   229,   390,   391,   168,   396,    12,
-     170,   171,   228,   172,   173,     1,     2,   168,   230,    12,
-     170,   171,   228,   172,   173,   401,   398,   399,     8,   413,
-     406,   407,   231,   232,    12,   203,   230,   428,    20,    37,
-       1,     2,    83,   116,   147,   144,   166,   313,   233,   352,
-     231,   232,   418,    40,   223,   416,   289,   446,   335,   343,
-     231,   318,   274,   275,   422,   363,   233,   234,    41,   426,
-     311,   433,    42,   235,   429,   372,   314,   427,    43,    44,
-      45,   397,   236,     0,    46,   234,     0,     0,     0,    47,
-     238,   235,   239,     0,    48,     0,    49,     0,     0,     0,
-     236,   235,     0,     0,    50,     0,     0,     0,   238,     0,
-     239,     0,     0,    51,     0,    52,     0,    85,    86,     0,
-      53,     0,    54,    55,    56,   210,     0,     0,     0,    87,
-      40,    88,     0,    89,   211,     0,     0,     0,     0,     0,
-       0,     0,     0,    90,     0,     0,     0,    91,     0,     0,
-       0,    92,     0,     0,    93,    43,    44,    45,     0,     0,
-       0,     0,     0,   212,     0,    94,    47,     0,     0,     0,
-      95,    48,    96,    49,    97,     0,     0,     0,     0,     0,
-       0,    50,     0,    98,    99,   213,   214,     0,     0,     0,
-      51,     0,    52,    85,    86,     0,     0,    53,   100,    54,
-      55,    56,     0,     0,     0,    87,    40,    88,     0,    89,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    90,
-       0,     0,     0,    91,     0,     0,     0,    92,     0,     0,
-      93,    43,    44,    45,     0,     0,     0,     0,     0,     0,
-       0,    94,    47,     0,     0,     0,    95,    48,    96,    49,
-      97,     0,     0,     0,     0,     0,     0,    50,     0,    98,
-      99,     0,     0,     0,     0,     0,    51,     0,    52,     1,
-       2,     0,     0,    53,   100,    54,    55,    56,     0,     0,
-       0,    87,    40,    88,     0,    89,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    90,     0,     0,     0,    91,
-       0,     0,     0,    92,     0,     0,    93,    43,    44,    45,
-       0,     0,     0,     0,     0,     0,     0,    94,    47,     0,
-       0,     0,    95,    48,    96,    49,    97,     0,     0,     0,
-       0,     0,     0,    50,     0,    98,    99,     0,     0,     0,
-       0,     0,    51,     0,    52,     0,     0,     0,     0,    53,
-     100,    54,    55,    56
+      17,     6,   286,   288,   199,     6,    17,   318,   187,   193,
+     128,   343,   187,    12,   131,   327,   329,   330,     7,    12,
+     443,   333,   334,   185,   220,   186,   123,   296,     9,   186,
+     155,    50,   443,   195,   196,   444,    12,   175,   176,   347,
+     297,    49,    18,    65,    88,   195,   196,   444,    50,   221,
+      12,    65,   443,    64,    87,    12,   267,   268,    49,    93,
+      12,    64,    12,   184,    12,   195,   196,   444,     1,     2,
+       1,     2,    88,    12,    13,    45,   385,   143,    12,   175,
+     176,   347,    87,    12,    13,    65,   156,    86,   267,   268,
+     451,   365,   129,   451,   124,    64,   395,   218,     1,     2,
+     157,   172,   173,   174,    12,   175,   176,   376,   177,   178,
+     269,   340,    21,   -81,   144,    86,   145,   199,   343,   129,
+     187,    94,   193,   319,   271,   276,   165,   187,   411,   143,
+     187,   445,   452,   417,   189,   185,   164,   186,   188,   194,
+     422,   293,   207,   445,   186,   179,   270,   186,   340,    30,
+     437,   200,   206,   340,   269,   129,   129,   450,   405,   228,
+     230,   129,    31,   445,   269,    46,   144,    91,   145,   227,
+     229,   -24,   220,    14,    40,   184,   189,    32,   190,    33,
+     161,  -263,    12,    19,   220,  -263,   180,   129,     1,     2,
+     270,   162,    56,    57,   428,   285,   290,   221,   166,   344,
+     270,   258,   167,   170,   438,   259,    34,   287,   439,   221,
+     129,   172,   173,   174,    12,   175,   176,   302,   177,   178,
+       1,     2,    12,   260,    59,   360,   279,   261,     1,     2,
+     280,    35,   173,    36,    12,   175,   176,   231,   177,   178,
+     371,   372,   301,   373,   328,   325,    38,   389,   326,   418,
+     188,   390,   194,   320,   414,   179,   324,   207,   415,   423,
+     207,   391,   424,   206,   357,    12,   359,   206,    39,   396,
+     206,     1,     2,   201,   345,   234,   353,    51,   353,    12,
+     175,   176,    22,   426,    66,     1,     2,   427,   374,    55,
+     364,    23,     1,     2,   195,   196,   180,    52,   173,    67,
+      12,   175,   176,   231,   177,   178,   344,    58,   420,    68,
+      69,    70,    24,   202,    25,    90,   238,   208,   209,    95,
+      71,   299,   300,    26,    96,    72,   126,    73,   195,   196,
+     387,   304,   305,   306,   307,    74,   304,   305,   306,   307,
+     135,   234,   308,   136,    75,   398,    76,   398,    98,    99,
+     100,    77,   138,    78,    79,    80,   375,   137,   408,   139,
+      99,   100,   146,   383,   384,   434,   435,   140,   413,   147,
+     148,   150,   101,    66,   102,   151,   103,   154,   168,   320,
+     170,   345,   238,   212,   225,   353,   104,   169,   262,   206,
+     105,   282,   263,   265,   106,   281,   266,   107,    68,    69,
+      70,   283,   413,   284,   289,   291,   294,   295,   108,    71,
+     303,   311,   313,   109,    72,   110,    73,   111,   408,   322,
+     315,    12,   442,   335,    74,   331,   112,   113,   339,   354,
+     356,   358,   361,    75,   362,    76,   221,   363,   368,   369,
+      77,   114,    78,    79,    80,   367,   370,   377,   382,   380,
+     386,   381,   173,   115,    12,   175,   176,   231,   177,   178,
+       1,     2,   392,   129,   388,   394,   401,   232,   404,   393,
+     173,   399,    12,   175,   176,   231,   177,   178,     1,     2,
+     402,   233,   410,   409,   416,   232,   431,     8,   152,    20,
+      37,    97,    92,   125,    89,   234,   235,   355,   173,   233,
+      12,   175,   176,   231,   177,   178,     1,     2,   226,   316,
+     419,   236,   171,   234,   235,   421,   338,   292,   449,   346,
+     366,   321,   277,   278,   429,   425,   432,   233,   314,   236,
+     237,   436,   400,     0,   430,     0,   238,     0,     0,     0,
+       0,   234,   235,     0,   317,   239,     0,     0,   237,     0,
+       0,     0,   240,   241,   238,   242,     0,   236,     0,     0,
+       0,     0,     0,   239,     0,     0,     0,     0,     0,     0,
+       0,   241,     0,   242,     0,     0,   237,     0,     0,     0,
+      99,   100,   238,     0,     0,     0,     0,     0,   213,     0,
+       0,   239,   101,    66,   102,     0,   103,   214,     0,   241,
+       0,   242,     0,     0,     0,     0,   104,     0,     0,     0,
+     105,     0,     0,     0,   106,     0,     0,   107,    68,    69,
+      70,     0,     0,     0,     0,     0,   215,     0,   108,    71,
+       0,     0,     0,   109,    72,   110,    73,   111,     0,     0,
+       0,     0,     0,     0,    74,     0,   112,   113,   216,   217,
+       0,     0,     0,    75,     0,    76,    99,   100,     0,     0,
+      77,   114,    78,    79,    80,     0,     0,     0,   101,    66,
+     102,     0,   103,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   104,     0,     0,     0,   105,     0,     0,     0,
+     106,     0,     0,   107,    68,    69,    70,     0,     0,     0,
+       0,     0,     0,     0,   108,    71,     0,     0,     0,   109,
+      72,   110,    73,   111,     0,     0,     0,     0,     0,     0,
+      74,     0,   112,   113,     0,     0,     0,     0,     0,    75,
+       0,    76,     1,     2,     0,     0,    77,   114,    78,    79,
+      80,     0,     0,     0,   101,    66,   102,     0,   103,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   104,     0,
+       0,     0,   105,     0,     0,     0,   106,     0,     0,   107,
+      68,    69,    70,     0,     0,     0,     0,     0,     0,     0,
+     108,    71,     0,     0,     0,   109,    72,   110,    73,   111,
+       0,     0,     0,     0,     0,     0,    74,     0,   112,   113,
+       0,     0,     0,     0,     0,    75,     0,    76,     0,     0,
+       0,     0,    77,   114,    78,    79,    80
 };
 
 static const short yycheck[] =
 {
-       9,    84,   213,   214,     9,   280,    15,   139,   139,   142,
-     259,    38,   143,     9,     9,    10,   268,   269,   270,     9,
-       0,    67,   274,   275,     4,     9,     9,    10,    51,    20,
-      39,    15,    16,    42,    33,    85,    39,    46,     4,    35,
-       0,   139,   140,    16,    17,   143,     9,    74,   295,    58,
-      24,    17,    18,    19,    46,    58,   139,   106,     4,    39,
-     110,     4,    42,    38,   311,    57,    46,    76,   101,   108,
-     119,    17,    18,    19,    17,    18,    19,   329,    58,     9,
-       9,    10,    11,    74,   101,     9,    39,    78,   110,   218,
-     113,    15,    16,    16,    17,    10,    76,   349,    22,    74,
-       9,    10,    11,   109,   113,    35,    80,   113,   154,   118,
-     239,   107,   387,   118,   109,    38,   115,   107,   127,   115,
-      94,   101,   205,   206,   256,   256,   109,   260,   112,   162,
-     139,   140,   263,   113,   143,   266,   385,   117,   118,   222,
-      89,   393,   115,   118,   107,   162,    62,   127,    89,   115,
-     116,    74,   115,   443,   163,   164,   446,   286,   256,   288,
-     258,   259,   142,   143,     9,   263,   109,    58,   266,   115,
-      15,    16,   115,   256,    15,    16,    89,   107,   107,   109,
-     109,   310,   162,   163,   164,   115,   109,   109,   112,     9,
-     113,   113,   115,     3,   405,    15,    16,   280,   107,     6,
-       7,     8,     9,    10,    11,   111,    13,    14,     6,     7,
-       8,     9,    10,    11,   291,    13,    14,    15,    16,     7,
-      26,     9,    10,    11,    12,    13,    14,    15,    16,   306,
-     307,    51,   309,     7,    22,     9,    10,    11,    12,    13,
-      14,    85,   109,    50,   112,   113,   113,   256,    36,   258,
-     259,   109,    50,   262,   263,   113,   109,   266,   238,   342,
-     113,   109,    50,    51,   108,   113,   110,   350,    16,    85,
-      68,   280,    16,   282,    44,   284,    50,    25,    66,   259,
-     112,   109,   108,   263,    91,   113,   266,   385,    17,    18,
-     108,    65,   108,    91,   110,   118,   263,    85,    46,   266,
-      48,   108,   394,    91,   387,   397,   389,    86,   115,    57,
-     108,    86,   100,   102,   103,   104,   105,    91,    76,   107,
-     108,    56,   110,    86,   113,    34,    35,   336,    17,    18,
-       9,    10,    11,    15,    16,     3,    15,    16,    15,    16,
-      17,    18,   351,     3,   353,    17,    18,    15,    16,   102,
-     103,   104,   105,   420,   421,   364,   108,   108,   118,    27,
-      28,    29,     3,    31,   109,   374,   109,   108,   114,   108,
-      10,     3,   114,    41,   110,    40,   385,    45,   387,   116,
-     118,    49,   391,   114,    52,    53,    54,    55,   118,   108,
-      73,   101,   110,   110,    30,    63,    64,   109,   101,   408,
-      68,    69,    70,    71,    72,   385,   110,   108,     5,     9,
-     100,    79,    93,    81,    82,   424,    30,    73,    73,   428,
-      88,   108,    90,   111,   119,   110,   106,    95,    96,    97,
-      98,    99,   108,   111,   109,     5,   107,   111,   111,     7,
-     108,     9,    10,    11,    12,    13,    14,    15,    16,    87,
-     120,   117,   115,    73,    22,   109,   113,     7,   109,     9,
-      10,    11,    12,    13,    14,    15,    16,     7,    36,     9,
-      10,    11,    12,    13,    14,   119,   111,   111,     4,   108,
-     113,   111,    50,    51,     9,   146,    36,   118,    15,    28,
-      15,    16,    58,    76,   118,   113,   138,   256,    66,   284,
-      50,    51,   391,    28,   162,   387,   222,   442,   277,   281,
-      50,   260,   206,   206,   400,   296,    66,    85,    43,   406,
-     245,   424,    47,    91,   412,    65,   258,   408,    53,    54,
-      55,   353,   100,    -1,    59,    85,    -1,    -1,    -1,    64,
-     108,    91,   110,    -1,    69,    -1,    71,    -1,    -1,    -1,
-     100,    91,    -1,    -1,    79,    -1,    -1,    -1,   108,    -1,
-     110,    -1,    -1,    88,    -1,    90,    -1,    15,    16,    -1,
-      95,    -1,    97,    98,    99,    23,    -1,    -1,    -1,    27,
-      28,    29,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
-      -1,    49,    -1,    -1,    52,    53,    54,    55,    -1,    -1,
-      -1,    -1,    -1,    61,    -1,    63,    64,    -1,    -1,    -1,
-      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
-      88,    -1,    90,    15,    16,    -1,    -1,    95,    96,    97,
-      98,    99,    -1,    -1,    -1,    27,    28,    29,    -1,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-      -1,    -1,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,
-      52,    53,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    63,    64,    -1,    -1,    -1,    68,    69,    70,    71,
-      72,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    81,
-      82,    -1,    -1,    -1,    -1,    -1,    88,    -1,    90,    15,
-      16,    -1,    -1,    95,    96,    97,    98,    99,    -1,    -1,
-      -1,    27,    28,    29,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
-      -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,    55,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,    -1,
-      -1,    -1,    68,    69,    70,    71,    72,    -1,    -1,    -1,
-      -1,    -1,    -1,    79,    -1,    81,    82,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    90,    -1,    -1,    -1,    -1,    95,
-      96,    97,    98,    99
+       9,     0,   216,   217,   150,     4,    15,   262,   147,   148,
+      33,   283,   151,     9,    98,   271,   272,   273,     0,     9,
+       4,   277,   278,   147,    85,   147,    88,   106,   108,   151,
+      24,    40,     4,    17,    18,    19,     9,    10,    11,    35,
+     119,    40,    39,    52,    53,    17,    18,    19,    57,   110,
+       9,    60,     4,    52,    53,     9,    16,    17,    57,    51,
+       9,    60,     9,   147,     9,    17,    18,    19,    15,    16,
+      15,    16,    81,     9,    10,    22,   332,   115,     9,    10,
+      11,    35,    81,     9,    10,    94,    80,    53,    16,    17,
+     446,   298,   115,   449,    93,    94,   352,   159,    15,    16,
+      94,     6,     7,     8,     9,    10,    11,   314,    13,    14,
+      38,   107,   110,   109,   115,    81,   115,   263,   390,   115,
+     259,   113,   261,   262,   208,   209,   135,   266,   118,   167,
+     269,   115,   116,   388,   107,   259,   135,   259,   147,   148,
+     396,   225,   151,   115,   266,    50,    74,   269,   107,    10,
+      20,   150,   151,   107,    38,   115,   115,   109,   107,   168,
+     169,   115,    62,   115,    38,   112,   167,   112,   167,   168,
+     169,    44,    85,   109,    47,   259,   107,    89,   109,    89,
+      46,   109,     9,   109,    85,   113,    91,   115,    15,    16,
+      74,    57,   112,   113,   408,   108,   221,   110,   109,   283,
+      74,   109,   113,   108,    74,   113,    58,   108,    78,   110,
+     115,     6,     7,     8,     9,    10,    11,   242,    13,    14,
+      15,    16,     9,   109,    51,   294,   109,   113,    15,    16,
+     113,    89,     7,     3,     9,    10,    11,    12,    13,    14,
+     309,   310,   241,   312,   118,   266,   111,   109,   269,   388,
+     259,   113,   261,   262,   109,    50,   265,   266,   113,   397,
+     269,   345,   400,   262,   289,     9,   291,   266,    26,   353,
+     269,    15,    16,    68,   283,    50,   285,    44,   287,     9,
+      10,    11,    16,   109,    28,    15,    16,   113,   313,   112,
+      65,    25,    15,    16,    17,    18,    91,    59,     7,    43,
+       9,    10,    11,    12,    13,    14,   390,   108,   392,    53,
+      54,    55,    46,   108,    48,   109,    91,    17,    18,   108,
+      64,    34,    35,    57,    16,    69,   109,    71,    17,    18,
+     339,   102,   103,   104,   105,    79,   102,   103,   104,   105,
+     118,    50,   113,    86,    88,   354,    90,   356,     3,    15,
+      16,    95,    76,    97,    98,    99,    65,    86,   367,    56,
+      15,    16,     3,    17,    18,   423,   424,    86,   377,   108,
+     108,   118,    27,    28,    29,     3,    31,   108,   114,   388,
+     108,   390,    91,    10,     3,   394,    41,   114,   110,   388,
+      45,    40,   118,   118,    49,   116,   114,    52,    53,    54,
+      55,   108,   411,    73,   110,   110,   101,    30,    63,    64,
+     109,   101,   110,    68,    69,    70,    71,    72,   427,     5,
+     108,     9,   431,   100,    79,    93,    81,    82,    30,    73,
+      73,   111,   108,    88,   119,    90,   110,   106,   109,   111,
+      95,    96,    97,    98,    99,   108,   107,   120,     5,   111,
+      87,   111,     7,   108,     9,    10,    11,    12,    13,    14,
+      15,    16,    73,   115,   117,   113,   111,    22,   119,   109,
+       7,   109,     9,    10,    11,    12,    13,    14,    15,    16,
+     111,    36,   111,   113,   108,    22,   118,     4,   124,    15,
+      28,    81,    60,    94,    57,    50,    51,   287,     7,    36,
+       9,    10,    11,    12,    13,    14,    15,    16,   167,   259,
+     390,    66,   146,    50,    51,   394,   280,   225,   445,   284,
+     299,   263,   209,   209,   409,   403,   415,    36,   248,    66,
+      85,   427,   356,    -1,   411,    -1,    91,    -1,    -1,    -1,
+      -1,    50,    51,    -1,   261,   100,    -1,    -1,    85,    -1,
+      -1,    -1,   107,   108,    91,   110,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   108,    -1,   110,    -1,    -1,    85,    -1,    -1,    -1,
+      15,    16,    91,    -1,    -1,    -1,    -1,    -1,    23,    -1,
+      -1,   100,    27,    28,    29,    -1,    31,    32,    -1,   108,
+      -1,   110,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+      45,    -1,    -1,    -1,    49,    -1,    -1,    52,    53,    54,
+      55,    -1,    -1,    -1,    -1,    -1,    61,    -1,    63,    64,
+      -1,    -1,    -1,    68,    69,    70,    71,    72,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    81,    82,    83,    84,
+      -1,    -1,    -1,    88,    -1,    90,    15,    16,    -1,    -1,
+      95,    96,    97,    98,    99,    -1,    -1,    -1,    27,    28,
+      29,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    52,    53,    54,    55,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    63,    64,    -1,    -1,    -1,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,    88,
+      -1,    90,    15,    16,    -1,    -1,    95,    96,    97,    98,
+      99,    -1,    -1,    -1,    27,    28,    29,    -1,    31,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
+      -1,    -1,    45,    -1,    -1,    -1,    49,    -1,    -1,    52,
+      53,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      63,    64,    -1,    -1,    -1,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    81,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    -1,    90,    -1,    -1,
+      -1,    -1,    95,    96,    97,    98,    99
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,    15,    16,   122,   123,   124,   226,     0,   124,   108,
-     125,   126,     9,    10,   109,   127,   128,   229,    39,   109,
+       0,    15,    16,   122,   123,   124,   229,     0,   124,   108,
+     125,   126,     9,    10,   109,   127,   128,   232,    39,   109,
      128,   110,    16,    25,    46,    48,    57,   129,   130,   131,
       10,    62,    89,    89,    58,    89,     3,   131,   111,    26,
-      28,    43,    47,    53,    54,    55,    59,    64,    69,    71,
-      79,    88,    90,    95,    97,    98,    99,   132,   133,   134,
-     136,   142,   146,   148,   178,   188,   226,   229,    16,    22,
-     112,   143,   144,   226,   229,    51,   137,   139,   140,   141,
-     226,   229,    44,   134,     3,    15,    16,    27,    29,    31,
-      41,    45,    49,    52,    63,    68,    70,    72,    81,    82,
-      96,   108,   147,   172,   185,   186,   187,   188,   227,   147,
-     135,   112,   112,   113,   108,   112,   139,    51,   113,   108,
-      33,   115,   158,   168,   221,   222,   223,   118,    86,    86,
-      76,    56,    86,   149,   150,   185,   186,   226,     3,   108,
-     108,   216,   118,     3,   144,   109,   226,   141,   109,   108,
-      24,    80,    94,   224,   169,   170,    46,    57,   225,   226,
-     229,   109,   113,   114,   114,   108,   145,     6,     7,     8,
-      10,    11,    13,    14,    50,    91,   145,   151,   152,   168,
-     181,   183,   219,   229,   107,   109,   217,   218,   219,   229,
-      17,    18,   173,   174,   175,   226,    68,   108,   179,   181,
-     182,   226,   229,   126,   138,    17,    18,   160,   161,    10,
-      23,    32,    61,    83,    84,   147,   171,    85,   110,   192,
-     193,   194,     3,   150,   226,   229,   226,   229,    12,    22,
-      36,    50,    51,    66,    85,    91,   100,   107,   108,   110,
-     183,   195,   196,   197,   200,   201,   202,   203,   208,   209,
-     210,   219,   220,   226,   229,   109,   113,   109,   113,   110,
-     118,   180,   118,   114,    16,    17,    38,    74,   168,   176,
-     177,   214,   215,   168,   176,   177,   109,   113,   116,    40,
-     108,    73,   108,   192,   108,   192,   110,   195,   110,   158,
-     168,   101,    30,   106,   119,   199,    34,    35,   226,   195,
-     109,   102,   103,   104,   105,   113,   189,   190,   101,   191,
-     110,   199,   108,   152,   218,   182,   219,   229,   174,     5,
-     184,   229,   179,   179,   214,   118,   214,   214,    93,   159,
-     214,   214,   100,   162,   163,   161,    30,   107,   156,   157,
-     167,   168,   229,   172,    35,   153,   154,   155,   167,   168,
-     229,    73,   153,    73,   195,   111,   195,   197,   108,   119,
-     106,    65,   201,   194,   108,   109,   111,   107,   197,   197,
-     197,   195,    65,   201,   120,   211,   212,   111,   111,     5,
-      17,    18,   214,    87,   229,   117,   109,   113,   168,    73,
-     109,   113,   214,   168,   228,   229,   109,   228,   111,   111,
-     198,   119,   107,   204,   205,   229,   113,   111,   118,   213,
-     229,   109,   113,   108,   182,   219,   157,   168,   155,   214,
-     221,   221,   184,   109,   113,   192,   196,   213,   118,   212,
-     164,   170,   170,   205,    20,    74,    78,   206,   207,   229,
-       4,    19,   115,   165,   166,   175,   165,   109,   166,   116
+      47,   132,   133,   144,   145,    22,   112,   146,   147,   229,
+     232,    44,    59,   137,   138,   112,   112,   113,   108,    51,
+     139,   141,   142,   143,   229,   232,    28,    43,    53,    54,
+      55,    64,    69,    71,    79,    88,    90,    95,    97,    98,
+      99,   134,   135,   149,   151,   181,   191,   229,   232,   147,
+     109,   112,   141,    51,   113,   108,    16,   135,     3,    15,
+      16,    27,    29,    31,    41,    45,    49,    52,    63,    68,
+      70,    72,    81,    82,    96,   108,   150,   175,   188,   189,
+     190,   191,   230,   150,   229,   143,   109,   136,    33,   115,
+     161,   171,   224,   225,   226,   118,    86,    86,    76,    56,
+      86,   152,   153,   188,   189,   229,     3,   108,   108,   219,
+     118,     3,   126,   140,   108,    24,    80,    94,   227,   172,
+     173,    46,    57,   228,   229,   232,   109,   113,   114,   114,
+     108,   148,     6,     7,     8,    10,    11,    13,    14,    50,
+      91,   148,   154,   155,   171,   184,   186,   222,   232,   107,
+     109,   220,   221,   222,   232,    17,    18,   176,   177,   178,
+     229,    68,   108,   182,   184,   185,   229,   232,    17,    18,
+     163,   164,    10,    23,    32,    61,    83,    84,   150,   174,
+      85,   110,   195,   196,   197,     3,   153,   229,   232,   229,
+     232,    12,    22,    36,    50,    51,    66,    85,    91,   100,
+     107,   108,   110,   186,   198,   199,   200,   203,   204,   205,
+     206,   211,   212,   213,   222,   223,   229,   232,   109,   113,
+     109,   113,   110,   118,   183,   118,   114,    16,    17,    38,
+      74,   171,   179,   180,   217,   218,   171,   179,   180,   109,
+     113,   116,    40,   108,    73,   108,   195,   108,   195,   110,
+     198,   110,   161,   171,   101,    30,   106,   119,   202,    34,
+      35,   229,   198,   109,   102,   103,   104,   105,   113,   192,
+     193,   101,   194,   110,   202,   108,   155,   221,   185,   222,
+     232,   177,     5,   187,   232,   182,   182,   217,   118,   217,
+     217,    93,   162,   217,   217,   100,   165,   166,   164,    30,
+     107,   159,   160,   170,   171,   232,   175,    35,   156,   157,
+     158,   170,   171,   232,    73,   156,    73,   198,   111,   198,
+     200,   108,   119,   106,    65,   204,   197,   108,   109,   111,
+     107,   200,   200,   200,   198,    65,   204,   120,   214,   215,
+     111,   111,     5,    17,    18,   217,    87,   232,   117,   109,
+     113,   171,    73,   109,   113,   217,   171,   231,   232,   109,
+     231,   111,   111,   201,   119,   107,   207,   208,   232,   113,
+     111,   118,   216,   232,   109,   113,   108,   185,   222,   160,
+     171,   158,   217,   224,   224,   187,   109,   113,   195,   199,
+     216,   118,   215,   167,   173,   173,   208,    20,    74,    78,
+     209,   210,   232,     4,    19,   115,   168,   169,   178,   168,
+     109,   169,   116
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1798,14 +1819,14 @@
   switch (yyn)
     {
         case 2:
-#line 327 "asn1p_y.y"
+#line 343 "asn1p_y.y"
     {
 		*(void **)param = yyvsp[0].a_grammar;
 	}
     break;
 
   case 3:
-#line 333 "asn1p_y.y"
+#line 349 "asn1p_y.y"
     {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1814,7 +1835,7 @@
     break;
 
   case 4:
-#line 338 "asn1p_y.y"
+#line 354 "asn1p_y.y"
     {
 		yyval.a_grammar = yyvsp[-1].a_grammar;
 		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
@@ -1822,7 +1843,7 @@
     break;
 
   case 5:
-#line 359 "asn1p_y.y"
+#line 375 "asn1p_y.y"
     {
 
 		if(yyvsp[-1].a_module) {
@@ -1840,31 +1861,31 @@
     break;
 
   case 6:
-#line 380 "asn1p_y.y"
+#line 396 "asn1p_y.y"
     { yyval.a_oid = 0; }
     break;
 
   case 7:
-#line 381 "asn1p_y.y"
+#line 397 "asn1p_y.y"
     { yyval.a_oid = yyvsp[0].a_oid; }
     break;
 
   case 8:
-#line 385 "asn1p_y.y"
+#line 401 "asn1p_y.y"
     {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	}
     break;
 
   case 9:
-#line 388 "asn1p_y.y"
+#line 404 "asn1p_y.y"
     {
 		yyval.a_oid = 0;
 	}
     break;
 
   case 10:
-#line 394 "asn1p_y.y"
+#line 410 "asn1p_y.y"
     {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1874,7 +1895,7 @@
     break;
 
   case 11:
-#line 400 "asn1p_y.y"
+#line 416 "asn1p_y.y"
     {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1884,7 +1905,7 @@
     break;
 
   case 12:
-#line 409 "asn1p_y.y"
+#line 425 "asn1p_y.y"
     {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
@@ -1892,7 +1913,7 @@
     break;
 
   case 13:
-#line 413 "asn1p_y.y"
+#line 429 "asn1p_y.y"
     {		/* iso(1) */
 		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
 		yyval.a_oid_arc.number = yyvsp[-1].a_int;
@@ -1900,7 +1921,7 @@
     break;
 
   case 14:
-#line 417 "asn1p_y.y"
+#line 433 "asn1p_y.y"
     {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
@@ -1908,61 +1929,61 @@
     break;
 
   case 15:
-#line 427 "asn1p_y.y"
+#line 443 "asn1p_y.y"
     { yyval.a_module_flags = MSF_NOFLAGS; }
     break;
 
   case 16:
-#line 428 "asn1p_y.y"
+#line 444 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	}
     break;
 
   case 17:
-#line 437 "asn1p_y.y"
+#line 453 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	}
     break;
 
   case 18:
-#line 440 "asn1p_y.y"
+#line 456 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	}
     break;
 
   case 19:
-#line 449 "asn1p_y.y"
+#line 465 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	}
     break;
 
   case 20:
-#line 452 "asn1p_y.y"
+#line 468 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	}
     break;
 
   case 21:
-#line 455 "asn1p_y.y"
+#line 471 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	}
     break;
 
   case 22:
-#line 458 "asn1p_y.y"
+#line 474 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	}
     break;
 
   case 23:
-#line 462 "asn1p_y.y"
+#line 478 "asn1p_y.y"
     {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
@@ -1981,77 +2002,60 @@
     break;
 
   case 24:
-#line 483 "asn1p_y.y"
+#line 499 "asn1p_y.y"
     { yyval.a_module = 0; }
     break;
 
   case 25:
-#line 484 "asn1p_y.y"
+#line 500 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[0].a_module;
 	}
     break;
 
   case 26:
-#line 493 "asn1p_y.y"
+#line 509 "asn1p_y.y"
     {
-		yyval.a_module = yyvsp[0].a_module;
+		yyval.a_module = asn1p_module_new();
+		AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
+		AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
+		AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
 	}
     break;
 
   case 27:
-#line 496 "asn1p_y.y"
-    {
-		yyval.a_module = yyvsp[-1].a_module;
-
-		/* Behave well when one of them is skipped. */
-		if(!(yyvsp[-1].a_module)) {
-			if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
-			break;
-		}
-
-#ifdef	MY_IMPORT
-#error	MY_IMPORT DEFINED ELSEWHERE!
-#endif
-#define	MY_IMPORT(foo,field)	do {				\
-		while(TQ_FIRST(&(yyvsp[0].a_module->foo))) {			\
-			TQ_ADD(&(yyval.a_module->foo),			\
-				TQ_REMOVE(&(yyvsp[0].a_module->foo), field),	\
-				field);				\
-		}						\
-		assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0);		\
-	} while(0)
-
-		MY_IMPORT(imports, xp_next);
-		MY_IMPORT(exports, xp_next);
-		MY_IMPORT(members, next);
-#undef	MY_IMPORT
-
-	}
-    break;
-
-  case 28:
-#line 529 "asn1p_y.y"
+#line 518 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[0].a_module;
 	}
     break;
 
+  case 28:
+#line 521 "asn1p_y.y"
+    {
+		if(yyvsp[-1].a_module) {
+			yyval.a_module = yyvsp[-1].a_module;
+		} else {
+			yyval.a_module = yyvsp[0].a_module;
+			break;
+		}
+		AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
+	}
+    break;
+
   case 29:
-#line 532 "asn1p_y.y"
+#line 537 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
-		if(yyvsp[0].a_xports) {
-			TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
-		} else {
-			/* "EXPORTS ALL;" ? */
-		}
+		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
+		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
+		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
 	}
     break;
 
   case 30:
-#line 541 "asn1p_y.y"
+#line 544 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2062,7 +2066,7 @@
     break;
 
   case 31:
-#line 548 "asn1p_y.y"
+#line 557 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2073,23 +2077,12 @@
     break;
 
   case 32:
-#line 561 "asn1p_y.y"
-    {
-		yyval.a_module = asn1p_module_new();
-		checkmem(yyval.a_module);
-		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
-		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
-		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
-	}
-    break;
-
-  case 33:
-#line 569 "asn1p_y.y"
+#line 565 "asn1p_y.y"
     { asn1p_lexer_hack_push_encoding_control(); }
     break;
 
-  case 34:
-#line 570 "asn1p_y.y"
+  case 33:
+#line 566 "asn1p_y.y"
     {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -2100,8 +2093,8 @@
 	}
     break;
 
-  case 35:
-#line 582 "asn1p_y.y"
+  case 34:
+#line 578 "asn1p_y.y"
     {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -2109,7 +2102,12 @@
 	}
     break;
 
-  case 36:
+  case 35:
+#line 591 "asn1p_y.y"
+    { yyval.a_module = 0; }
+    break;
+
+  case 37:
 #line 595 "asn1p_y.y"
     {
 		if(!saved_aid && 0)
@@ -2120,14 +2118,14 @@
 	}
     break;
 
-  case 37:
+  case 38:
 #line 605 "asn1p_y.y"
     {
 		return yyerror("Empty IMPORTS list");
 	}
     break;
 
-  case 38:
+  case 39:
 #line 611 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
@@ -2136,7 +2134,7 @@
 	}
     break;
 
-  case 39:
+  case 40:
 #line 616 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[-1].a_module;
@@ -2144,17 +2142,17 @@
 	}
     break;
 
-  case 40:
+  case 41:
 #line 623 "asn1p_y.y"
     { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
     break;
 
-  case 41:
+  case 42:
 #line 624 "asn1p_y.y"
     { yyval.a_aid.oid = yyvsp[0].a_oid; }
     break;
 
-  case 42:
+  case 43:
 #line 628 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-3].a_xports;
@@ -2166,7 +2164,7 @@
 	}
     break;
 
-  case 43:
+  case 44:
 #line 639 "asn1p_y.y"
     {
 		yyval.a_xports = asn1p_xports_new();
@@ -2175,7 +2173,7 @@
 	}
     break;
 
-  case 44:
+  case 45:
 #line 644 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-2].a_xports;
@@ -2183,7 +2181,7 @@
 	}
     break;
 
-  case 45:
+  case 46:
 #line 651 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2193,7 +2191,7 @@
 	}
     break;
 
-  case 46:
+  case 47:
 #line 657 "asn1p_y.y"
     {		/* Completely equivalent to above */
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2203,7 +2201,7 @@
 	}
     break;
 
-  case 47:
+  case 48:
 #line 663 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2213,22 +2211,40 @@
 	}
     break;
 
-  case 48:
-#line 672 "asn1p_y.y"
+  case 49:
+#line 673 "asn1p_y.y"
+    { yyval.a_module = 0; }
+    break;
+
+  case 50:
+#line 674 "asn1p_y.y"
+    {
+		yyval.a_module = asn1p_module_new();
+		checkmem(yyval.a_module);
+		if(yyvsp[0].a_xports) {
+			TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
+		} else {
+			/* "EXPORTS ALL;" */
+		}
+	}
+    break;
+
+  case 51:
+#line 686 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	}
     break;
 
-  case 49:
-#line 675 "asn1p_y.y"
+  case 52:
+#line 689 "asn1p_y.y"
     {
 		yyval.a_xports = 0;
 	}
     break;
 
-  case 50:
-#line 678 "asn1p_y.y"
+  case 53:
+#line 692 "asn1p_y.y"
     {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
@@ -2236,8 +2252,8 @@
 	}
     break;
 
-  case 51:
-#line 686 "asn1p_y.y"
+  case 54:
+#line 700 "asn1p_y.y"
     {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
@@ -2245,16 +2261,16 @@
 	}
     break;
 
-  case 52:
-#line 691 "asn1p_y.y"
+  case 55:
+#line 705 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	}
     break;
 
-  case 53:
-#line 698 "asn1p_y.y"
+  case 56:
+#line 712 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2263,8 +2279,8 @@
 	}
     break;
 
-  case 54:
-#line 704 "asn1p_y.y"
+  case 57:
+#line 718 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2273,8 +2289,8 @@
 	}
     break;
 
-  case 55:
-#line 710 "asn1p_y.y"
+  case 58:
+#line 724 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2283,13 +2299,13 @@
 	}
     break;
 
-  case 56:
-#line 719 "asn1p_y.y"
+  case 59:
+#line 733 "asn1p_y.y"
     { yyval.a_constr = yyvsp[-1].a_constr; }
     break;
 
-  case 57:
-#line 722 "asn1p_y.y"
+  case 60:
+#line 736 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2299,15 +2315,15 @@
 	}
     break;
 
-  case 58:
-#line 732 "asn1p_y.y"
+  case 61:
+#line 746 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
-  case 59:
-#line 745 "asn1p_y.y"
+  case 62:
+#line 759 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2317,8 +2333,8 @@
 	}
     break;
 
-  case 60:
-#line 755 "asn1p_y.y"
+  case 63:
+#line 769 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2329,8 +2345,8 @@
 	}
     break;
 
-  case 61:
-#line 775 "asn1p_y.y"
+  case 64:
+#line 789 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2339,8 +2355,8 @@
 	}
     break;
 
-  case 62:
-#line 781 "asn1p_y.y"
+  case 65:
+#line 795 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2349,27 +2365,27 @@
 	}
     break;
 
-  case 63:
-#line 797 "asn1p_y.y"
-    {
-		yyval.a_expr = yyvsp[0].a_expr;
-		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
-		yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
-	}
-    break;
-
-  case 64:
-#line 803 "asn1p_y.y"
-    {
-		yyval.a_expr = yyvsp[0].a_expr;
-		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
-		yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
-	}
-    break;
-
-  case 65:
+  case 66:
 #line 811 "asn1p_y.y"
     {
+		yyval.a_expr = yyvsp[0].a_expr;
+		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
+		yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
+	}
+    break;
+
+  case 67:
+#line 817 "asn1p_y.y"
+    {
+		yyval.a_expr = yyvsp[0].a_expr;
+		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
+		yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
+	}
+    break;
+
+  case 68:
+#line 825 "asn1p_y.y"
+    {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
 		checkmem(yyval.a_plist);
@@ -2380,8 +2396,8 @@
 	}
     break;
 
-  case 66:
-#line 820 "asn1p_y.y"
+  case 69:
+#line 834 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -2392,62 +2408,62 @@
 	}
     break;
 
-  case 67:
-#line 831 "asn1p_y.y"
+  case 70:
+#line 845 "asn1p_y.y"
     {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	}
     break;
 
-  case 68:
-#line 835 "asn1p_y.y"
-    {
-		int ret;
-		yyval.a_parg.governor = asn1p_ref_new(yylineno);
-		ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
-		checkmem(ret == 0);
-		yyval.a_parg.argument = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 69:
-#line 842 "asn1p_y.y"
-    {
-		int ret;
-		yyval.a_parg.governor = asn1p_ref_new(yylineno);
-		ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
-		checkmem(ret == 0);
-		yyval.a_parg.argument = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 70:
+  case 71:
 #line 849 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
-		ret = asn1p_ref_add_component(yyval.a_parg.governor,
-			ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
-		checkmem(ret == 0);
-		yyval.a_parg.argument = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 71:
-#line 857 "asn1p_y.y"
-    {
-		int ret;
-		yyval.a_parg.governor = asn1p_ref_new(yylineno);
-		ret = asn1p_ref_add_component(yyval.a_parg.governor,
-			ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
+		ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
 		checkmem(ret == 0);
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	}
     break;
 
   case 72:
-#line 868 "asn1p_y.y"
+#line 856 "asn1p_y.y"
+    {
+		int ret;
+		yyval.a_parg.governor = asn1p_ref_new(yylineno);
+		ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
+		checkmem(ret == 0);
+		yyval.a_parg.argument = yyvsp[0].tv_str;
+	}
+    break;
+
+  case 73:
+#line 863 "asn1p_y.y"
+    {
+		int ret;
+		yyval.a_parg.governor = asn1p_ref_new(yylineno);
+		ret = asn1p_ref_add_component(yyval.a_parg.governor,
+			ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
+		checkmem(ret == 0);
+		yyval.a_parg.argument = yyvsp[0].tv_str;
+	}
+    break;
+
+  case 74:
+#line 871 "asn1p_y.y"
+    {
+		int ret;
+		yyval.a_parg.governor = asn1p_ref_new(yylineno);
+		ret = asn1p_ref_add_component(yyval.a_parg.governor,
+			ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
+		checkmem(ret == 0);
+		yyval.a_parg.argument = yyvsp[0].tv_str;
+	}
+    break;
+
+  case 75:
+#line 882 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2455,23 +2471,23 @@
 	}
     break;
 
-  case 73:
-#line 873 "asn1p_y.y"
+  case 76:
+#line 887 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 74:
-#line 880 "asn1p_y.y"
+  case 77:
+#line 894 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
-  case 75:
-#line 883 "asn1p_y.y"
+  case 78:
+#line 897 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2482,8 +2498,8 @@
 	}
     break;
 
-  case 76:
-#line 891 "asn1p_y.y"
+  case 79:
+#line 905 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2497,8 +2513,8 @@
 	}
     break;
 
-  case 77:
-#line 902 "asn1p_y.y"
+  case 80:
+#line 916 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->expr_type = A1TC_VALUESET;
@@ -2507,18 +2523,18 @@
 	}
     break;
 
-  case 78:
-#line 925 "asn1p_y.y"
+  case 81:
+#line 939 "asn1p_y.y"
     { yyval.a_expr = asn1p_expr_new(yylineno); }
     break;
 
-  case 79:
-#line 926 "asn1p_y.y"
+  case 82:
+#line 940 "asn1p_y.y"
     { yyval.a_expr = yyvsp[0].a_expr; }
     break;
 
-  case 80:
-#line 929 "asn1p_y.y"
+  case 83:
+#line 943 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2526,16 +2542,16 @@
 	}
     break;
 
-  case 81:
-#line 934 "asn1p_y.y"
+  case 84:
+#line 948 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 82:
-#line 941 "asn1p_y.y"
+  case 85:
+#line 955 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2545,8 +2561,8 @@
 	}
     break;
 
-  case 83:
-#line 948 "asn1p_y.y"
+  case 86:
+#line 962 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
@@ -2555,8 +2571,8 @@
 	}
     break;
 
-  case 84:
-#line 954 "asn1p_y.y"
+  case 87:
+#line 968 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2566,15 +2582,15 @@
 	}
     break;
 
-  case 85:
-#line 961 "asn1p_y.y"
+  case 88:
+#line 975 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
-  case 86:
-#line 967 "asn1p_y.y"
+  case 89:
+#line 981 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2582,16 +2598,16 @@
 	}
     break;
 
-  case 87:
-#line 972 "asn1p_y.y"
+  case 90:
+#line 986 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 88:
-#line 979 "asn1p_y.y"
+  case 91:
+#line 993 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2599,23 +2615,23 @@
 	}
     break;
 
-  case 89:
-#line 984 "asn1p_y.y"
+  case 92:
+#line 998 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
-  case 90:
-#line 987 "asn1p_y.y"
+  case 93:
+#line 1001 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		_fixup_anonymous_identifier(yyval.a_expr);
 	}
     break;
 
-  case 91:
-#line 994 "asn1p_y.y"
+  case 94:
+#line 1008 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -2625,18 +2641,18 @@
 	}
     break;
 
-  case 92:
-#line 1004 "asn1p_y.y"
+  case 95:
+#line 1018 "asn1p_y.y"
     { yyval.a_int = 0; }
     break;
 
-  case 93:
-#line 1005 "asn1p_y.y"
+  case 96:
+#line 1019 "asn1p_y.y"
     { yyval.a_int = 1; }
     break;
 
-  case 94:
-#line 1009 "asn1p_y.y"
+  case 97:
+#line 1023 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2646,16 +2662,16 @@
 	}
     break;
 
-  case 95:
-#line 1016 "asn1p_y.y"
+  case 98:
+#line 1030 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 96:
-#line 1026 "asn1p_y.y"
+  case 99:
+#line 1040 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2666,8 +2682,8 @@
 	}
     break;
 
-  case 97:
-#line 1036 "asn1p_y.y"
+  case 100:
+#line 1050 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -2679,8 +2695,8 @@
 	}
     break;
 
-  case 98:
-#line 1047 "asn1p_y.y"
+  case 101:
+#line 1061 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2691,8 +2707,8 @@
 	}
     break;
 
-  case 99:
-#line 1057 "asn1p_y.y"
+  case 102:
+#line 1071 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2704,8 +2720,8 @@
 	}
     break;
 
-  case 100:
-#line 1068 "asn1p_y.y"
+  case 103:
+#line 1082 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2716,8 +2732,8 @@
 	}
     break;
 
-  case 101:
-#line 1078 "asn1p_y.y"
+  case 104:
+#line 1092 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2729,8 +2745,8 @@
 	}
     break;
 
-  case 102:
-#line 1089 "asn1p_y.y"
+  case 105:
+#line 1103 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2742,116 +2758,116 @@
 	}
     break;
 
-  case 103:
-#line 1101 "asn1p_y.y"
+  case 106:
+#line 1115 "asn1p_y.y"
     { yyval.a_wsynt = 0; }
     break;
 
-  case 104:
-#line 1102 "asn1p_y.y"
+  case 107:
+#line 1116 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	}
     break;
 
-  case 105:
-#line 1109 "asn1p_y.y"
+  case 108:
+#line 1123 "asn1p_y.y"
     { asn1p_lexer_hack_enable_with_syntax(); }
     break;
 
-  case 106:
-#line 1111 "asn1p_y.y"
+  case 109:
+#line 1125 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	}
     break;
 
-  case 107:
-#line 1117 "asn1p_y.y"
+  case 110:
+#line 1131 "asn1p_y.y"
     {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	}
     break;
 
-  case 108:
-#line 1121 "asn1p_y.y"
+  case 111:
+#line 1135 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	}
     break;
 
-  case 109:
-#line 1128 "asn1p_y.y"
+  case 112:
+#line 1142 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
 		yyval.a_wchunk->type = WC_WHITESPACE;
 	}
     break;
 
-  case 110:
-#line 1132 "asn1p_y.y"
+  case 113:
+#line 1146 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
 	}
     break;
 
-  case 111:
-#line 1135 "asn1p_y.y"
+  case 114:
+#line 1149 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
 		yyval.a_wchunk->type = WC_FIELD;
 	}
     break;
 
-  case 112:
-#line 1139 "asn1p_y.y"
+  case 115:
+#line 1153 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
 	}
     break;
 
-  case 113:
-#line 1145 "asn1p_y.y"
-    {
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	}
-    break;
-
-  case 114:
-#line 1153 "asn1p_y.y"
-    {
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->value = yyvsp[0].a_value;
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	}
-    break;
-
-  case 115:
-#line 1162 "asn1p_y.y"
-    {
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		yyval.a_expr->value = yyvsp[0].a_value;
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	}
-    break;
-
   case 116:
-#line 1174 "asn1p_y.y"
+#line 1159 "asn1p_y.y"
+    {
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	}
+    break;
+
+  case 117:
+#line 1167 "asn1p_y.y"
+    {
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->value = yyvsp[0].a_value;
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	}
+    break;
+
+  case 118:
+#line 1176 "asn1p_y.y"
+    {
+		yyval.a_expr = asn1p_expr_new(yylineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		yyval.a_expr->value = yyvsp[0].a_value;
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	}
+    break;
+
+  case 119:
+#line 1188 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->tag = yyvsp[-2].a_tag;
@@ -2873,16 +2889,16 @@
 	}
     break;
 
-  case 117:
-#line 1196 "asn1p_y.y"
+  case 120:
+#line 1210 "asn1p_y.y"
     {
 		yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
 	}
     break;
 
-  case 118:
-#line 1203 "asn1p_y.y"
+  case 121:
+#line 1217 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
@@ -2901,15 +2917,15 @@
 	}
     break;
 
-  case 119:
-#line 1222 "asn1p_y.y"
+  case 122:
+#line 1236 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
-  case 120:
-#line 1225 "asn1p_y.y"
+  case 123:
+#line 1239 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2918,8 +2934,8 @@
 	}
     break;
 
-  case 121:
-#line 1231 "asn1p_y.y"
+  case 124:
+#line 1245 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2928,8 +2944,8 @@
 	}
     break;
 
-  case 122:
-#line 1237 "asn1p_y.y"
+  case 125:
+#line 1251 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2938,8 +2954,8 @@
 	}
     break;
 
-  case 123:
-#line 1243 "asn1p_y.y"
+  case 126:
+#line 1257 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2952,8 +2968,8 @@
 	}
     break;
 
-  case 124:
-#line 1253 "asn1p_y.y"
+  case 127:
+#line 1267 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2966,8 +2982,8 @@
 	}
     break;
 
-  case 125:
-#line 1263 "asn1p_y.y"
+  case 128:
+#line 1277 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2976,8 +2992,8 @@
 	}
     break;
 
-  case 126:
-#line 1269 "asn1p_y.y"
+  case 129:
+#line 1283 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2991,8 +3007,8 @@
 	}
     break;
 
-  case 127:
-#line 1280 "asn1p_y.y"
+  case 130:
+#line 1294 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3002,8 +3018,8 @@
 	}
     break;
 
-  case 128:
-#line 1295 "asn1p_y.y"
+  case 131:
+#line 1309 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3014,8 +3030,8 @@
 	}
     break;
 
-  case 129:
-#line 1303 "asn1p_y.y"
+  case 132:
+#line 1317 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3028,8 +3044,8 @@
 	}
     break;
 
-  case 130:
-#line 1313 "asn1p_y.y"
+  case 133:
+#line 1327 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3042,8 +3058,8 @@
 	}
     break;
 
-  case 131:
-#line 1323 "asn1p_y.y"
+  case 134:
+#line 1337 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3056,8 +3072,8 @@
 	}
     break;
 
-  case 132:
-#line 1333 "asn1p_y.y"
+  case 135:
+#line 1347 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3068,8 +3084,8 @@
 	}
     break;
 
-  case 133:
-#line 1341 "asn1p_y.y"
+  case 136:
+#line 1355 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -3091,8 +3107,8 @@
 	}
     break;
 
-  case 134:
-#line 1363 "asn1p_y.y"
+  case 137:
+#line 1377 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3103,8 +3119,8 @@
 	}
     break;
 
-  case 135:
-#line 1371 "asn1p_y.y"
+  case 138:
+#line 1385 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -3114,56 +3130,56 @@
 	}
     break;
 
-  case 137:
-#line 1384 "asn1p_y.y"
+  case 140:
+#line 1398 "asn1p_y.y"
     {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	}
     break;
 
-  case 138:
-#line 1389 "asn1p_y.y"
+  case 141:
+#line 1403 "asn1p_y.y"
     {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	}
     break;
 
-  case 139:
-#line 1398 "asn1p_y.y"
+  case 142:
+#line 1412 "asn1p_y.y"
     {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
 	}
     break;
 
-  case 140:
-#line 1402 "asn1p_y.y"
+  case 143:
+#line 1416 "asn1p_y.y"
     {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
 	}
     break;
 
-  case 141:
-#line 1406 "asn1p_y.y"
+  case 144:
+#line 1420 "asn1p_y.y"
     {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
 	}
     break;
 
-  case 142:
-#line 1413 "asn1p_y.y"
+  case 145:
+#line 1427 "asn1p_y.y"
     {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
 	}
     break;
 
-  case 143:
-#line 1433 "asn1p_y.y"
+  case 146:
+#line 1447 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -3173,8 +3189,8 @@
 	}
     break;
 
-  case 146:
-#line 1445 "asn1p_y.y"
+  case 149:
+#line 1459 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3184,13 +3200,13 @@
 	}
     break;
 
-  case 147:
-#line 1452 "asn1p_y.y"
+  case 150:
+#line 1466 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 148:
-#line 1452 "asn1p_y.y"
+  case 151:
+#line 1466 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
@@ -3198,8 +3214,8 @@
 	}
     break;
 
-  case 149:
-#line 1457 "asn1p_y.y"
+  case 152:
+#line 1471 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3207,8 +3223,8 @@
 	}
     break;
 
-  case 150:
-#line 1465 "asn1p_y.y"
+  case 153:
+#line 1479 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3216,8 +3232,8 @@
 	}
     break;
 
-  case 151:
-#line 1470 "asn1p_y.y"
+  case 154:
+#line 1484 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3225,38 +3241,38 @@
 	}
     break;
 
-  case 152:
-#line 1475 "asn1p_y.y"
+  case 155:
+#line 1489 "asn1p_y.y"
     {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	}
     break;
 
-  case 153:
-#line 1479 "asn1p_y.y"
+  case 156:
+#line 1493 "asn1p_y.y"
     {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	}
     break;
 
-  case 154:
-#line 1483 "asn1p_y.y"
+  case 157:
+#line 1497 "asn1p_y.y"
     {
 		yyval.a_value = yyval.a_value;
 	}
     break;
 
-  case 155:
-#line 1486 "asn1p_y.y"
+  case 158:
+#line 1500 "asn1p_y.y"
     {
 		yyval.a_value = yyvsp[0].a_value;
 	}
     break;
 
-  case 156:
-#line 1492 "asn1p_y.y"
+  case 159:
+#line 1506 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3270,8 +3286,8 @@
 	}
     break;
 
-  case 157:
-#line 1503 "asn1p_y.y"
+  case 160:
+#line 1517 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3288,16 +3304,16 @@
 	}
     break;
 
-  case 158:
-#line 1521 "asn1p_y.y"
+  case 161:
+#line 1535 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	}
     break;
 
-  case 159:
-#line 1525 "asn1p_y.y"
+  case 162:
+#line 1539 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
@@ -3305,8 +3321,8 @@
 	}
     break;
 
-  case 160:
-#line 1530 "asn1p_y.y"
+  case 163:
+#line 1544 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
@@ -3314,8 +3330,8 @@
 	}
     break;
 
-  case 161:
-#line 1564 "asn1p_y.y"
+  case 164:
+#line 1578 "asn1p_y.y"
     {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -3327,8 +3343,8 @@
 	}
     break;
 
-  case 162:
-#line 1573 "asn1p_y.y"
+  case 165:
+#line 1587 "asn1p_y.y"
     {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -3343,88 +3359,88 @@
 	}
     break;
 
-  case 163:
-#line 1588 "asn1p_y.y"
+  case 166:
+#line 1602 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_BOOLEAN; }
     break;
 
-  case 164:
-#line 1589 "asn1p_y.y"
+  case 167:
+#line 1603 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_NULL; }
     break;
 
-  case 165:
-#line 1590 "asn1p_y.y"
+  case 168:
+#line 1604 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_REAL; }
     break;
 
-  case 166:
-#line 1591 "asn1p_y.y"
-    { yyval.a_type = yyvsp[0].a_type; }
-    break;
-
-  case 167:
-#line 1592 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_OCTET_STRING; }
-    break;
-
-  case 168:
-#line 1593 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
-    break;
-
   case 169:
-#line 1594 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
+#line 1605 "asn1p_y.y"
+    { yyval.a_type = yyvsp[0].a_type; }
     break;
 
   case 170:
-#line 1595 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_EXTERNAL; }
+#line 1606 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_OCTET_STRING; }
     break;
 
   case 171:
-#line 1596 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
+#line 1607 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
     break;
 
   case 172:
-#line 1597 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
+#line 1608 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
     break;
 
   case 173:
-#line 1598 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_UTCTime; }
+#line 1609 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_EXTERNAL; }
     break;
 
   case 174:
-#line 1599 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_GeneralizedTime; }
+#line 1610 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
     break;
 
   case 175:
-#line 1600 "asn1p_y.y"
-    { yyval.a_type = yyvsp[0].a_type; }
+#line 1611 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
     break;
 
   case 176:
-#line 1607 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_INTEGER; }
+#line 1612 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_UTCTime; }
     break;
 
   case 177:
-#line 1608 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_ENUMERATED; }
+#line 1613 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_GeneralizedTime; }
     break;
 
   case 178:
-#line 1609 "asn1p_y.y"
-    { yyval.a_type = ASN_BASIC_BIT_STRING; }
+#line 1614 "asn1p_y.y"
+    { yyval.a_type = yyvsp[0].a_type; }
     break;
 
   case 179:
-#line 1613 "asn1p_y.y"
+#line 1621 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_INTEGER; }
+    break;
+
+  case 180:
+#line 1622 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_ENUMERATED; }
+    break;
+
+  case 181:
+#line 1623 "asn1p_y.y"
+    { yyval.a_type = ASN_BASIC_BIT_STRING; }
+    break;
+
+  case 182:
+#line 1627 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3433,8 +3449,8 @@
 	}
     break;
 
-  case 180:
-#line 1619 "asn1p_y.y"
+  case 183:
+#line 1633 "asn1p_y.y"
     {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -3447,109 +3463,109 @@
 	}
     break;
 
-  case 181:
-#line 1632 "asn1p_y.y"
+  case 184:
+#line 1646 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_BMPString; }
     break;
 
-  case 182:
-#line 1633 "asn1p_y.y"
+  case 185:
+#line 1647 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	}
     break;
 
-  case 183:
-#line 1637 "asn1p_y.y"
+  case 186:
+#line 1651 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	}
     break;
 
-  case 184:
-#line 1641 "asn1p_y.y"
+  case 187:
+#line 1655 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_IA5String; }
     break;
 
-  case 185:
-#line 1642 "asn1p_y.y"
+  case 188:
+#line 1656 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_ISO646String; }
     break;
 
-  case 186:
-#line 1643 "asn1p_y.y"
+  case 189:
+#line 1657 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_NumericString; }
     break;
 
-  case 187:
-#line 1644 "asn1p_y.y"
+  case 190:
+#line 1658 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_PrintableString; }
     break;
 
-  case 188:
-#line 1645 "asn1p_y.y"
+  case 191:
+#line 1659 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	}
     break;
 
-  case 189:
-#line 1649 "asn1p_y.y"
+  case 192:
+#line 1663 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_TeletexString; }
     break;
 
-  case 190:
-#line 1650 "asn1p_y.y"
+  case 193:
+#line 1664 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_UniversalString; }
     break;
 
-  case 191:
-#line 1651 "asn1p_y.y"
+  case 194:
+#line 1665 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_UTF8String; }
     break;
 
-  case 192:
-#line 1652 "asn1p_y.y"
+  case 195:
+#line 1666 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	}
     break;
 
-  case 193:
-#line 1656 "asn1p_y.y"
+  case 196:
+#line 1670 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_VisibleString; }
     break;
 
-  case 194:
-#line 1657 "asn1p_y.y"
+  case 197:
+#line 1671 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_ObjectDescriptor; }
     break;
 
-  case 200:
-#line 1669 "asn1p_y.y"
+  case 203:
+#line 1683 "asn1p_y.y"
     { yyval.a_constr = 0; }
     break;
 
-  case 201:
-#line 1670 "asn1p_y.y"
+  case 204:
+#line 1684 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 202:
-#line 1676 "asn1p_y.y"
+  case 205:
+#line 1690 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	}
     break;
 
-  case 203:
-#line 1679 "asn1p_y.y"
+  case 206:
+#line 1693 "asn1p_y.y"
     {
 		/*
 		 * This is a special case, for compatibility purposes.
@@ -3559,37 +3575,37 @@
 	}
     break;
 
-  case 204:
-#line 1689 "asn1p_y.y"
+  case 207:
+#line 1703 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	}
     break;
 
-  case 205:
-#line 1692 "asn1p_y.y"
+  case 208:
+#line 1706 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	}
     break;
 
-  case 206:
-#line 1698 "asn1p_y.y"
+  case 209:
+#line 1712 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		yyval.a_constr->type = ACT_EL_EXT;
 	}
     break;
 
-  case 207:
-#line 1702 "asn1p_y.y"
+  case 210:
+#line 1716 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 208:
-#line 1705 "asn1p_y.y"
+  case 211:
+#line 1719 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3598,8 +3614,8 @@
 	}
     break;
 
-  case 209:
-#line 1711 "asn1p_y.y"
+  case 212:
+#line 1725 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3610,43 +3626,43 @@
 	}
     break;
 
-  case 210:
-#line 1722 "asn1p_y.y"
+  case 213:
+#line 1736 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 211:
-#line 1725 "asn1p_y.y"
+  case 214:
+#line 1739 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
 	}
     break;
 
-  case 212:
-#line 1728 "asn1p_y.y"
+  case 215:
+#line 1742 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 213:
-#line 1731 "asn1p_y.y"
+  case 216:
+#line 1745 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 214:
-#line 1734 "asn1p_y.y"
+  case 217:
+#line 1748 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 215:
-#line 1740 "asn1p_y.y"
+  case 218:
+#line 1754 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -3657,8 +3673,8 @@
 	}
     break;
 
-  case 216:
-#line 1748 "asn1p_y.y"
+  case 219:
+#line 1762 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -3669,8 +3685,8 @@
 	}
     break;
 
-  case 217:
-#line 1756 "asn1p_y.y"
+  case 220:
+#line 1770 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3679,8 +3695,8 @@
 	}
     break;
 
-  case 218:
-#line 1762 "asn1p_y.y"
+  case 221:
+#line 1776 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3689,75 +3705,75 @@
 	}
     break;
 
-  case 219:
-#line 1768 "asn1p_y.y"
-    {
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-	}
-    break;
-
-  case 220:
-#line 1775 "asn1p_y.y"
-    {
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = asn1p_value_fromint(-123);
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-		yyval.a_constr->range_start->type = ATV_MIN;
-	}
-    break;
-
-  case 221:
-#line 1783 "asn1p_y.y"
-    {
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = asn1p_value_fromint(321);
-		yyval.a_constr->range_stop->type = ATV_MAX;
-	}
-    break;
-
   case 222:
-#line 1791 "asn1p_y.y"
+#line 1782 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = asn1p_value_fromint(-123);
-		yyval.a_constr->range_stop = asn1p_value_fromint(321);
-		yyval.a_constr->range_start->type = ATV_MIN;
-		yyval.a_constr->range_stop->type = ATV_MAX;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
 	}
     break;
 
   case 223:
-#line 1800 "asn1p_y.y"
+#line 1789 "asn1p_y.y"
     {
-		yyval.a_constr = yyvsp[0].a_constr;
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+		yyval.a_constr->range_start->type = ATV_MIN;
 	}
     break;
 
   case 224:
-#line 1803 "asn1p_y.y"
+#line 1797 "asn1p_y.y"
+    {
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	}
+    break;
+
+  case 225:
+#line 1805 "asn1p_y.y"
+    {
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_start->type = ATV_MIN;
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	}
+    break;
+
+  case 226:
+#line 1814 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 225:
-#line 1807 "asn1p_y.y"
+  case 227:
+#line 1817 "asn1p_y.y"
+    {
+		yyval.a_constr = yyvsp[0].a_constr;
+	}
+    break;
+
+  case 228:
+#line 1821 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 226:
-#line 1807 "asn1p_y.y"
+  case 229:
+#line 1821 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3768,42 +3784,42 @@
 	}
     break;
 
-  case 227:
-#line 1818 "asn1p_y.y"
+  case 230:
+#line 1832 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_RANGE; }
     break;
 
-  case 228:
-#line 1819 "asn1p_y.y"
+  case 231:
+#line 1833 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_RLRANGE; }
     break;
 
-  case 229:
-#line 1820 "asn1p_y.y"
+  case 232:
+#line 1834 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_LLRANGE; }
     break;
 
-  case 230:
-#line 1821 "asn1p_y.y"
+  case 233:
+#line 1835 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_ULRANGE; }
     break;
 
-  case 231:
-#line 1825 "asn1p_y.y"
+  case 234:
+#line 1839 "asn1p_y.y"
     {
 		yyval.a_ctype = ACT_CT_SIZE;
 	}
     break;
 
-  case 232:
-#line 1828 "asn1p_y.y"
+  case 235:
+#line 1842 "asn1p_y.y"
     {
 		yyval.a_ctype = ACT_CT_FROM;
 	}
     break;
 
-  case 233:
-#line 1834 "asn1p_y.y"
+  case 236:
+#line 1848 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3811,8 +3827,8 @@
 	}
     break;
 
-  case 234:
-#line 1839 "asn1p_y.y"
+  case 237:
+#line 1853 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
@@ -3820,8 +3836,8 @@
 	}
     break;
 
-  case 237:
-#line 1846 "asn1p_y.y"
+  case 240:
+#line 1860 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3835,8 +3851,8 @@
 	}
     break;
 
-  case 238:
-#line 1860 "asn1p_y.y"
+  case 241:
+#line 1874 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3850,36 +3866,36 @@
 	}
     break;
 
-  case 239:
-#line 1874 "asn1p_y.y"
+  case 242:
+#line 1888 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
 	}
     break;
 
-  case 240:
-#line 1877 "asn1p_y.y"
+  case 243:
+#line 1891 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	}
     break;
 
-  case 241:
-#line 1883 "asn1p_y.y"
+  case 244:
+#line 1897 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 242:
-#line 1886 "asn1p_y.y"
+  case 245:
+#line 1900 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 243:
-#line 1892 "asn1p_y.y"
+  case 246:
+#line 1906 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3888,8 +3904,8 @@
 	}
     break;
 
-  case 244:
-#line 1898 "asn1p_y.y"
+  case 247:
+#line 1912 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3900,53 +3916,53 @@
 	}
     break;
 
-  case 245:
-#line 1912 "asn1p_y.y"
+  case 248:
+#line 1926 "asn1p_y.y"
     { yyval.a_pres = ACPRES_DEFAULT; }
     break;
 
-  case 246:
-#line 1913 "asn1p_y.y"
+  case 249:
+#line 1927 "asn1p_y.y"
     { yyval.a_pres = yyvsp[0].a_pres; }
     break;
 
-  case 247:
-#line 1917 "asn1p_y.y"
+  case 250:
+#line 1931 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_PRESENT;
 	}
     break;
 
-  case 248:
-#line 1920 "asn1p_y.y"
+  case 251:
+#line 1934 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_ABSENT;
 	}
     break;
 
-  case 249:
-#line 1923 "asn1p_y.y"
+  case 252:
+#line 1937 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	}
     break;
 
-  case 250:
-#line 1929 "asn1p_y.y"
+  case 253:
+#line 1943 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 251:
-#line 1932 "asn1p_y.y"
+  case 254:
+#line 1946 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 252:
-#line 1941 "asn1p_y.y"
+  case 255:
+#line 1955 "asn1p_y.y"
     {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -3961,15 +3977,15 @@
 	}
     break;
 
-  case 253:
-#line 1956 "asn1p_y.y"
+  case 256:
+#line 1970 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	}
     break;
 
-  case 254:
-#line 1962 "asn1p_y.y"
+  case 257:
+#line 1976 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3978,8 +3994,8 @@
 	}
     break;
 
-  case 255:
-#line 1968 "asn1p_y.y"
+  case 258:
+#line 1982 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3990,8 +4006,8 @@
 	}
     break;
 
-  case 256:
-#line 1982 "asn1p_y.y"
+  case 259:
+#line 1996 "asn1p_y.y"
     {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -4005,8 +4021,8 @@
 	}
     break;
 
-  case 257:
-#line 1993 "asn1p_y.y"
+  case 260:
+#line 2007 "asn1p_y.y"
     {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -4021,15 +4037,15 @@
 	}
     break;
 
-  case 258:
-#line 2009 "asn1p_y.y"
+  case 261:
+#line 2023 "asn1p_y.y"
     {
 		yyval.tv_str = yyvsp[0].tv_str;
 	}
     break;
 
-  case 259:
-#line 2012 "asn1p_y.y"
+  case 262:
+#line 2026 "asn1p_y.y"
     {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -4041,52 +4057,52 @@
 	}
     break;
 
-  case 260:
-#line 2030 "asn1p_y.y"
+  case 263:
+#line 2044 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_NOMARK;
 		yyval.a_marker.default_value = 0;
 	}
     break;
 
-  case 261:
-#line 2034 "asn1p_y.y"
+  case 264:
+#line 2048 "asn1p_y.y"
     { yyval.a_marker = yyvsp[0].a_marker; }
     break;
 
-  case 262:
-#line 2038 "asn1p_y.y"
+  case 265:
+#line 2052 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
 		yyval.a_marker.default_value = 0;
 	}
     break;
 
-  case 263:
-#line 2042 "asn1p_y.y"
+  case 266:
+#line 2056 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_DEFAULT;
 		yyval.a_marker.default_value = yyvsp[0].a_value;
 	}
     break;
 
-  case 264:
-#line 2065 "asn1p_y.y"
+  case 267:
+#line 2079 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 	}
     break;
 
-  case 265:
-#line 2069 "asn1p_y.y"
+  case 268:
+#line 2083 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	}
     break;
 
-  case 266:
-#line 2075 "asn1p_y.y"
+  case 269:
+#line 2089 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4094,16 +4110,16 @@
 	}
     break;
 
-  case 267:
-#line 2080 "asn1p_y.y"
+  case 270:
+#line 2094 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 268:
-#line 2087 "asn1p_y.y"
+  case 271:
+#line 2101 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4113,8 +4129,8 @@
 	}
     break;
 
-  case 269:
-#line 2094 "asn1p_y.y"
+  case 272:
+#line 2108 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4125,8 +4141,8 @@
 	}
     break;
 
-  case 270:
-#line 2102 "asn1p_y.y"
+  case 273:
+#line 2116 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4137,8 +4153,8 @@
 	}
     break;
 
-  case 271:
-#line 2110 "asn1p_y.y"
+  case 274:
+#line 2124 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4148,8 +4164,8 @@
 	}
     break;
 
-  case 272:
-#line 2117 "asn1p_y.y"
+  case 275:
+#line 2131 "asn1p_y.y"
     {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -4160,123 +4176,103 @@
 	}
     break;
 
-  case 273:
-#line 2128 "asn1p_y.y"
-    {
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	}
-    break;
-
-  case 274:
-#line 2132 "asn1p_y.y"
-    {
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	}
-    break;
-
   case 276:
-#line 2140 "asn1p_y.y"
+#line 2142 "asn1p_y.y"
+    {
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	}
+    break;
+
+  case 277:
+#line 2146 "asn1p_y.y"
+    {
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	}
+    break;
+
+  case 279:
+#line 2154 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
 		checkmem(yyval.a_value);
 	}
     break;
 
-  case 277:
-#line 2171 "asn1p_y.y"
+  case 280:
+#line 2185 "asn1p_y.y"
     { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
     break;
 
-  case 278:
-#line 2172 "asn1p_y.y"
+  case 281:
+#line 2186 "asn1p_y.y"
     { yyval.a_tag = yyvsp[0].a_tag; }
     break;
 
-  case 279:
-#line 2176 "asn1p_y.y"
+  case 282:
+#line 2190 "asn1p_y.y"
     {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
 	}
     break;
 
-  case 280:
-#line 2183 "asn1p_y.y"
+  case 283:
+#line 2197 "asn1p_y.y"
     {
 		yyval.a_tag = yyvsp[-2].a_tag;
 		yyval.a_tag.tag_value = yyvsp[-1].a_int;
 	}
     break;
 
-  case 281:
-#line 2189 "asn1p_y.y"
+  case 284:
+#line 2203 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
     break;
 
-  case 282:
-#line 2190 "asn1p_y.y"
+  case 285:
+#line 2204 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_UNIVERSAL; }
     break;
 
-  case 283:
-#line 2191 "asn1p_y.y"
+  case 286:
+#line 2205 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_APPLICATION; }
     break;
 
-  case 284:
-#line 2192 "asn1p_y.y"
+  case 287:
+#line 2206 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_PRIVATE; }
     break;
 
-  case 285:
-#line 2196 "asn1p_y.y"
+  case 288:
+#line 2210 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_DEFAULT; }
     break;
 
-  case 286:
-#line 2197 "asn1p_y.y"
+  case 289:
+#line 2211 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_IMPLICIT; }
     break;
 
-  case 287:
-#line 2198 "asn1p_y.y"
+  case 290:
+#line 2212 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_EXPLICIT; }
     break;
 
-  case 288:
-#line 2202 "asn1p_y.y"
-    {
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 289:
-#line 2206 "asn1p_y.y"
-    {
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 290:
-#line 2214 "asn1p_y.y"
-    {
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	}
-    break;
-
   case 291:
-#line 2221 "asn1p_y.y"
-    { yyval.tv_str = 0; }
+#line 2216 "asn1p_y.y"
+    {
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	}
     break;
 
   case 292:
-#line 2222 "asn1p_y.y"
+#line 2220 "asn1p_y.y"
     {
+		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	}
     break;
@@ -4289,11 +4285,31 @@
 	}
     break;
 
+  case 294:
+#line 2235 "asn1p_y.y"
+    { yyval.tv_str = 0; }
+    break;
+
+  case 295:
+#line 2236 "asn1p_y.y"
+    {
+		yyval.tv_str = yyvsp[0].tv_str;
+	}
+    break;
+
+  case 296:
+#line 2242 "asn1p_y.y"
+    {
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	}
+    break;
+
 
     }
 
 /* Line 1016 of /usr/local/share/bison/yacc.c.  */
-#line 4297 "asn1p_y.c"
+#line 4313 "asn1p_y.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4512,7 +4528,7 @@
 }
 
 
-#line 2234 "asn1p_y.y"
+#line 2248 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
index 3874ede..19de334 100644
--- a/libasn1parser/asn1p_y.h
+++ b/libasn1parser/asn1p_y.h
@@ -245,7 +245,7 @@
 
 
 #ifndef YYSTYPE
-#line 72 "asn1p_y.y"
+#line 85 "asn1p_y.y"
 typedef union {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index eacab98..b252a73 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -61,6 +61,19 @@
 		}							\
 	} while(0)
 
+#ifdef	AL_IMPORT
+#error	AL_IMPORT DEFINED ELSEWHERE!
+#endif
+#define	AL_IMPORT(to,where,from,field)	do {				\
+		if(!(from)) break;					\
+		while(TQ_FIRST(&((from)->where))) {			\
+			TQ_ADD(&((to)->where),				\
+				TQ_REMOVE(&((from)->where), field),	\
+				field);					\
+		}							\
+		assert(TQ_FIRST(&((from)->where)) == 0);		\
+	} while(0)
+
 %}
 
 
@@ -223,13 +236,16 @@
  * Types defined herein.
  */
 %type	<a_grammar>		ModuleList
-%type	<a_module>		ModuleSpecification
-%type	<a_module>		ModuleSpecificationBody
-%type	<a_module>		ModuleSpecificationElement
-%type	<a_module>		optModuleSpecificationBody	/* Optional */
-%type	<a_module_flags>	optModuleSpecificationFlags
-%type	<a_module_flags>	ModuleSpecificationFlags	/* Set of FL */
-%type	<a_module_flags>	ModuleSpecificationFlag		/* Single FL */
+%type	<a_module>		ModuleDefinition
+%type	<a_module>		ModuleBody
+%type	<a_module>		AssignmentList
+%type	<a_module>		Assignment
+%type	<a_module>		optModuleBody	/* Optional */
+%type	<a_module_flags>	optModuleDefinitionFlags
+%type	<a_module_flags>	ModuleDefinitionFlags	/* Set of FL */
+%type	<a_module_flags>	ModuleDefinitionFlag		/* Single FL */
+%type	<a_module>		optImports
+%type	<a_module>		optExports
 %type	<a_module>		ImportsDefinition
 %type	<a_module>		ImportsBundleSet
 %type	<a_xports>		ImportsBundle
@@ -330,12 +346,12 @@
 	;
 
 ModuleList:
-	ModuleSpecification {
+	ModuleDefinition {
 		$$ = asn1p_new();
 		checkmem($$);
 		TQ_ADD(&($$->modules), $1, mod_next);
 	}
-	| ModuleList ModuleSpecification {
+	| ModuleList ModuleDefinition {
 		$$ = $1;
 		TQ_ADD(&($$->modules), $2, mod_next);
 	}
@@ -351,11 +367,11 @@
  * === EOF ===
  */
 
-ModuleSpecification:
+ModuleDefinition:
 	TypeRefName optObjectIdentifier TOK_DEFINITIONS
-		optModuleSpecificationFlags
+		optModuleDefinitionFlags
 		TOK_PPEQ TOK_BEGIN
-		optModuleSpecificationBody
+		optModuleBody
 		TOK_END {
 
 		if($7) {
@@ -423,9 +439,9 @@
 /*
  * Optional module flags.
  */
-optModuleSpecificationFlags:
+optModuleDefinitionFlags:
 	{ $$ = MSF_NOFLAGS; }
-	| ModuleSpecificationFlags {
+	| ModuleDefinitionFlags {
 		$$ = $1;
 	}
 	;
@@ -433,11 +449,11 @@
 /*
  * Module flags.
  */
-ModuleSpecificationFlags:
-	ModuleSpecificationFlag {
+ModuleDefinitionFlags:
+	ModuleDefinitionFlag {
 		$$ = $1;
 	}
-	| ModuleSpecificationFlags ModuleSpecificationFlag {
+	| ModuleDefinitionFlags ModuleDefinitionFlag {
 		$$ = $1 | $2;
 	}
 	;
@@ -445,7 +461,7 @@
 /*
  * Single module flag.
  */
-ModuleSpecificationFlag:
+ModuleDefinitionFlag:
 	TOK_EXPLICIT TOK_TAGS {
 		$$ = MSF_EXPLICIT_TAGS;
 	}
@@ -479,9 +495,9 @@
 /*
  * Optional module body.
  */
-optModuleSpecificationBody:
+optModuleBody:
 	{ $$ = 0; }
-	| ModuleSpecificationBody {
+	| ModuleBody {
 		$$ = $1;
 	}
 	;
@@ -489,56 +505,36 @@
 /*
  * ASN.1 Module body.
  */
-ModuleSpecificationBody:
-	ModuleSpecificationElement {
-		$$ = $1;
-	}
-	| ModuleSpecificationBody ModuleSpecificationElement {
-		$$ = $1;
-
-		/* Behave well when one of them is skipped. */
-		if(!($1)) {
-			if($2) $$ = $2;
-			break;
-		}
-
-#ifdef	MY_IMPORT
-#error	MY_IMPORT DEFINED ELSEWHERE!
-#endif
-#define	MY_IMPORT(foo,field)	do {				\
-		while(TQ_FIRST(&($2->foo))) {			\
-			TQ_ADD(&($$->foo),			\
-				TQ_REMOVE(&($2->foo), field),	\
-				field);				\
-		}						\
-		assert(TQ_FIRST(&($2->foo)) == 0);		\
-	} while(0)
-
-		MY_IMPORT(imports, xp_next);
-		MY_IMPORT(exports, xp_next);
-		MY_IMPORT(members, next);
-#undef	MY_IMPORT
-
+ModuleBody:
+	optExports optImports AssignmentList {
+		$$ = asn1p_module_new();
+		AL_IMPORT($$, exports, $1, xp_next);
+		AL_IMPORT($$, imports, $2, xp_next);
+		AL_IMPORT($$, members, $3, next);
 	}
 	;
 
+AssignmentList:
+	Assignment {
+		$$ = $1;
+	}
+	| AssignmentList Assignment {
+		if($1) {
+			$$ = $1;
+		} else {
+			$$ = $2;
+			break;
+		}
+		AL_IMPORT($$, members, $2, next);
+	}
+	;
+
+
 /*
  * One of the elements of ASN.1 module specification.
  */
-ModuleSpecificationElement:
-	ImportsDefinition {
-		$$ = $1;
-	}
-	| ExportsDefinition {
-		$$ = asn1p_module_new();
-		checkmem($$);
-		if($1) {
-			TQ_ADD(&($$->exports), $1, xp_next);
-		} else {
-			/* "EXPORTS ALL;" ? */
-		}
-	}
-	| DataTypeReference {
+Assignment:
+	DataTypeReference {
 		$$ = asn1p_module_new();
 		checkmem($$);
 		assert($1->expr_type != A1TC_INVALID);
@@ -591,6 +587,10 @@
  * IMPORTS Type1, value FROM Module { iso standard(0) } ;
  * === EOF ===
  */
+optImports:
+	{ $$ = 0; }
+	| ImportsDefinition;
+
 ImportsDefinition:
 	TOK_IMPORTS ImportsBundleSet ';' {
 		if(!saved_aid && 0)
@@ -668,6 +668,20 @@
 	}
 	;
 
+
+optExports:
+	{ $$ = 0; }
+	| ExportsDefinition {
+		$$ = asn1p_module_new();
+		checkmem($$);
+		if($1) {
+			TQ_ADD(&($$->exports), $1, xp_next);
+		} else {
+			/* "EXPORTS ALL;" */
+		}
+	}
+	;
+
 ExportsDefinition:
 	TOK_EXPORTS ExportsBody ';' {
 		$$ = $2;