From bf979156ac5b6f3966b07a0d176f93752697e2ec Mon Sep 17 00:00:00 2001
From: Lev Walkin <vlm@lionet.info>
Date: Thu, 7 Sep 2017 23:36:11 -0700
Subject: [PATCH] parse a variant of value constraint

---
 libasn1parser/asn1p_l.c                       |    2 +-
 libasn1parser/asn1p_l.l                       |    2 +-
 libasn1parser/asn1p_y.c                       | 1992 +++++++++--------
 libasn1parser/asn1p_y.y                       |   18 +-
 .../150-with-components-OK.asn1               |   25 +
 .../150-with-components-OK.asn1.-EF           |   18 +
 6 files changed, 1060 insertions(+), 997 deletions(-)
 create mode 100644 tests/tests-asn1c-compiler/150-with-components-OK.asn1
 create mode 100644 tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF

diff --git a/libasn1parser/asn1p_l.c b/libasn1parser/asn1p_l.c
index 0e638df9..d374b639 100644
--- a/libasn1parser/asn1p_l.c
+++ b/libasn1parser/asn1p_l.c
@@ -2664,7 +2664,7 @@ YY_RULE_SETUP
 #line 161 "asn1p_l.l"
 {
 			fprintf(stderr,
-				"ASN.1 Parser syncronization failure: "
+				"ASN.1 Parser synchronization failure: "
 				"\"%s\" at line %d must not appear "
 				"inside value definition\n",
 				asn1p_text, asn1p_lineno);
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
index 4317d5ba..77572163 100644
--- a/libasn1parser/asn1p_l.l
+++ b/libasn1parser/asn1p_l.l
@@ -160,7 +160,7 @@ WSP	[\t\r\v\f\n ]
 
 	"::="	{
 			fprintf(stderr,
-				"ASN.1 Parser syncronization failure: "
+				"ASN.1 Parser synchronization failure: "
 				"\"%s\" at line %d must not appear "
 				"inside value definition\n",
 				yytext, yylineno);
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index fdb6a8ff..b4df934a 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -689,16 +689,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  9
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   921
+#define YYLAST   944
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  125
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  144
+#define YYNNTS  145
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  347
+#define YYNRULES  349
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  523
+#define YYNSTATES  525
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -771,166 +771,166 @@ static const yytype_uint16 yyprhs[] =
      426,   428,   432,   434,   438,   440,   442,   444,   446,   450,
      454,   456,   461,   463,   465,   469,   470,   474,   476,   478,
      480,   482,   484,   486,   488,   490,   494,   496,   498,   500,
-     502,   505,   507,   509,   511,   514,   517,   519,   521,   524,
-     527,   529,   531,   533,   535,   537,   539,   542,   544,   549,
-     554,   560,   565,   569,   571,   573,   575,   577,   579,   581,
+     502,   505,   507,   509,   511,   513,   515,   518,   521,   523,
+     525,   528,   531,   533,   535,   537,   539,   541,   543,   546,
+     548,   553,   558,   564,   569,   573,   575,   577,   579,   581,
      583,   585,   587,   589,   591,   593,   595,   597,   599,   601,
-     603,   605,   606,   608,   609,   611,   612,   614,   616,   620,
-     622,   625,   627,   629,   631,   633,   635,   639,   645,   647,
-     651,   653,   657,   659,   663,   665,   669,   671,   675,   677,
-     679,   681,   683,   685,   687,   689,   690,   694,   697,   700,
-     703,   706,   710,   712,   714,   716,   718,   720,   722,   724,
-     726,   728,   730,   732,   734,   737,   738,   740,   744,   748,
-     750,   752,   754,   758,   764,   766,   770,   774,   775,   777,
-     779,   781,   783,   785,   787,   789,   790,   796,   799,   801,
-     804,   807,   811,   813,   815,   819,   824,   826,   830,   833,
-     837,   839,   843,   844,   846,   848,   851,   853,   857,   859,
-     861,   865,   870,   875,   877,   881,   886,   891,   893,   895,
-     899,   901,   906,   911,   913,   915,   917,   919,   921,   923,
-     924,   926,   929,   934,   935,   937,   939,   941,   942,   944,
-     946,   948,   950,   952,   953,   955,   957,   959
+     603,   605,   607,   609,   610,   612,   613,   615,   616,   618,
+     620,   624,   626,   629,   631,   633,   635,   637,   639,   643,
+     649,   651,   655,   657,   661,   663,   667,   669,   673,   675,
+     679,   681,   683,   685,   687,   689,   691,   693,   694,   698,
+     701,   704,   707,   710,   714,   716,   718,   720,   722,   724,
+     726,   728,   730,   732,   734,   736,   738,   741,   742,   744,
+     748,   752,   754,   756,   758,   762,   768,   770,   774,   778,
+     779,   781,   783,   785,   787,   789,   791,   793,   794,   800,
+     803,   805,   808,   811,   815,   817,   819,   823,   828,   830,
+     834,   837,   841,   843,   847,   848,   850,   852,   855,   857,
+     861,   863,   865,   869,   874,   879,   881,   885,   890,   895,
+     897,   899,   903,   905,   910,   915,   917,   919,   921,   923,
+     925,   927,   928,   930,   933,   938,   939,   941,   943,   945,
+     946,   948,   950,   952,   954,   956,   957,   959,   961,   963
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
      126,     0,    -1,   104,   127,    -1,   127,    -1,   128,    -1,
-     127,   128,    -1,    -1,   263,   129,   130,    42,   134,     3,
+     127,   128,    -1,    -1,   264,   129,   130,    42,   134,     3,
       29,   137,    47,    -1,    -1,   131,    -1,   112,   132,   113,
-      -1,   112,   113,    -1,   133,    -1,   132,   133,    -1,   266,
-      -1,   266,   114,    12,   115,    -1,    12,    -1,    -1,   135,
+      -1,   112,   113,    -1,   133,    -1,   132,   133,    -1,   267,
+      -1,   267,   114,    12,   115,    -1,    12,    -1,    -1,   135,
       -1,   136,    -1,   135,   136,    -1,    49,    92,    -1,    60,
       92,    -1,    28,    92,    -1,    51,    61,    -1,    18,    65,
       -1,    -1,   138,    -1,   150,   142,   139,    -1,   140,    -1,
      139,   140,    -1,   157,    -1,   187,    -1,   155,    -1,    -1,
-      46,    18,   141,    -1,   197,    -1,    -1,   143,    -1,    62,
+      46,    18,   141,    -1,   198,    -1,    -1,   143,    -1,    62,
      144,   116,    -1,    62,    54,    -1,    -1,   145,    -1,   147,
-      -1,   145,   147,    -1,    -1,   131,    -1,   148,    54,   263,
-     146,    -1,   149,    -1,   148,   117,   149,    -1,   263,    -1,
-     263,   112,   113,    -1,   266,    -1,    -1,   151,    -1,    50,
+      -1,   145,   147,    -1,    -1,   131,    -1,   148,    54,   264,
+     146,    -1,   149,    -1,   148,   117,   149,    -1,   264,    -1,
+     264,   112,   113,    -1,   267,    -1,    -1,   151,    -1,    50,
      152,   116,    -1,    50,    25,   116,    -1,    50,   116,    -1,
-     153,    -1,   152,   117,   153,    -1,   263,    -1,   263,   112,
-     113,    -1,   266,    -1,   112,   207,   113,    -1,   263,   156,
-       3,   154,    -1,   196,    -1,   181,    -1,   181,   112,   160,
-     113,    -1,   263,     3,   177,    -1,   263,     3,   167,    -1,
-     263,   112,   158,   113,     3,   177,    -1,   263,   112,   158,
+     153,    -1,   152,   117,   153,    -1,   264,    -1,   264,   112,
+     113,    -1,   267,    -1,   112,   208,   113,    -1,   264,   156,
+       3,   154,    -1,   197,    -1,   181,    -1,   181,   112,   160,
+     113,    -1,   264,     3,   177,    -1,   264,     3,   167,    -1,
+     264,   112,   158,   113,     3,   177,    -1,   264,   112,   158,
      113,     3,   167,    -1,   159,    -1,   158,   117,   159,    -1,
-     263,    -1,   263,   118,   266,    -1,   263,   118,   263,    -1,
-     194,   118,   266,    -1,   194,   118,   263,    -1,   161,    -1,
-     160,   117,   161,    -1,   177,    -1,   190,    -1,   266,    -1,
+     264,    -1,   264,   118,   267,    -1,   264,   118,   264,    -1,
+     195,   118,   267,    -1,   195,   118,   264,    -1,   161,    -1,
+     160,   117,   161,    -1,   177,    -1,   190,    -1,   267,    -1,
      154,    -1,    -1,   163,    -1,   164,    -1,   163,   117,   164,
-      -1,   163,   117,     4,   163,     5,    -1,   266,   177,   245,
-      -1,   177,   245,    -1,    38,    76,   177,    -1,   176,    -1,
-     166,    -1,   165,   117,   166,    -1,   266,   177,    -1,   176,
+      -1,   163,   117,     4,   163,     5,    -1,   267,   177,   246,
+      -1,   177,   246,    -1,    38,    76,   177,    -1,   176,    -1,
+     166,    -1,   165,   117,   166,    -1,   267,   177,    -1,   176,
       -1,   177,    -1,    36,   112,   169,   113,   171,    -1,    -1,
-      96,    -1,   170,    -1,   169,   117,   170,    -1,    19,   245,
-      -1,    20,   177,   168,   245,    -1,    20,   185,   245,    -1,
-      20,   186,   245,    -1,    19,   185,   245,    -1,    19,   177,
-     245,    -1,    19,   186,   245,    -1,    -1,   172,    -1,    -1,
+      96,    -1,   170,    -1,   169,   117,   170,    -1,    19,   246,
+      -1,    20,   177,   168,   246,    -1,    20,   185,   246,    -1,
+      20,   186,   246,    -1,    19,   185,   246,    -1,    19,   177,
+     246,    -1,    19,   186,   246,    -1,    -1,   172,    -1,    -1,
      103,    90,   112,   173,   174,   113,    -1,   175,    -1,   174,
      175,    -1,     6,    -1,    21,    -1,   184,    -1,   119,   174,
      120,    -1,   111,    -1,   111,   121,   191,    -1,   111,   121,
-     256,    -1,   258,   179,   201,    -1,    -1,   178,   180,    -1,
+     257,    -1,   259,   179,   202,    -1,    -1,   178,   180,    -1,
      156,    -1,    35,   112,   165,   113,    -1,    86,   112,   162,
-     113,    -1,    87,   112,   162,   113,    -1,    86,   202,    76,
-     265,   258,   179,    -1,    87,   202,    76,   265,   258,   179,
-      -1,    26,    -1,    26,    43,    33,   266,    -1,    64,    76,
-     181,    -1,    17,    -1,    17,   122,   263,    -1,   264,   122,
-     263,    -1,    17,   122,   266,    -1,   264,    -1,   264,   122,
+     113,    -1,    87,   112,   162,   113,    -1,    86,   203,    76,
+     266,   259,   179,    -1,    87,   203,    76,   266,   259,   179,
+      -1,    26,    -1,    26,    43,    33,   267,    -1,    64,    76,
+     181,    -1,    17,    -1,    17,   122,   264,    -1,   265,   122,
+     264,    -1,    17,   122,   267,    -1,   265,    -1,   265,   122,
      182,    -1,   183,    -1,   182,   122,   183,    -1,   184,    -1,
       19,    -1,    20,    -1,    19,    -1,   185,   122,    19,    -1,
-     185,   122,    20,    -1,    18,    -1,   266,   177,     3,   188,
-      -1,   190,    -1,   191,    -1,   266,   118,   188,    -1,    -1,
+     185,   122,    20,    -1,    18,    -1,   267,   177,     3,   188,
+      -1,   190,    -1,   191,    -1,   267,   118,   188,    -1,    -1,
      112,   189,   193,    -1,    71,    -1,    53,    -1,    94,    -1,
-       8,    -1,    10,    -1,   192,    -1,   256,    -1,   266,    -1,
-     263,   122,   266,    -1,     9,    -1,    15,    -1,    16,    -1,
-       7,    -1,   193,     7,    -1,    32,    -1,    71,    -1,    84,
-      -1,    75,    89,    -1,    73,    59,    -1,    85,    -1,    52,
-      -1,    44,    79,    -1,    34,    89,    -1,    99,    -1,    55,
-      -1,   197,    -1,   195,    -1,    66,    -1,    48,    -1,    30,
-      89,    -1,   194,    -1,    66,   112,   249,   113,    -1,    48,
-     112,   253,   113,    -1,    30,    89,   112,   251,   113,    -1,
-      22,   112,   247,   113,    -1,    22,   112,   113,    -1,    31,
-      -1,    56,    -1,    57,    -1,    58,    -1,    67,    -1,    72,
-      -1,    82,    -1,    91,    -1,    93,    -1,    98,    -1,   100,
-      -1,   101,    -1,   102,    -1,    74,    -1,   108,    -1,   109,
-      -1,   106,    -1,   107,    -1,    -1,   203,    -1,    -1,   204,
-      -1,    -1,   203,    -1,   216,    -1,   114,   205,   115,    -1,
-     203,    -1,   204,   203,    -1,   206,    -1,   234,    -1,   207,
-      -1,   111,    -1,   208,    -1,   208,   117,   111,    -1,   208,
-     117,   111,   117,   208,    -1,   209,    -1,    25,   105,   212,
-      -1,   210,    -1,   209,   198,   210,    -1,   211,    -1,   210,
-     199,   211,    -1,   212,    -1,   212,   105,   212,    -1,   213,
-      -1,   114,   208,   115,    -1,   221,    -1,   223,    -1,   215,
-      -1,   216,    -1,   225,    -1,   217,    -1,   218,    -1,    -1,
-     112,   214,   193,    -1,    54,   203,    -1,    88,   203,    -1,
-      78,     9,    -1,    78,   266,    -1,   219,   238,   220,    -1,
-     221,    -1,    69,    -1,   221,    -1,    68,    -1,    53,    -1,
-      94,    -1,   257,    -1,   192,    -1,   222,    -1,   266,    -1,
-       8,    -1,    10,    -1,   224,   177,    -1,    -1,    63,    -1,
-     103,    37,   226,    -1,   103,    38,   227,    -1,   203,    -1,
-     228,    -1,   229,    -1,   112,   230,   113,    -1,   112,   111,
-     117,   230,   113,    -1,   231,    -1,   230,   117,   231,    -1,
-     268,   200,   232,    -1,    -1,   233,    -1,    81,    -1,    23,
-      -1,    77,    -1,   235,    -1,   239,    -1,   237,    -1,    -1,
-      39,    33,   112,   236,   193,    -1,    40,   177,    -1,   110,
-      -1,   110,   123,    -1,   123,   110,    -1,   123,   110,   123,
-      -1,   240,    -1,   241,    -1,   112,   263,   113,    -1,   240,
-     112,   242,   113,    -1,   243,    -1,   242,   117,   243,    -1,
-     124,   244,    -1,   124,   122,   244,    -1,   266,    -1,   244,
-     122,   266,    -1,    -1,   246,    -1,    77,    -1,    41,   188,
-      -1,   248,    -1,   247,   117,   248,    -1,   266,    -1,   250,
-      -1,   249,   117,   250,    -1,   266,   114,   256,   115,    -1,
-     266,   114,   191,   115,    -1,   252,    -1,   251,   117,   252,
-      -1,   266,   114,    12,   115,    -1,   266,   114,   191,   115,
-      -1,   254,    -1,   255,    -1,   254,   117,   255,    -1,   266,
-      -1,   266,   114,   256,   115,    -1,   266,   114,   191,   115,
-      -1,   256,    -1,   111,    -1,    12,    -1,    13,    -1,   256,
-      -1,    14,    -1,    -1,   259,    -1,   260,   262,    -1,   119,
-     261,    12,   120,    -1,    -1,    97,    -1,    27,    -1,    83,
-      -1,    -1,    60,    -1,    49,    -1,    17,    -1,    18,    -1,
-      18,    -1,    -1,   266,    -1,    11,    -1,   266,    -1,   267,
-      -1
+       8,    -1,    10,    -1,   192,    -1,   257,    -1,   267,    -1,
+     264,   122,   267,    -1,     9,    -1,    15,    -1,    16,    -1,
+     194,    -1,   193,     7,    -1,     7,    -1,   267,    -1,    32,
+      -1,    71,    -1,    84,    -1,    75,    89,    -1,    73,    59,
+      -1,    85,    -1,    52,    -1,    44,    79,    -1,    34,    89,
+      -1,    99,    -1,    55,    -1,   198,    -1,   196,    -1,    66,
+      -1,    48,    -1,    30,    89,    -1,   195,    -1,    66,   112,
+     250,   113,    -1,    48,   112,   254,   113,    -1,    30,    89,
+     112,   252,   113,    -1,    22,   112,   248,   113,    -1,    22,
+     112,   113,    -1,    31,    -1,    56,    -1,    57,    -1,    58,
+      -1,    67,    -1,    72,    -1,    82,    -1,    91,    -1,    93,
+      -1,    98,    -1,   100,    -1,   101,    -1,   102,    -1,    74,
+      -1,   108,    -1,   109,    -1,   106,    -1,   107,    -1,    -1,
+     204,    -1,    -1,   205,    -1,    -1,   204,    -1,   217,    -1,
+     114,   206,   115,    -1,   204,    -1,   205,   204,    -1,   207,
+      -1,   235,    -1,   208,    -1,   111,    -1,   209,    -1,   209,
+     117,   111,    -1,   209,   117,   111,   117,   209,    -1,   210,
+      -1,    25,   105,   213,    -1,   211,    -1,   210,   199,   211,
+      -1,   212,    -1,   211,   200,   212,    -1,   213,    -1,   213,
+     105,   213,    -1,   214,    -1,   114,   209,   115,    -1,   222,
+      -1,   224,    -1,   216,    -1,   217,    -1,   226,    -1,   218,
+      -1,   219,    -1,    -1,   112,   215,   193,    -1,    54,   204,
+      -1,    88,   204,    -1,    78,     9,    -1,    78,   267,    -1,
+     220,   239,   221,    -1,   222,    -1,    69,    -1,   222,    -1,
+      68,    -1,    53,    -1,    94,    -1,   258,    -1,   192,    -1,
+     223,    -1,   267,    -1,     8,    -1,    10,    -1,   225,   177,
+      -1,    -1,    63,    -1,   103,    37,   227,    -1,   103,    38,
+     228,    -1,   204,    -1,   229,    -1,   230,    -1,   112,   231,
+     113,    -1,   112,   111,   117,   231,   113,    -1,   232,    -1,
+     231,   117,   232,    -1,   269,   201,   233,    -1,    -1,   234,
+      -1,    81,    -1,    23,    -1,    77,    -1,   236,    -1,   240,
+      -1,   238,    -1,    -1,    39,    33,   112,   237,   193,    -1,
+      40,   177,    -1,   110,    -1,   110,   123,    -1,   123,   110,
+      -1,   123,   110,   123,    -1,   241,    -1,   242,    -1,   112,
+     264,   113,    -1,   241,   112,   243,   113,    -1,   244,    -1,
+     243,   117,   244,    -1,   124,   245,    -1,   124,   122,   245,
+      -1,   267,    -1,   245,   122,   267,    -1,    -1,   247,    -1,
+      77,    -1,    41,   188,    -1,   249,    -1,   248,   117,   249,
+      -1,   267,    -1,   251,    -1,   250,   117,   251,    -1,   267,
+     114,   257,   115,    -1,   267,   114,   191,   115,    -1,   253,
+      -1,   252,   117,   253,    -1,   267,   114,    12,   115,    -1,
+     267,   114,   191,   115,    -1,   255,    -1,   256,    -1,   255,
+     117,   256,    -1,   267,    -1,   267,   114,   257,   115,    -1,
+     267,   114,   191,   115,    -1,   257,    -1,   111,    -1,    12,
+      -1,    13,    -1,   257,    -1,    14,    -1,    -1,   260,    -1,
+     261,   263,    -1,   119,   262,    12,   120,    -1,    -1,    97,
+      -1,    27,    -1,    83,    -1,    -1,    60,    -1,    49,    -1,
+      17,    -1,    18,    -1,    18,    -1,    -1,   267,    -1,    11,
+      -1,   267,    -1,   268,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   410,   410,   413,   419,   424,   441,   441,   470,   471,
-     475,   478,   484,   490,   499,   503,   507,   517,   518,   527,
-     530,   539,   542,   545,   548,   552,   573,   574,   583,   596,
-     599,   616,   623,   637,   645,   644,   658,   671,   672,   675,
-     685,   691,   692,   695,   700,   707,   708,   712,   723,   728,
-     735,   741,   747,   757,   758,   770,   773,   776,   784,   789,
-     796,   802,   808,   817,   820,   830,   843,   853,   873,   879,
-     895,   901,   909,   918,   929,   933,   941,   949,   957,   968,
-     973,   980,   983,   991,  1002,  1025,  1026,  1029,  1034,  1038,
-    1046,  1053,  1059,  1066,  1072,  1077,  1084,  1089,  1092,  1099,
-    1109,  1110,  1114,  1121,  1131,  1141,  1152,  1162,  1173,  1183,
-    1194,  1206,  1207,  1214,  1213,  1222,  1226,  1233,  1237,  1240,
-    1244,  1250,  1258,  1267,  1279,  1303,  1310,  1329,  1332,  1338,
-    1344,  1350,  1360,  1370,  1376,  1388,  1403,  1411,  1422,  1433,
-    1444,  1452,  1474,  1482,  1491,  1495,  1500,  1509,  1514,  1519,
-    1527,  1550,  1560,  1561,  1562,  1569,  1569,  1574,  1582,  1587,
-    1592,  1597,  1602,  1605,  1611,  1622,  1640,  1644,  1649,  1657,
-    1666,  1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,  1689,
-    1690,  1691,  1692,  1693,  1700,  1701,  1702,  1706,  1712,  1717,
-    1722,  1727,  1732,  1741,  1742,  1746,  1750,  1751,  1752,  1753,
-    1754,  1758,  1759,  1760,  1761,  1765,  1766,  1773,  1773,  1774,
-    1774,  1778,  1779,  1783,  1784,  1788,  1789,  1790,  1794,  1800,
-    1801,  1810,  1810,  1812,  1815,  1819,  1820,  1826,  1837,  1838,
-    1844,  1845,  1851,  1852,  1859,  1860,  1866,  1867,  1878,  1884,
-    1890,  1891,  1893,  1894,  1895,  1896,  1896,  1907,  1912,  1917,
-    1922,  1934,  1943,  1944,  1950,  1951,  1957,  1962,  1967,  1968,
-    1969,  1970,  1984,  1989,  1997,  2004,  2005,  2013,  2016,  2022,
-    2023,  2023,  2024,  2026,  2039,  2044,  2050,  2064,  2065,  2069,
-    2072,  2075,  2083,  2084,  2085,  2090,  2089,  2101,  2110,  2111,
-    2112,  2113,  2116,  2119,  2128,  2144,  2150,  2156,  2170,  2181,
-    2197,  2200,  2220,  2224,  2228,  2232,  2239,  2244,  2250,  2259,
-    2264,  2271,  2279,  2289,  2294,  2301,  2309,  2319,  2334,  2339,
-    2346,  2353,  2361,  2369,  2376,  2387,  2391,  2398,  2399,  2430,
-    2431,  2435,  2442,  2448,  2449,  2450,  2451,  2455,  2456,  2457,
-    2461,  2465,  2473,  2480,  2481,  2487,  2494,  2500
+       0,   411,   411,   414,   420,   425,   442,   442,   471,   472,
+     476,   479,   485,   491,   500,   504,   508,   518,   519,   528,
+     531,   540,   543,   546,   549,   553,   574,   575,   584,   597,
+     600,   617,   624,   638,   646,   645,   659,   672,   673,   676,
+     686,   692,   693,   696,   701,   708,   709,   713,   724,   729,
+     736,   742,   748,   758,   759,   771,   774,   777,   785,   790,
+     797,   803,   809,   818,   821,   831,   844,   854,   874,   880,
+     896,   902,   910,   919,   930,   934,   942,   950,   958,   969,
+     974,   981,   984,   992,  1003,  1026,  1027,  1030,  1035,  1039,
+    1047,  1054,  1060,  1067,  1073,  1078,  1085,  1090,  1093,  1100,
+    1110,  1111,  1115,  1122,  1132,  1142,  1153,  1163,  1174,  1184,
+    1195,  1207,  1208,  1215,  1214,  1223,  1227,  1234,  1238,  1241,
+    1245,  1251,  1259,  1268,  1280,  1304,  1311,  1330,  1333,  1339,
+    1345,  1351,  1361,  1371,  1377,  1389,  1404,  1412,  1423,  1434,
+    1445,  1453,  1475,  1483,  1492,  1496,  1501,  1510,  1515,  1520,
+    1528,  1551,  1561,  1562,  1563,  1570,  1570,  1575,  1583,  1588,
+    1593,  1598,  1603,  1606,  1612,  1623,  1641,  1645,  1650,  1658,
+    1667,  1682,  1683,  1689,  1690,  1691,  1692,  1693,  1694,  1695,
+    1696,  1697,  1698,  1699,  1700,  1701,  1708,  1709,  1710,  1714,
+    1720,  1725,  1730,  1735,  1740,  1749,  1750,  1754,  1758,  1759,
+    1760,  1761,  1762,  1766,  1767,  1768,  1769,  1773,  1774,  1781,
+    1781,  1782,  1782,  1786,  1787,  1791,  1792,  1796,  1797,  1798,
+    1802,  1808,  1809,  1818,  1818,  1820,  1823,  1827,  1828,  1834,
+    1845,  1846,  1852,  1853,  1859,  1860,  1867,  1868,  1874,  1875,
+    1886,  1892,  1898,  1899,  1901,  1902,  1903,  1904,  1904,  1915,
+    1920,  1925,  1930,  1942,  1951,  1952,  1958,  1959,  1965,  1970,
+    1975,  1976,  1977,  1978,  1992,  1997,  2005,  2012,  2013,  2021,
+    2024,  2030,  2031,  2031,  2032,  2034,  2047,  2052,  2058,  2072,
+    2073,  2077,  2080,  2083,  2091,  2092,  2093,  2098,  2097,  2109,
+    2118,  2119,  2120,  2121,  2124,  2127,  2136,  2152,  2158,  2164,
+    2178,  2189,  2205,  2208,  2228,  2232,  2236,  2240,  2247,  2252,
+    2258,  2267,  2272,  2279,  2287,  2297,  2302,  2309,  2317,  2327,
+    2342,  2347,  2354,  2361,  2369,  2377,  2384,  2395,  2399,  2406,
+    2407,  2438,  2439,  2443,  2450,  2456,  2457,  2458,  2459,  2463,
+    2464,  2465,  2469,  2473,  2481,  2488,  2489,  2495,  2502,  2508
 };
 #endif
 
@@ -987,28 +987,28 @@ static const char *const yytname[] =
   "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
   "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
   "ValueAssignment", "Value", "@4", "SimpleValue", "DefinedValue",
-  "RestrictedCharacterStringValue", "Opaque", "BasicTypeId",
-  "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
-  "UnionMark", "IntersectionMark", "optConstraint", "optManyConstraints",
-  "optSizeOrConstraint", "Constraint", "ManyConstraints", "ConstraintSpec",
-  "SubtypeConstraint", "ElementSetSpecs", "ElementSetSpec", "Unions",
-  "Intersections", "IntersectionElements", "Elements", "SubtypeElements",
-  "@5", "PermittedAlphabet", "SizeConstraint", "PatternConstraint",
-  "ValueRange", "LowerEndValue", "UpperEndValue", "SingleValue",
-  "BitStringValue", "ContainedSubtype", "optINCLUDES",
-  "InnerTypeConstraints", "SingleTypeConstraint",
-  "MultipleTypeConstraints", "FullSpecification", "PartialSpecification",
-  "TypeConstraints", "NamedConstraint", "optPresenceConstraint",
-  "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", "@6",
-  "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
-  "SimpleTableConstraint", "ComponentRelationConstraint", "AtNotationList",
-  "AtNotationElement", "ComponentIdList", "optMarker", "Marker",
-  "IdentifierList", "IdentifierElement", "NamedNumberList", "NamedNumber",
-  "NamedBitList", "NamedBit", "Enumerations", "UniverationList",
-  "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
-  "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
-  "ObjectClassReference", "optIdentifier", "Identifier",
-  "IdentifierAsReference", "IdentifierAsValue", 0
+  "RestrictedCharacterStringValue", "Opaque", "OpaqueFirstToken",
+  "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
+  "BasicString", "UnionMark", "IntersectionMark", "optConstraint",
+  "optManyConstraints", "optSizeOrConstraint", "Constraint",
+  "ManyConstraints", "ConstraintSpec", "SubtypeConstraint",
+  "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
+  "IntersectionElements", "Elements", "SubtypeElements", "@5",
+  "PermittedAlphabet", "SizeConstraint", "PatternConstraint", "ValueRange",
+  "LowerEndValue", "UpperEndValue", "SingleValue", "BitStringValue",
+  "ContainedSubtype", "optINCLUDES", "InnerTypeConstraints",
+  "SingleTypeConstraint", "MultipleTypeConstraints", "FullSpecification",
+  "PartialSpecification", "TypeConstraints", "NamedConstraint",
+  "optPresenceConstraint", "PresenceConstraint", "GeneralConstraint",
+  "UserDefinedConstraint", "@6", "ContentsConstraint",
+  "ConstraintRangeSpec", "TableConstraint", "SimpleTableConstraint",
+  "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
+  "ComponentIdList", "optMarker", "Marker", "IdentifierList",
+  "IdentifierElement", "NamedNumberList", "NamedNumber", "NamedBitList",
+  "NamedBit", "Enumerations", "UniverationList", "UniverationElement",
+  "SignedNumber", "RealValue", "optTag", "Tag", "TagTypeValue", "TagClass",
+  "TagPlicit", "TypeRefName", "ObjectClassReference", "optIdentifier",
+  "Identifier", "IdentifierAsReference", "IdentifierAsValue", 0
 };
 #endif
 
@@ -1053,24 +1053,24 @@ static const yytype_uint16 yyr1[] =
      181,   181,   182,   182,   183,   184,   184,   185,   185,   185,
      186,   187,   188,   188,   188,   189,   188,   188,   190,   190,
      190,   190,   190,   190,   191,   191,   192,   192,   192,   193,
-     193,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   194,   195,   195,   195,   196,   196,   196,
-     196,   196,   196,   197,   197,   197,   197,   197,   197,   197,
-     197,   197,   197,   197,   197,   197,   197,   198,   198,   199,
-     199,   200,   200,   201,   201,   202,   202,   202,   203,   204,
-     204,   205,   205,   206,   207,   207,   207,   207,   208,   208,
+     193,   194,   194,   195,   195,   195,   195,   195,   195,   195,
+     195,   195,   195,   195,   195,   195,   196,   196,   196,   197,
+     197,   197,   197,   197,   197,   198,   198,   198,   198,   198,
+     198,   198,   198,   198,   198,   198,   198,   198,   198,   199,
+     199,   200,   200,   201,   201,   202,   202,   203,   203,   203,
+     204,   205,   205,   206,   206,   207,   208,   208,   208,   208,
      209,   209,   210,   210,   211,   211,   212,   212,   213,   213,
-     213,   213,   213,   213,   213,   214,   213,   215,   216,   217,
-     217,   218,   219,   219,   220,   220,   221,   221,   221,   221,
-     221,   221,   222,   222,   223,   224,   224,   225,   225,   226,
-     227,   227,   228,   229,   230,   230,   231,   232,   232,   233,
-     233,   233,   234,   234,   234,   236,   235,   237,   238,   238,
-     238,   238,   239,   239,   240,   241,   242,   242,   243,   243,
-     244,   244,   245,   245,   246,   246,   247,   247,   248,   249,
-     249,   250,   250,   251,   251,   252,   252,   253,   254,   254,
-     255,   255,   255,   255,   255,   256,   256,   257,   257,   258,
-     258,   259,   260,   261,   261,   261,   261,   262,   262,   262,
-     263,   263,   264,   265,   265,   266,   267,   268
+     214,   214,   214,   214,   214,   214,   214,   215,   214,   216,
+     217,   218,   218,   219,   220,   220,   221,   221,   222,   222,
+     222,   222,   222,   222,   223,   223,   224,   225,   225,   226,
+     226,   227,   228,   228,   229,   230,   231,   231,   232,   233,
+     233,   234,   234,   234,   235,   235,   235,   237,   236,   238,
+     239,   239,   239,   239,   240,   240,   241,   242,   243,   243,
+     244,   244,   245,   245,   246,   246,   247,   247,   248,   248,
+     249,   250,   250,   251,   251,   252,   252,   253,   253,   254,
+     255,   255,   256,   256,   256,   256,   256,   257,   257,   258,
+     258,   259,   259,   260,   261,   262,   262,   262,   262,   263,
+     263,   263,   264,   264,   265,   266,   266,   267,   268,   269
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1093,24 +1093,24 @@ static const yytype_uint8 yyr2[] =
        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,     2,     2,     1,     1,     2,     2,
-       1,     1,     1,     1,     1,     1,     2,     1,     4,     4,
-       5,     4,     3,     1,     1,     1,     1,     1,     1,     1,
+       2,     1,     1,     1,     1,     1,     2,     2,     1,     1,
+       2,     2,     1,     1,     1,     1,     1,     1,     2,     1,
+       4,     4,     5,     4,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     1,     0,     1,     0,     1,     1,     3,     1,
-       2,     1,     1,     1,     1,     1,     3,     5,     1,     3,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     0,     3,     2,     2,     2,
-       2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     0,     1,     3,     3,     1,
-       1,     1,     3,     5,     1,     3,     3,     0,     1,     1,
-       1,     1,     1,     1,     1,     0,     5,     2,     1,     2,
-       2,     3,     1,     1,     3,     4,     1,     3,     2,     3,
-       1,     3,     0,     1,     1,     2,     1,     3,     1,     1,
-       3,     4,     4,     1,     3,     4,     4,     1,     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,     1,     1,     0,     1,     0,     1,     0,     1,     1,
+       3,     1,     2,     1,     1,     1,     1,     1,     3,     5,
+       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     0,     3,     2,
+       2,     2,     2,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     0,     1,     3,
+       3,     1,     1,     1,     3,     5,     1,     3,     3,     0,
+       1,     1,     1,     1,     1,     1,     1,     0,     5,     2,
+       1,     2,     2,     3,     1,     1,     3,     4,     1,     3,
+       2,     3,     1,     3,     0,     1,     1,     2,     1,     3,
+       1,     1,     3,     4,     4,     1,     3,     4,     4,     1,
+       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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1118,59 +1118,59 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   340,   341,     0,     0,     3,     4,     6,     2,     1,
-       5,     8,     0,     0,     9,   345,    16,    11,     0,    12,
+       0,   342,   343,     0,     0,     3,     4,     6,     2,     1,
+       5,     8,     0,     0,     9,   347,    16,    11,     0,    12,
       14,    17,    10,    13,     0,     0,     0,     0,     0,     0,
        0,    18,    19,     0,    25,    23,    21,    24,    22,     0,
       20,    15,    53,     0,     0,    27,    37,    54,     0,    57,
        0,    58,    60,    62,     7,    41,     0,    38,    56,    55,
        0,     0,    40,     0,    42,    43,     0,    48,    50,    52,
-     193,     0,   194,   195,   196,   197,   198,   206,   199,   200,
-     201,   202,   203,   204,   205,    28,    29,    33,    31,    32,
-      36,     0,   329,    59,    61,    39,    44,     0,     0,     0,
-      34,    30,   329,   136,   342,     0,     0,   171,     0,     0,
-     185,   177,   181,   184,   172,     0,     0,   173,   176,   180,
-       0,     0,    66,   187,   183,    65,   182,   140,   333,     0,
-     125,   330,   337,    45,    49,    51,    35,     0,    69,    68,
-       0,     0,   186,   179,   178,     0,     0,   175,   174,     0,
-     185,   184,     0,    72,     0,    74,     0,   329,     0,   335,
-     336,   334,     0,     0,     0,   213,   339,   338,   331,    46,
-      47,     0,   137,   139,   192,     0,   306,   308,     0,   325,
-     326,   324,     0,   317,   318,   323,   320,     0,   309,     0,
-     186,     0,     0,     0,     0,   265,    64,   160,   166,   161,
+     195,     0,   196,   197,   198,   199,   200,   208,   201,   202,
+     203,   204,   205,   206,   207,    28,    29,    33,    31,    32,
+      36,     0,   331,    59,    61,    39,    44,     0,     0,     0,
+      34,    30,   331,   136,   344,     0,     0,   173,     0,     0,
+     187,   179,   183,   186,   174,     0,     0,   175,   178,   182,
+       0,     0,    66,   189,   185,    65,   184,   140,   335,     0,
+     125,   332,   339,    45,    49,    51,    35,     0,    69,    68,
+       0,     0,   188,   181,   180,     0,     0,   177,   176,     0,
+     187,   186,     0,    72,     0,    74,     0,   331,     0,   337,
+     338,   336,     0,     0,     0,   215,   341,   340,   333,    46,
+      47,     0,   137,   139,   194,     0,   308,   310,     0,   327,
+     328,   326,     0,   319,   320,   325,   322,     0,   311,     0,
+     188,     0,     0,     0,     0,   267,    64,   160,   166,   161,
      167,   168,   158,   159,    84,     0,    79,    81,    82,   162,
      163,    83,   145,   146,   141,   142,   144,   138,     0,   157,
-     155,   151,   152,   153,     0,   164,   133,     0,     0,   215,
-     215,   127,   126,   265,   124,   219,   214,   329,   329,     0,
-     102,   191,     0,     0,   313,     0,   189,     0,     0,   188,
-       0,     0,   329,    73,    78,    77,    76,    75,   262,   263,
-     328,     0,   256,     0,   266,   253,     0,     0,   257,     0,
-     224,   245,   265,   259,     0,   225,   228,   230,   232,   234,
-     236,   240,   241,   243,   244,     0,   238,   260,   239,   329,
-     242,   327,   258,   261,    67,   329,     0,   332,     0,     0,
-       0,     0,   329,     0,   329,     0,   216,   217,   329,     0,
-       0,   329,   245,     0,   221,   223,   222,   282,   284,   283,
-     292,   293,   220,   150,   147,     0,   304,   302,   302,   302,
-     104,   303,   100,   302,   302,   111,     0,   307,   190,     0,
-       0,   319,     0,     0,   164,   310,     0,     0,    71,    70,
-     265,   247,   249,   250,   248,     0,     0,     0,     0,    63,
-       0,   207,   208,   265,   209,   210,   265,   265,   288,     0,
-       0,   264,    80,   143,   169,   156,   165,   154,     0,   121,
-       0,    94,    97,    98,   329,   135,     0,     0,    86,    87,
-      93,   302,   329,   343,     0,   343,     0,   287,     0,   218,
-       0,   305,   109,     0,   108,   110,   101,   302,   106,   107,
-       0,    99,   112,   103,   314,     0,     0,   322,   321,   312,
-     311,   229,   269,   267,     0,   268,   270,   271,   246,   237,
-     226,   231,   233,   235,   289,   290,   255,   251,   254,   170,
-     134,     0,   128,   329,    96,   329,   129,   329,    91,   302,
-     329,   344,   130,   329,   285,   294,     0,     0,   296,   148,
-     149,   105,     0,   315,   316,     0,     0,   274,   346,   347,
-     211,   265,   291,   122,   123,    95,    92,   329,    88,    90,
-     125,   125,     0,     0,   298,   300,   295,     0,   113,     0,
-     272,     0,   277,   212,   227,     0,   131,   132,   286,   299,
-       0,   297,     0,     0,   275,   280,   281,   279,   276,   278,
-      89,   301,   117,   118,     0,     0,   115,   119,   273,     0,
-     114,   116,   120
+     155,   151,   152,   153,     0,   164,   133,     0,     0,   217,
+     217,   127,   126,   267,   124,   221,   216,   331,   331,     0,
+     102,   193,     0,     0,   315,     0,   191,     0,     0,   190,
+       0,     0,   331,    73,    78,    77,    76,    75,   264,   265,
+     330,     0,   258,     0,   268,   255,     0,     0,   259,     0,
+     226,   247,   267,   261,     0,   227,   230,   232,   234,   236,
+     238,   242,   243,   245,   246,     0,   240,   262,   241,   331,
+     244,   329,   260,   263,    67,   331,     0,   334,     0,     0,
+       0,     0,   331,     0,   331,     0,   218,   219,   331,     0,
+       0,   331,   247,     0,   223,   225,   224,   284,   286,   285,
+     294,   295,   222,   150,   147,     0,   306,   304,   304,   304,
+     104,   305,   100,   304,   304,   111,     0,   309,   192,     0,
+       0,   321,     0,     0,   164,   312,     0,     0,    71,    70,
+     267,   249,   251,   252,   250,     0,     0,     0,     0,    63,
+       0,   209,   210,   267,   211,   212,   267,   267,   290,     0,
+       0,   266,    80,   143,   171,   156,   169,   172,   165,   154,
+       0,   121,     0,    94,    97,    98,   331,   135,     0,     0,
+      86,    87,    93,   304,   331,   345,     0,   345,     0,   289,
+       0,   220,     0,   307,   109,     0,   108,   110,   101,   304,
+     106,   107,     0,    99,   112,   103,   316,     0,     0,   324,
+     323,   314,   313,   231,   271,   269,     0,   270,   272,   273,
+     248,   239,   228,   233,   235,   237,   291,   292,   257,   253,
+     256,   170,   134,     0,   128,   331,    96,   331,   129,   331,
+      91,   304,   331,   346,   130,   331,   287,   296,     0,     0,
+     298,   148,   149,   105,     0,   317,   318,     0,     0,   276,
+     348,   349,   213,   267,   293,   122,   123,    95,    92,   331,
+      88,    90,   125,   125,     0,     0,   300,   302,   297,     0,
+     113,     0,   274,     0,   279,   214,   229,     0,   131,   132,
+     288,   301,     0,   299,     0,     0,   277,   282,   283,   281,
+     278,   280,    89,   303,   117,   118,     0,     0,   115,   119,
+     275,     0,   114,   116,   120
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1179,356 +1179,360 @@ static const yytype_int16 yydefgoto[] =
       -1,     4,     5,     6,    11,    13,    14,    18,    19,    30,
       31,    32,    44,    45,    85,    86,   136,    56,    57,    63,
       64,   170,    65,    66,    67,    46,    47,    50,    51,   204,
-      87,   121,    88,   152,   153,   205,   206,   387,   388,   389,
-     380,   381,   138,   407,   239,   240,   411,   412,   502,   515,
-     516,   390,   391,   164,   165,   232,   122,   214,   215,   517,
-     328,   329,    89,   221,   298,   222,   223,   273,   375,   123,
-     124,   125,   126,   363,   366,   492,   234,   305,   306,   236,
-     313,   314,   274,   275,   276,   277,   278,   279,   280,   357,
-     281,   282,   283,   284,   285,   437,   286,   287,   288,   289,
-     290,   423,   425,   426,   427,   466,   467,   508,   509,   316,
-     317,   482,   318,   370,   319,   320,   321,   457,   458,   484,
-     330,   331,   175,   176,   187,   188,   243,   244,   182,   183,
-     184,   291,   292,   130,   131,   132,   162,   168,   224,   127,
-     450,   293,   469,   470
+      87,   121,    88,   152,   153,   205,   206,   389,   390,   391,
+     382,   383,   138,   409,   239,   240,   413,   414,   504,   517,
+     518,   392,   393,   164,   165,   232,   122,   214,   215,   519,
+     328,   329,    89,   221,   298,   222,   223,   273,   375,   376,
+     123,   124,   125,   126,   363,   366,   494,   234,   305,   306,
+     236,   313,   314,   274,   275,   276,   277,   278,   279,   280,
+     357,   281,   282,   283,   284,   285,   439,   286,   287,   288,
+     289,   290,   425,   427,   428,   429,   468,   469,   510,   511,
+     316,   317,   484,   318,   370,   319,   320,   321,   459,   460,
+     486,   330,   331,   175,   176,   187,   188,   243,   244,   182,
+     183,   184,   291,   292,   130,   131,   132,   162,   168,   224,
+     127,   452,   293,   471,   472
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -351
+#define YYPACT_NINF -350
 static const yytype_int16 yypact[] =
 {
-       0,  -351,  -351,   238,    59,   238,  -351,  -351,   238,  -351,
-    -351,   -21,    26,    43,  -351,  -351,  -351,  -351,    49,  -351,
-     -18,   248,  -351,  -351,   103,    70,    65,    71,   124,   113,
-     216,   248,  -351,    82,  -351,  -351,  -351,  -351,  -351,   252,
-    -351,  -351,   122,    77,   161,  -351,   172,  -351,   170,  -351,
-      63,  -351,   177,  -351,  -351,   198,   653,  -351,  -351,  -351,
-     105,   191,  -351,   196,   105,  -351,    -3,  -351,   204,  -351,
-    -351,   301,  -351,  -351,  -351,  -351,  -351,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,  -351,   653,  -351,  -351,  -351,  -351,
-    -351,   303,   212,  -351,  -351,  -351,  -351,   238,   105,   210,
-    -351,  -351,   -10,   214,  -351,   226,   253,  -351,   261,   274,
-     270,  -351,  -351,   272,  -351,   314,   297,  -351,  -351,  -351,
-     819,   386,   278,  -351,  -351,  -351,  -351,   269,    28,   389,
-    -351,  -351,    33,   -21,  -351,  -351,  -351,   281,  -351,  -351,
-     105,    13,   283,  -351,  -351,   163,   387,  -351,  -351,   308,
-    -351,  -351,    24,  -351,   282,   288,   287,   179,   250,  -351,
-    -351,  -351,   395,   232,   742,   294,  -351,  -351,  -351,  -351,
-    -351,   275,  -351,  -351,  -351,    93,  -351,  -351,   387,  -351,
-    -351,  -351,   296,   293,  -351,  -351,   299,   104,  -351,   300,
-    -351,   408,   819,   105,   105,   516,  -351,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,  -351,   112,  -351,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,   304,  -351,  -351,  -351,   307,  -351,
-    -351,  -351,  -351,  -351,   306,   298,   390,   318,   356,   -14,
-     139,  -351,  -351,   409,  -351,  -351,   294,   205,    23,   120,
-    -351,  -351,   387,   162,  -351,   322,  -351,   163,   328,  -351,
-     387,   328,   -10,  -351,  -351,  -351,  -351,  -351,  -351,  -351,
-    -351,   332,  -351,   294,  -351,  -351,   217,   294,  -351,   292,
-    -351,  -351,   537,  -351,   325,   323,   240,   256,  -351,   334,
-    -351,  -351,  -351,  -351,  -351,   -78,   -20,  -351,  -351,   212,
-    -351,  -351,  -351,  -351,  -351,   179,   337,  -351,   434,   387,
-     232,   410,    19,   347,     8,   366,  -351,  -351,     8,   369,
-     413,   212,   238,   335,  -351,  -351,  -351,  -351,  -351,  -351,
-     339,  -351,  -351,  -351,  -351,   232,  -351,    12,   109,    12,
-    -351,  -351,   351,   109,    12,   349,   275,  -351,  -351,   387,
-     260,  -351,   338,   340,  -351,  -351,   341,   342,  -351,  -351,
-     644,  -351,  -351,  -351,  -351,   294,   346,   434,   344,  -351,
-     343,  -351,  -351,   644,  -351,  -351,   644,   644,   345,   350,
-     249,  -351,  -351,  -351,  -351,   454,  -351,  -351,   387,   352,
-     167,  -351,  -351,  -351,   212,  -351,   388,   353,   357,  -351,
-    -351,    12,   212,   387,   354,   387,   358,  -351,   362,  -351,
-     359,  -351,  -351,   348,  -351,  -351,  -351,    12,  -351,  -351,
-     379,  -351,  -351,  -351,  -351,   361,   365,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,    25,  -351,  -351,  -351,   454,  -351,
-     364,   256,  -351,  -351,  -351,   363,  -351,  -351,  -351,  -351,
-    -351,   328,  -351,    19,  -351,   212,  -351,    45,  -351,    12,
-     212,  -351,  -351,   212,  -351,  -351,     2,   192,  -351,  -351,
-    -351,  -351,   370,  -351,  -351,   367,   194,  -351,  -351,  -351,
-     294,   537,  -351,  -351,  -351,  -351,  -351,    54,  -351,  -351,
-    -351,  -351,   434,   387,   368,  -351,  -351,   359,  -351,   387,
-    -351,   387,   126,  -351,  -351,     3,  -351,  -351,   454,   368,
-     387,  -351,    51,   197,  -351,  -351,  -351,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,    51,    58,  -351,  -351,  -351,    48,
-    -351,  -351,  -351
+      28,  -350,  -350,   204,    21,   204,  -350,  -350,   204,  -350,
+    -350,   -75,    50,    14,  -350,  -350,  -350,  -350,    56,  -350,
+     -40,   177,  -350,  -350,    82,    59,    24,    52,    96,    93,
+     196,   177,  -350,    95,  -350,  -350,  -350,  -350,  -350,   179,
+    -350,  -350,    80,    78,   180,  -350,   200,  -350,   113,  -350,
+     165,  -350,   122,  -350,  -350,   198,   676,  -350,  -350,  -350,
+     214,   154,  -350,   163,   214,  -350,   -27,  -350,   185,  -350,
+    -350,   273,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,   676,  -350,  -350,  -350,  -350,
+    -350,   444,   212,  -350,  -350,  -350,  -350,   204,   214,   202,
+    -350,  -350,   -19,   219,  -350,   236,   254,  -350,   266,   284,
+     252,  -350,  -350,   255,  -350,   307,   281,  -350,  -350,  -350,
+     842,   366,   260,  -350,  -350,  -350,  -350,   249,   104,   370,
+    -350,  -350,    33,   -75,  -350,  -350,  -350,   263,  -350,  -350,
+     214,     8,   264,  -350,  -350,    47,   367,  -350,  -350,   288,
+    -350,  -350,   -16,  -350,   261,   262,   269,   232,   305,  -350,
+    -350,  -350,   374,   248,   765,   268,  -350,  -350,  -350,  -350,
+    -350,   280,  -350,  -350,  -350,    89,  -350,  -350,   367,  -350,
+    -350,  -350,   274,   271,  -350,  -350,   275,   133,  -350,   277,
+    -350,   389,   842,   214,   214,   539,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,   136,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,   272,  -350,  -350,  -350,   276,  -350,
+    -350,  -350,  -350,  -350,   278,   279,   350,   283,   322,    11,
+      25,  -350,  -350,   296,  -350,  -350,   268,   156,    60,   138,
+    -350,  -350,   367,   155,  -350,   287,  -350,    47,   206,  -350,
+     367,   206,   -19,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
+    -350,   297,  -350,   268,  -350,  -350,   182,   268,  -350,   292,
+    -350,  -350,   560,  -350,   290,   289,   225,   231,  -350,   299,
+    -350,  -350,  -350,  -350,  -350,    45,    66,  -350,  -350,   212,
+    -350,  -350,  -350,  -350,  -350,   232,   320,  -350,   267,   367,
+     248,   372,    54,   329,    77,   335,  -350,  -350,    77,   336,
+     376,   212,   204,   298,  -350,  -350,  -350,  -350,  -350,  -350,
+     303,  -350,  -350,  -350,  -350,   248,  -350,    61,     0,    61,
+    -350,  -350,   321,     0,    61,   313,   280,  -350,  -350,   367,
+     259,  -350,   304,   314,  -350,  -350,   315,   317,  -350,  -350,
+     667,  -350,  -350,  -350,  -350,   268,   306,   267,   319,  -350,
+     324,  -350,  -350,   667,  -350,  -350,   667,   667,   316,   326,
+     412,  -350,  -350,  -350,  -350,   431,  -350,  -350,  -350,  -350,
+     367,   323,   167,  -350,  -350,  -350,   212,  -350,   364,   328,
+     325,  -350,  -350,    61,   212,   367,   330,   367,   337,  -350,
+     332,  -350,   327,  -350,  -350,   333,  -350,  -350,  -350,    61,
+    -350,  -350,   358,  -350,  -350,  -350,  -350,   338,   339,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,    15,  -350,  -350,  -350,
+     431,  -350,   340,   231,  -350,  -350,  -350,   341,  -350,  -350,
+    -350,  -350,  -350,   206,  -350,    54,  -350,   212,  -350,    31,
+    -350,    61,   212,  -350,  -350,   212,  -350,  -350,    -2,   176,
+    -350,  -350,  -350,  -350,   343,  -350,  -350,   342,   181,  -350,
+    -350,  -350,   268,   560,  -350,  -350,  -350,  -350,  -350,    53,
+    -350,  -350,  -350,  -350,   267,   367,   334,  -350,  -350,   327,
+    -350,   367,  -350,   367,     6,  -350,  -350,     2,  -350,  -350,
+     431,   334,   367,  -350,    34,   201,  -350,  -350,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,    34,    30,  -350,  -350,
+    -350,    51,  -350,  -350,  -350
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -351,  -351,   482,    42,  -351,  -351,   360,  -351,   471,  -351,
-    -351,   460,  -351,  -351,  -351,   407,  -351,  -351,  -351,  -351,
-    -351,  -351,   430,  -351,   397,  -351,  -351,  -351,   436,   355,
-    -351,   336,  -351,  -351,   309,  -351,   203,   199,    22,    55,
-    -351,    61,   254,  -351,  -351,   169,  -351,  -351,  -351,    -6,
-    -297,  -299,   -91,  -351,  -109,  -351,   206,  -351,   218,  -153,
-     277,   279,  -351,  -238,  -351,  -143,  -239,  -142,  -350,   -93,
-    -351,  -351,   -27,  -351,  -351,  -351,  -351,   280,  -155,  -351,
-    -351,  -351,   285,  -270,  -351,   153,   147,  -219,  -351,  -351,
-    -351,   150,  -351,  -351,  -351,  -351,   149,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,  -351,    44,    31,  -351,  -351,  -351,
-    -351,  -351,  -351,  -351,  -351,  -351,  -351,  -351,    47,    52,
-    -294,  -351,  -351,   295,  -351,   286,  -351,   200,  -351,  -351,
-     291,  -141,  -351,  -254,  -351,  -351,  -351,  -351,    20,  -351,
-     145,   -12,  -351,  -351
+    -350,  -350,   447,   172,  -350,  -350,   344,  -350,   434,  -350,
+    -350,   427,  -350,  -350,  -350,   375,  -350,  -350,  -350,  -350,
+    -350,  -350,   399,  -350,   371,  -350,  -350,  -350,   408,   331,
+    -350,   318,  -350,  -350,   291,  -350,   175,   178,    -8,    35,
+    -350,    40,   237,  -350,  -350,   157,  -350,  -350,  -350,   -25,
+    -201,  -297,   -91,  -350,  -125,  -350,   191,  -350,   199,  -144,
+     265,   270,  -350,  -189,  -350,  -154,  -236,  -133,  -349,  -350,
+    -107,  -350,  -350,   -38,  -350,  -350,  -350,  -350,   282,  -155,
+    -350,  -350,  -350,   294,  -270,  -350,   134,   139,  -258,  -350,
+    -350,  -350,   132,  -350,  -350,  -350,  -350,   128,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,    13,    16,  -350,  -350,
+    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,    18,
+      29,  -295,  -350,  -350,   345,  -350,   286,  -350,   174,  -350,
+    -350,   285,  -141,  -350,  -269,  -350,  -350,  -350,  -350,    20,
+    -350,   123,   -12,  -350,  -350
 };
 
 /* 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, syntax error.  */
-#define YYTABLE_NINF -303
+#define YYTABLE_NINF -305
 static const yytype_int16 yytable[] =
 {
-      20,   129,   358,   382,   185,   216,    20,   428,   510,   342,
-     235,   139,   346,    15,   208,   209,   210,     1,     2,    15,
-       7,   209,   210,     7,    15,     7,   137,   154,     7,    90,
-      15,    53,   368,   402,   404,   405,    15,    15,    16,   408,
-     409,   323,   324,    69,    92,   369,   386,    10,    53,   477,
-      10,    97,    69,   325,   512,   159,    15,   512,    90,     9,
-      15,    16,   377,    52,   512,    15,   207,   212,   213,   513,
-     212,   213,   513,    92,   267,    68,    91,   212,   213,   513,
-      52,   322,   166,   386,    68,    21,    69,   401,    15,   326,
-    -252,    12,   386,   167,     1,     2,    24,   448,   304,   154,
-     233,   416,    48,  -252,     3,    91,   185,   343,   351,   128,
-     347,   160,   354,   461,    98,    33,    15,   133,    68,   379,
-     447,   -85,     1,     2,   483,   161,   174,   128,   173,   177,
-     379,   421,   498,   186,   189,    34,   465,   191,   128,    17,
-     155,   192,   128,   216,   382,   211,   327,   332,   433,   505,
-     325,   225,   208,   209,   210,   479,   379,    35,   209,   210,
-     172,   349,    22,    36,   128,   379,   245,   514,   522,   -26,
-     514,   520,    43,   128,    15,   179,   180,   514,   217,    59,
-      60,   255,   257,   209,   210,    37,   326,   197,   198,   199,
-      15,   179,   180,    49,   200,   201,   480,    41,   371,   481,
-     422,   494,   473,   506,   207,    38,   241,   507,    54,    15,
-     242,   383,   155,   254,   256,     1,     2,   249,   521,    39,
-     397,   250,   521,   323,   324,   294,   352,   267,    15,   295,
-     177,   403,   202,   335,    55,   186,   344,   336,   189,   344,
-     197,   198,   199,    15,   179,   180,   325,   200,   201,     1,
-       2,   308,    62,   233,   353,     1,     2,   258,   198,   259,
-      15,   179,   180,   260,   200,   201,    25,     1,     2,   212,
-     213,    15,   415,   203,   181,   338,    26,     1,     2,   339,
-     442,    42,   326,   211,   443,   202,    58,   376,   225,    61,
-     384,   195,   392,   444,   237,   238,   392,    27,   128,    28,
-     474,   449,   262,   219,    94,   486,   102,   490,    29,   487,
-     518,   491,    95,   225,   491,   493,    99,   436,  -302,   100,
-     103,   104,  -302,   135,   128,   105,   203,   245,   344,   355,
-     356,   128,   398,   106,    70,   107,   140,   108,   141,    15,
-     179,   180,   142,   268,   220,     1,     2,   109,   361,   362,
-     143,   110,   383,   144,   476,   111,   212,   213,   112,    72,
-      73,    74,   364,   365,   103,   104,   440,   459,   460,   113,
-      75,   496,   497,   147,   114,    76,   115,    77,   116,   307,
-     307,   451,   145,   451,   146,    78,   148,   117,   118,   156,
-     157,   158,   163,   171,    79,   178,    80,   190,    15,   195,
-     193,    81,   119,    82,    83,    84,   194,   218,   233,   246,
-     247,   252,   468,   248,   251,   120,   300,   258,   198,   259,
-      15,   179,   180,   260,   200,   201,   296,   297,   299,   344,
-     302,   384,   303,   301,   261,   392,   340,   350,   359,   367,
-     360,   374,   393,   378,   485,   395,   396,   406,   310,   311,
-     399,   400,   410,   417,   430,   418,   419,   420,   424,   429,
-     435,   439,   262,   263,   445,   392,   446,   452,   434,   462,
-     454,   485,   264,   441,   447,   455,   463,   468,   265,   468,
-     464,   471,   488,   456,   489,     8,   472,   266,   511,    23,
-     500,    40,   101,   169,    96,   134,    93,   267,   372,   495,
-     231,   253,   478,   268,   475,   413,   348,   394,   519,   385,
-     309,   196,   269,   432,   373,   333,   431,   334,   315,   438,
-     270,   312,   504,   272,   258,   198,   259,    15,   179,   180,
-     260,   200,   201,   503,   501,   499,   345,   337,   341,   414,
-     453,   261,     0,     0,     0,   258,   198,   259,    15,   179,
-     180,   260,   200,   201,     0,     0,     0,     0,     0,     0,
-       0,     0,   261,     0,     0,     0,     0,     0,     0,   262,
-     263,     0,     0,     0,     0,     0,     0,     0,     0,   264,
-       0,     0,     0,     0,     0,   265,     0,     0,     0,     0,
-     262,   263,     0,     0,   266,     0,     0,     0,     0,     0,
-     264,     0,     0,     0,   267,     0,   265,     0,     0,     0,
-     268,     0,     0,     0,     0,   266,     0,     0,     0,   269,
-       0,     0,     0,     0,     0,   267,     0,   270,   271,     0,
-     272,   268,     0,     0,     0,     0,     0,     0,     0,     0,
-     269,     0,     0,     0,     0,     0,     0,     0,     0,   271,
-       0,   272,   258,   198,   259,    15,   179,   180,   260,   200,
-     201,     0,     0,     0,    15,     0,     0,     0,     0,     0,
-       1,     2,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    70,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   262,   263,    71,
-       0,     0,     0,     0,     0,     0,     0,   264,     0,    72,
-      73,    74,     0,   265,     0,     0,     0,     0,     0,     0,
-      75,     0,   266,     0,     0,    76,     0,    77,     0,     0,
-       0,     0,   267,     0,     0,    78,     0,     0,   268,     0,
-       0,     0,     0,     0,    79,     0,    80,   269,     0,     0,
-       0,    81,     0,    82,    83,    84,   271,     0,   272,   103,
-     104,     0,     0,     0,   105,     0,     0,     0,   226,     0,
-       0,     0,   106,    70,   107,     0,   108,   227,     0,     0,
+      20,   129,   358,   208,   185,   384,    20,   512,   430,    15,
+     235,   139,   342,   154,   216,   346,   210,   137,    90,    15,
+       7,     9,   210,     7,   209,     7,    15,    97,     7,   507,
+     209,    53,   404,   406,   407,   479,   514,    12,   410,   411,
+     514,   325,    15,    69,    92,     1,     2,    90,    53,   212,
+     213,   515,    69,   212,   213,   515,    21,   514,    15,   179,
+     180,    15,    16,    52,    15,    15,   207,    15,    16,   388,
+     212,   213,   515,    92,    24,    68,    91,   326,   323,   324,
+      52,   322,   166,   508,    68,   154,    69,   509,    15,    15,
+      98,   388,   423,   167,    33,     1,     2,   191,   450,   267,
+     128,   192,   325,    48,   418,    91,   185,   343,   351,   435,
+     347,   379,   354,   267,   463,   388,    35,   133,    68,   449,
+     485,   174,   405,   304,    34,   233,   467,   -26,   173,   177,
+      43,   159,     3,   186,   189,   500,   403,   308,   326,   233,
+     155,   208,   381,   522,    36,   211,   327,   332,   384,   516,
+     128,   225,   216,   516,   210,   368,   481,    37,   181,   210,
+     172,   349,   209,    17,   381,   381,   245,   209,   369,    22,
+     516,   524,   128,   128,   323,   324,  -254,    10,   217,   128,
+      10,   255,   257,   482,   210,    38,   483,   160,   381,  -254,
+     -85,   352,   209,    15,    49,    25,   128,   325,   371,    39,
+     424,   161,   241,   496,   207,    26,   242,   475,    42,    15,
+      41,   385,   155,   254,   256,     1,     2,    15,   179,   180,
+     399,     1,     2,     1,     2,    15,    27,    54,    28,    58,
+     177,     1,     2,   326,    61,   186,   344,    29,   189,   344,
+     197,   198,   199,    15,   179,   180,   249,   200,   201,   294,
+     250,   335,    62,   295,   353,   336,   197,   198,   199,    15,
+     179,   180,    55,   200,   201,     1,     2,    94,   338,  -304,
+      15,   417,   339,  -304,   374,   128,     1,     2,    15,    95,
+     444,    59,    60,   211,   445,   202,   377,   378,   225,   488,
+     386,   100,   394,   489,   492,   446,   394,    99,   493,   237,
+     238,   202,   476,   451,   258,   198,   259,    15,   179,   180,
+     260,   200,   201,   225,   520,   135,   523,   495,   493,   219,
+     523,   261,     1,     2,   212,   213,   203,   245,   344,   355,
+     356,   128,   400,   361,   362,   310,   311,   364,   365,   212,
+     213,   140,   203,   142,   195,   377,   103,   104,   141,   262,
+     263,   128,   461,   462,   385,   143,   478,   498,   499,   264,
+     220,   307,   307,   144,   145,   265,   147,   146,   442,   156,
+     148,   158,   157,   163,   266,   171,   178,   190,    15,   193,
+     194,   195,   233,   453,   267,   453,   218,   246,   247,   248,
+     268,   251,   252,   301,   296,   302,   297,   300,   303,   269,
+     299,   340,   350,   359,   367,   380,   360,   270,   312,   398,
+     272,   395,   397,   401,   470,   402,   412,   408,   426,   419,
+     258,   198,   259,    15,   179,   180,   260,   200,   201,   420,
+     421,   344,   422,   386,   431,   432,   437,   394,   441,   436,
+     447,   448,   449,   454,   443,   457,   487,   102,   464,   456,
+       8,   458,    23,   465,   466,   490,   502,   473,    40,   491,
+     101,   103,   104,    96,   474,   262,   105,   394,    93,   134,
+     372,   497,   377,   487,   106,    70,   107,   169,   108,   470,
+     438,   470,   231,   253,   480,   477,   396,   196,   109,   348,
+     513,   521,   110,   415,   387,   373,   111,   433,   440,   112,
+      72,    73,    74,   333,   505,   434,   268,   503,   334,   506,
+     113,    75,   309,   416,   501,   114,    76,   115,    77,   116,
+     455,     0,     0,     0,     0,     0,    78,   315,   117,   118,
+       0,     0,   341,     0,     0,    79,   345,    80,     0,     0,
+       0,     0,    81,   119,    82,    83,    84,   258,   198,   259,
+      15,   179,   180,   260,   200,   201,   120,     0,     0,     0,
+       0,     0,     0,     0,   261,     0,     0,     0,   258,   198,
+     259,    15,   179,   180,   260,   200,   201,     0,     0,     0,
+       0,     0,     0,     0,     0,   261,     0,   337,     0,     0,
+       0,     0,   262,   263,     0,     0,     0,     0,     0,     0,
+       0,     0,   264,     0,     0,     0,     0,     0,   265,     0,
+       0,     0,     0,   262,   263,     0,     0,   266,     0,     0,
+       0,     0,     0,   264,     0,     0,     0,   267,     0,   265,
+       0,     0,     0,   268,     0,     0,     0,     0,   266,     0,
+       0,     0,   269,     0,     0,     0,     0,     0,   267,     0,
+     270,   271,     0,   272,   268,     0,     0,     0,     0,     0,
+       0,     0,     0,   269,     0,     0,     0,     0,     0,     0,
+       0,     0,   271,     0,   272,   258,   198,   259,    15,   179,
+     180,   260,   200,   201,     0,     0,     0,    15,     0,     0,
+       0,     0,     0,     1,     2,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    70,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     262,   263,    71,     0,     0,     0,     0,     0,     0,     0,
+     264,     0,    72,    73,    74,     0,   265,     0,     0,     0,
+       0,     0,     0,    75,     0,   266,     0,     0,    76,     0,
+      77,     0,     0,     0,     0,   267,     0,     0,    78,     0,
+       0,   268,     0,     0,     0,     0,     0,    79,     0,    80,
+     269,     0,     0,     0,    81,     0,    82,    83,    84,   271,
+       0,   272,   103,   104,     0,     0,     0,   105,     0,     0,
+       0,   226,     0,     0,     0,   106,    70,   107,     0,   108,
+     227,     0,     0,     0,     0,     0,     0,     0,     0,   109,
+       0,     0,     0,   110,     0,     0,     0,   111,     0,     0,
+     112,    72,    73,    74,     0,     0,     0,     0,     0,   228,
+       0,   113,    75,     0,     0,     0,   114,    76,   115,    77,
+     116,     0,     0,     0,     0,     0,     0,    78,     0,   117,
+     118,   229,   230,     0,     0,     0,    79,     0,    80,     1,
+       2,     0,     0,    81,   119,    82,    83,    84,     0,     0,
+       0,     0,   149,    70,   107,     0,   108,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   109,     0,     0,     0,
-     110,     0,     0,     0,   111,     0,     0,   112,    72,    73,
-      74,     0,     0,     0,     0,     0,   228,     0,   113,    75,
+     150,     0,     0,     0,   111,     0,     0,   112,    72,    73,
+      74,     0,     0,     0,     0,     0,     0,     0,   151,    75,
        0,     0,     0,   114,    76,   115,    77,   116,     0,     0,
-       0,     0,     0,     0,    78,     0,   117,   118,   229,   230,
-       0,     0,     0,    79,     0,    80,     1,     2,     0,     0,
-      81,   119,    82,    83,    84,     0,     0,     0,     0,   149,
-      70,   107,     0,   108,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   109,     0,     0,     0,   150,     0,     0,
-       0,   111,     0,     0,   112,    72,    73,    74,     0,     0,
-       0,     0,     0,     0,     0,   151,    75,     0,     0,     0,
-     114,    76,   115,    77,   116,     0,     0,     0,     0,     0,
-       0,    78,     0,   117,   118,     0,     0,     0,     0,     0,
-      79,     0,    80,     0,     0,     0,     0,    81,   119,    82,
-      83,    84
+       0,     0,     0,     0,    78,     0,   117,   118,     0,     0,
+       0,     0,     0,    79,     0,    80,     0,     0,     0,     0,
+      81,   119,    82,    83,    84
 };
 
 static const yytype_int16 yycheck[] =
 {
-      12,    92,   272,   302,   145,   158,    18,   357,     5,   248,
-     165,   102,   251,    11,   157,   157,   157,    17,    18,    11,
-       0,   163,   163,     3,    11,     5,    36,   120,     8,    56,
-      11,    43,   110,   327,   328,   329,    11,    11,    12,   333,
-     334,    18,    19,    55,    56,   123,    38,     5,    60,     4,
-       8,    54,    64,    41,     6,    27,    11,     6,    85,     0,
-      11,    12,   300,    43,     6,    11,   157,    19,    20,    21,
-      19,    20,    21,    85,    88,    55,    56,    19,    20,    21,
-      60,   236,    49,    38,    64,    42,    98,   325,    11,    77,
-     110,   112,    38,    60,    17,    18,   114,   391,   112,   192,
-     114,   340,    25,   123,   104,    85,   247,   248,   263,   119,
-     251,    83,   267,   407,   117,    12,    11,    97,    98,   111,
-     117,   113,    17,    18,   122,    97,   113,   119,   140,   141,
-     111,   350,   482,   145,   146,    65,   111,   113,   119,   113,
-     120,   117,   119,   296,   443,   157,   237,   238,   367,    23,
-      41,   163,   295,   295,   295,   449,   111,    92,   300,   300,
-     140,   252,   113,    92,   119,   111,   178,   119,   120,    47,
-     119,   113,    50,   119,    11,    12,    13,   119,   158,   116,
-     117,   193,   194,   325,   325,    61,    77,     8,     9,    10,
-      11,    12,    13,   116,    15,    16,   450,   115,   289,   453,
-     355,   471,   441,    77,   295,    92,   113,    81,    47,    11,
-     117,   302,   192,   193,   194,    17,    18,   113,   515,     3,
-     311,   117,   519,    18,    19,   113,     9,    88,    11,   117,
-     242,   122,    53,   113,    62,   247,   248,   117,   250,   251,
-       8,     9,    10,    11,    12,    13,    41,    15,    16,    17,
-      18,   112,    54,   114,   266,    17,    18,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    18,    17,    18,    19,
-      20,    11,    12,    94,   111,   113,    28,    17,    18,   117,
-     113,    29,    77,   295,   117,    53,   116,   299,   300,   112,
-     302,   112,   304,   384,    19,    20,   308,    49,   119,    51,
-     441,   392,    53,    71,   113,   113,     3,   113,    60,   117,
-     113,   117,   116,   325,   117,   470,   112,    68,   113,    18,
-      17,    18,   117,   113,   119,    22,    94,   339,   340,    37,
-      38,   119,   312,    30,    31,    32,   122,    34,   112,    11,
-      12,    13,    89,    94,   112,    17,    18,    44,   108,   109,
-      89,    48,   443,    79,   445,    52,    19,    20,    55,    56,
-      57,    58,   106,   107,    17,    18,   378,    19,    20,    66,
-      67,   480,   481,    59,    71,    72,    73,    74,    75,   229,
-     230,   393,   112,   395,   112,    82,    89,    84,    85,     3,
-     112,   122,     3,   112,    91,   112,    93,    89,    11,   112,
-     118,    98,    99,   100,   101,   102,   118,    12,   114,   113,
-     117,     3,   424,   114,   114,   112,   118,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,   122,   120,   122,   441,
-     112,   443,    76,    43,    25,   447,   114,   105,   113,   105,
-     117,     7,    76,    33,   456,    76,    33,    96,    39,    40,
-     115,   112,   103,   115,   111,   115,   115,   115,   112,   115,
-     110,     7,    53,    54,    76,   477,   113,   113,   123,    90,
-     112,   483,    63,   121,   117,   113,   115,   489,    69,   491,
-     115,   117,   112,   124,   117,     3,   123,    78,   500,    18,
-     122,    31,    85,   133,    64,    98,    60,    88,   295,   477,
-     164,   192,   447,    94,   443,   336,   252,   308,   514,   303,
-     230,   156,   103,   366,   296,   238,   363,   238,   233,   370,
-     111,   112,   491,   114,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,   489,   487,   483,   250,   242,   247,   339,
-     395,    25,    -1,    -1,    -1,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,    -1,    53,
-      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
-      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-      53,    54,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
-      63,    -1,    -1,    -1,    88,    -1,    69,    -1,    -1,    -1,
-      94,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,   103,
-      -1,    -1,    -1,    -1,    -1,    88,    -1,   111,   112,    -1,
-     114,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
-      -1,   114,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    -1,    -1,    11,    -1,    -1,    -1,    -1,    -1,
-      17,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    54,    46,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    56,
-      57,    58,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    78,    -1,    -1,    72,    -1,    74,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    82,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    91,    -1,    93,   103,    -1,    -1,
-      -1,    98,    -1,   100,   101,   102,   112,    -1,   114,    17,
-      18,    -1,    -1,    -1,    22,    -1,    -1,    -1,    26,    -1,
-      -1,    -1,    30,    31,    32,    -1,    34,    35,    -1,    -1,
+      12,    92,   272,   157,   145,   302,    18,     5,   357,    11,
+     165,   102,   248,   120,   158,   251,   157,    36,    56,    11,
+       0,     0,   163,     3,   157,     5,    11,    54,     8,    23,
+     163,    43,   327,   328,   329,     4,     6,   112,   333,   334,
+       6,    41,    11,    55,    56,    17,    18,    85,    60,    19,
+      20,    21,    64,    19,    20,    21,    42,     6,    11,    12,
+      13,    11,    12,    43,    11,    11,   157,    11,    12,    38,
+      19,    20,    21,    85,   114,    55,    56,    77,    18,    19,
+      60,   236,    49,    77,    64,   192,    98,    81,    11,    11,
+     117,    38,   350,    60,    12,    17,    18,   113,   393,    88,
+     119,   117,    41,    25,   340,    85,   247,   248,   263,   367,
+     251,   300,   267,    88,   409,    38,    92,    97,    98,   117,
+     122,   113,   122,   112,    65,   114,   111,    47,   140,   141,
+      50,    27,   104,   145,   146,   484,   325,   112,    77,   114,
+     120,   295,   111,   113,    92,   157,   237,   238,   445,   119,
+     119,   163,   296,   119,   295,   110,   451,    61,   111,   300,
+     140,   252,   295,   113,   111,   111,   178,   300,   123,   113,
+     119,   120,   119,   119,    18,    19,   110,     5,   158,   119,
+       8,   193,   194,   452,   325,    92,   455,    83,   111,   123,
+     113,     9,   325,    11,   116,    18,   119,    41,   289,     3,
+     355,    97,   113,   473,   295,    28,   117,   443,    29,    11,
+     115,   302,   192,   193,   194,    17,    18,    11,    12,    13,
+     311,    17,    18,    17,    18,    11,    49,    47,    51,   116,
+     242,    17,    18,    77,   112,   247,   248,    60,   250,   251,
+       8,     9,    10,    11,    12,    13,   113,    15,    16,   113,
+     117,   113,    54,   117,   266,   117,     8,     9,    10,    11,
+      12,    13,    62,    15,    16,    17,    18,   113,   113,   113,
+      11,    12,   117,   117,     7,   119,    17,    18,    11,   116,
+     113,   116,   117,   295,   117,    53,   298,   299,   300,   113,
+     302,    18,   304,   117,   113,   386,   308,   112,   117,    19,
+      20,    53,   443,   394,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,   325,   113,   113,   517,   472,   117,    71,
+     521,    25,    17,    18,    19,    20,    94,   339,   340,    37,
+      38,   119,   312,   108,   109,    39,    40,   106,   107,    19,
+      20,   122,    94,    89,   112,   357,    17,    18,   112,    53,
+      54,   119,    19,    20,   445,    89,   447,   482,   483,    63,
+     112,   229,   230,    79,   112,    69,    59,   112,   380,     3,
+      89,   122,   112,     3,    78,   112,   112,    89,    11,   118,
+     118,   112,   114,   395,    88,   397,    12,   113,   117,   114,
+      94,   114,     3,    43,   122,   112,   120,   118,    76,   103,
+     122,   114,   105,   113,   105,    33,   117,   111,   112,    33,
+     114,    76,    76,   115,   426,   112,   103,    96,   112,   115,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,   115,
+     115,   443,   115,   445,   115,   111,   110,   449,     7,   123,
+      76,   113,   117,   113,   121,   113,   458,     3,    90,   112,
+       3,   124,    18,   115,   115,   112,   122,   117,    31,   117,
+      85,    17,    18,    64,   123,    53,    22,   479,    60,    98,
+     295,   479,   484,   485,    30,    31,    32,   133,    34,   491,
+      68,   493,   164,   192,   449,   445,   308,   156,    44,   252,
+     502,   516,    48,   336,   303,   296,    52,   363,   370,    55,
+      56,    57,    58,   238,   491,   366,    94,   489,   238,   493,
+      66,    67,   230,   339,   485,    71,    72,    73,    74,    75,
+     397,    -1,    -1,    -1,    -1,    -1,    82,   233,    84,    85,
+      -1,    -1,   247,    -1,    -1,    91,   250,    93,    -1,    -1,
+      -1,    -1,    98,    99,   100,   101,   102,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,   112,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    -1,   242,    -1,    -1,
+      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,
+      -1,    -1,    -1,    53,    54,    -1,    -1,    78,    -1,    -1,
+      -1,    -1,    -1,    63,    -1,    -1,    -1,    88,    -1,    69,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    78,    -1,
+      -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+     111,   112,    -1,   114,    94,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   112,    -1,   114,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    -1,    -1,    11,    -1,    -1,
+      -1,    -1,    -1,    17,    18,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      53,    54,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      63,    -1,    56,    57,    58,    -1,    69,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    78,    -1,    -1,    72,    -1,
+      74,    -1,    -1,    -1,    -1,    88,    -1,    -1,    82,    -1,
+      -1,    94,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,
+     103,    -1,    -1,    -1,    98,    -1,   100,   101,   102,   112,
+      -1,   114,    17,    18,    -1,    -1,    -1,    22,    -1,    -1,
+      -1,    26,    -1,    -1,    -1,    30,    31,    32,    -1,    34,
+      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
+      -1,    -1,    -1,    48,    -1,    -1,    -1,    52,    -1,    -1,
+      55,    56,    57,    58,    -1,    -1,    -1,    -1,    -1,    64,
+      -1,    66,    67,    -1,    -1,    -1,    71,    72,    73,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    84,
+      85,    86,    87,    -1,    -1,    -1,    91,    -1,    93,    17,
+      18,    -1,    -1,    98,    99,   100,   101,   102,    -1,    -1,
+      -1,    -1,    30,    31,    32,    -1,    34,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,
       48,    -1,    -1,    -1,    52,    -1,    -1,    55,    56,    57,
-      58,    -1,    -1,    -1,    -1,    -1,    64,    -1,    66,    67,
+      58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
       -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    -1,    84,    85,    86,    87,
-      -1,    -1,    -1,    91,    -1,    93,    17,    18,    -1,    -1,
-      98,    99,   100,   101,   102,    -1,    -1,    -1,    -1,    30,
-      31,    32,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    -1,    -1,    -1,    48,    -1,    -1,
-      -1,    52,    -1,    -1,    55,    56,    57,    58,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-      71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,
-      91,    -1,    93,    -1,    -1,    -1,    -1,    98,    99,   100,
-     101,   102
+      -1,    -1,    -1,    -1,    82,    -1,    84,    85,    -1,    -1,
+      -1,    -1,    -1,    91,    -1,    93,    -1,    -1,    -1,    -1,
+      98,    99,   100,   101,   102
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,    17,    18,   104,   126,   127,   128,   263,   127,     0,
+       0,    17,    18,   104,   126,   127,   128,   264,   127,     0,
      128,   129,   112,   130,   131,    11,    12,   113,   132,   133,
-     266,    42,   113,   133,   114,    18,    28,    49,    51,    60,
+     267,    42,   113,   133,   114,    18,    28,    49,    51,    60,
      134,   135,   136,    12,    65,    92,    92,    61,    92,     3,
      136,   115,    29,    50,   137,   138,   150,   151,    25,   116,
-     152,   153,   263,   266,    47,    62,   142,   143,   116,   116,
-     117,   112,    54,   144,   145,   147,   148,   149,   263,   266,
+     152,   153,   264,   267,    47,    62,   142,   143,   116,   116,
+     117,   112,    54,   144,   145,   147,   148,   149,   264,   267,
       31,    46,    56,    57,    58,    67,    72,    74,    82,    91,
       93,    98,   100,   101,   102,   139,   140,   155,   157,   187,
-     197,   263,   266,   153,   113,   116,   147,    54,   117,   112,
+     198,   264,   267,   153,   113,   116,   147,    54,   117,   112,
       18,   140,     3,    17,    18,    22,    30,    32,    34,    44,
       48,    52,    55,    66,    71,    73,    75,    84,    85,    99,
-     112,   156,   181,   194,   195,   196,   197,   264,   119,   177,
-     258,   259,   260,   263,   149,   113,   141,    36,   167,   177,
+     112,   156,   181,   195,   196,   197,   198,   265,   119,   177,
+     259,   260,   261,   264,   149,   113,   141,    36,   167,   177,
      122,   112,    89,    89,    79,   112,   112,    59,    89,    30,
-      48,    66,   158,   159,   194,   263,     3,   112,   122,    27,
-      83,    97,   261,     3,   178,   179,    49,    60,   262,   131,
-     146,   112,   263,   266,   113,   247,   248,   266,   112,    12,
-      13,   111,   253,   254,   255,   256,   266,   249,   250,   266,
+      48,    66,   158,   159,   195,   264,     3,   112,   122,    27,
+      83,    97,   262,     3,   178,   179,    49,    60,   263,   131,
+     146,   112,   264,   267,   113,   248,   249,   267,   112,    12,
+      13,   111,   254,   255,   256,   257,   267,   250,   251,   267,
       89,   113,   117,   118,   118,   112,   154,     8,     9,    10,
       15,    16,    53,    94,   154,   160,   161,   177,   190,   192,
-     256,   266,    19,    20,   182,   183,   184,   263,    12,    71,
-     112,   188,   190,   191,   263,   266,    26,    35,    64,    86,
-      87,   156,   180,   114,   201,   203,   204,    19,    20,   169,
-     170,   113,   117,   251,   252,   266,   113,   117,   114,   113,
-     117,   114,     3,   159,   263,   266,   263,   266,     8,    10,
+     257,   267,    19,    20,   182,   183,   184,   264,    12,    71,
+     112,   188,   190,   191,   264,   267,    26,    35,    64,    86,
+      87,   156,   180,   114,   202,   204,   205,    19,    20,   169,
+     170,   113,   117,   252,   253,   267,   113,   117,   114,   113,
+     117,   114,     3,   159,   264,   267,   264,   267,     8,    10,
       14,    25,    53,    54,    63,    69,    78,    88,    94,   103,
-     111,   112,   114,   192,   207,   208,   209,   210,   211,   212,
-     213,   215,   216,   217,   218,   219,   221,   222,   223,   224,
-     225,   256,   257,   266,   113,   117,   122,   120,   189,   122,
-     118,    43,   112,    76,   112,   202,   203,   216,   112,   202,
-      39,    40,   112,   205,   206,   207,   234,   235,   237,   239,
-     240,   241,   203,    18,    19,    41,    77,   177,   185,   186,
-     245,   246,   177,   185,   186,   113,   117,   248,   113,   117,
-     114,   255,   191,   256,   266,   250,   191,   256,   167,   177,
-     105,   203,     9,   266,   203,    37,    38,   214,   208,   113,
-     117,   108,   109,   198,   106,   107,   199,   105,   110,   123,
-     238,   177,   161,   183,     7,   193,   266,   188,    33,   111,
-     165,   166,   176,   177,   266,   181,    38,   162,   163,   164,
-     176,   177,   266,    76,   162,    76,    33,   177,   263,   115,
-     112,   188,   245,   122,   245,   245,    96,   168,   245,   245,
-     103,   171,   172,   170,   252,    12,   191,   115,   115,   115,
-     115,   212,   203,   226,   112,   227,   228,   229,   193,   115,
-     111,   210,   211,   212,   123,   110,    68,   220,   221,     7,
-     266,   121,   113,   117,   177,    76,   113,   117,   245,   177,
-     265,   266,   113,   265,   112,   113,   124,   242,   243,    19,
-      20,   245,    90,   115,   115,   111,   230,   231,   266,   267,
-     268,   117,   123,   191,   256,   166,   177,     4,   164,   245,
-     258,   258,   236,   122,   244,   266,   113,   117,   112,   117,
-     113,   117,   200,   203,   208,   163,   179,   179,   193,   244,
-     122,   243,   173,   230,   231,    23,    77,    81,   232,   233,
-       5,   266,     6,    21,   119,   174,   175,   184,   113,   174,
-     113,   175,   120
+     111,   112,   114,   192,   208,   209,   210,   211,   212,   213,
+     214,   216,   217,   218,   219,   220,   222,   223,   224,   225,
+     226,   257,   258,   267,   113,   117,   122,   120,   189,   122,
+     118,    43,   112,    76,   112,   203,   204,   217,   112,   203,
+      39,    40,   112,   206,   207,   208,   235,   236,   238,   240,
+     241,   242,   204,    18,    19,    41,    77,   177,   185,   186,
+     246,   247,   177,   185,   186,   113,   117,   249,   113,   117,
+     114,   256,   191,   257,   267,   251,   191,   257,   167,   177,
+     105,   204,     9,   267,   204,    37,    38,   215,   209,   113,
+     117,   108,   109,   199,   106,   107,   200,   105,   110,   123,
+     239,   177,   161,   183,     7,   193,   194,   267,   267,   188,
+      33,   111,   165,   166,   176,   177,   267,   181,    38,   162,
+     163,   164,   176,   177,   267,    76,   162,    76,    33,   177,
+     264,   115,   112,   188,   246,   122,   246,   246,    96,   168,
+     246,   246,   103,   171,   172,   170,   253,    12,   191,   115,
+     115,   115,   115,   213,   204,   227,   112,   228,   229,   230,
+     193,   115,   111,   211,   212,   213,   123,   110,    68,   221,
+     222,     7,   267,   121,   113,   117,   177,    76,   113,   117,
+     246,   177,   266,   267,   113,   266,   112,   113,   124,   243,
+     244,    19,    20,   246,    90,   115,   115,   111,   231,   232,
+     267,   268,   269,   117,   123,   191,   257,   166,   177,     4,
+     164,   246,   259,   259,   237,   122,   245,   267,   113,   117,
+     112,   117,   113,   117,   201,   204,   209,   163,   179,   179,
+     193,   245,   122,   244,   173,   231,   232,    23,    77,    81,
+     233,   234,     5,   267,     6,    21,   119,   174,   175,   184,
+     113,   174,   113,   175,   120
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2343,21 +2347,21 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 410 "asn1p_y.y"
+#line 411 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(2) - (2)].a_grammar);
 	}
     break;
 
   case 3:
-#line 413 "asn1p_y.y"
+#line 414 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(1) - (1)].a_grammar);
 	}
     break;
 
   case 4:
-#line 419 "asn1p_y.y"
+#line 420 "asn1p_y.y"
     {
 		(yyval.a_grammar) = asn1p_new();
 		checkmem((yyval.a_grammar));
@@ -2366,7 +2370,7 @@ yyreduce:
     break;
 
   case 5:
-#line 424 "asn1p_y.y"
+#line 425 "asn1p_y.y"
     {
 		(yyval.a_grammar) = (yyvsp[(1) - (2)].a_grammar);
 		TQ_ADD(&((yyval.a_grammar)->modules), (yyvsp[(2) - (2)].a_module), mod_next);
@@ -2374,12 +2378,12 @@ yyreduce:
     break;
 
   case 6:
-#line 441 "asn1p_y.y"
+#line 442 "asn1p_y.y"
     { currentModule = asn1p_module_new(); }
     break;
 
   case 7:
-#line 446 "asn1p_y.y"
+#line 447 "asn1p_y.y"
     {
 
 		(yyval.a_module) = currentModule;
@@ -2400,31 +2404,31 @@ yyreduce:
     break;
 
   case 8:
-#line 470 "asn1p_y.y"
+#line 471 "asn1p_y.y"
     { (yyval.a_oid) = 0; }
     break;
 
   case 9:
-#line 471 "asn1p_y.y"
+#line 472 "asn1p_y.y"
     { (yyval.a_oid) = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 10:
-#line 475 "asn1p_y.y"
+#line 476 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(2) - (3)].a_oid);
 	}
     break;
 
   case 11:
-#line 478 "asn1p_y.y"
+#line 479 "asn1p_y.y"
     {
 		(yyval.a_oid) = 0;
 	}
     break;
 
   case 12:
-#line 484 "asn1p_y.y"
+#line 485 "asn1p_y.y"
     {
 		(yyval.a_oid) = asn1p_oid_new();
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(1) - (1)].a_oid_arc));
@@ -2434,7 +2438,7 @@ yyreduce:
     break;
 
   case 13:
-#line 490 "asn1p_y.y"
+#line 491 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(1) - (2)].a_oid);
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(2) - (2)].a_oid_arc));
@@ -2444,7 +2448,7 @@ yyreduce:
     break;
 
   case 14:
-#line 499 "asn1p_y.y"
+#line 500 "asn1p_y.y"
     {					/* iso */
 		(yyval.a_oid_arc).name = (yyvsp[(1) - (1)].tv_str);
 		(yyval.a_oid_arc).number = -1;
@@ -2452,7 +2456,7 @@ yyreduce:
     break;
 
   case 15:
-#line 503 "asn1p_y.y"
+#line 504 "asn1p_y.y"
     {		/* iso(1) */
 		(yyval.a_oid_arc).name = (yyvsp[(1) - (4)].tv_str);
 		(yyval.a_oid_arc).number = (yyvsp[(3) - (4)].a_int);
@@ -2460,7 +2464,7 @@ yyreduce:
     break;
 
   case 16:
-#line 507 "asn1p_y.y"
+#line 508 "asn1p_y.y"
     {					/* 1 */
 		(yyval.a_oid_arc).name = 0;
 		(yyval.a_oid_arc).number = (yyvsp[(1) - (1)].a_int);
@@ -2468,61 +2472,61 @@ yyreduce:
     break;
 
   case 17:
-#line 517 "asn1p_y.y"
+#line 518 "asn1p_y.y"
     { (yyval.a_module_flags) = MSF_NOFLAGS; }
     break;
 
   case 18:
-#line 518 "asn1p_y.y"
+#line 519 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 19:
-#line 527 "asn1p_y.y"
+#line 528 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 20:
-#line 530 "asn1p_y.y"
+#line 531 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (2)].a_module_flags) | (yyvsp[(2) - (2)].a_module_flags);
 	}
     break;
 
   case 21:
-#line 539 "asn1p_y.y"
+#line 540 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXPLICIT_TAGS;
 	}
     break;
 
   case 22:
-#line 542 "asn1p_y.y"
+#line 543 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_IMPLICIT_TAGS;
 	}
     break;
 
   case 23:
-#line 545 "asn1p_y.y"
+#line 546 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_AUTOMATIC_TAGS;
 	}
     break;
 
   case 24:
-#line 548 "asn1p_y.y"
+#line 549 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXTENSIBILITY_IMPLIED;
 	}
     break;
 
   case 25:
-#line 552 "asn1p_y.y"
+#line 553 "asn1p_y.y"
     {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp((yyvsp[(1) - (2)].tv_str), "TAG") == 0) {
@@ -2541,19 +2545,19 @@ yyreduce:
     break;
 
   case 26:
-#line 573 "asn1p_y.y"
+#line 574 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 27:
-#line 574 "asn1p_y.y"
+#line 575 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 28:
-#line 583 "asn1p_y.y"
+#line 584 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		AL_IMPORT((yyval.a_module), exports, (yyvsp[(1) - (3)].a_module), xp_next);
@@ -2567,14 +2571,14 @@ yyreduce:
     break;
 
   case 29:
-#line 596 "asn1p_y.y"
+#line 597 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 30:
-#line 599 "asn1p_y.y"
+#line 600 "asn1p_y.y"
     {
 		if((yyvsp[(1) - (2)].a_module)) {
 			(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
@@ -2588,7 +2592,7 @@ yyreduce:
     break;
 
   case 31:
-#line 616 "asn1p_y.y"
+#line 617 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2599,7 +2603,7 @@ yyreduce:
     break;
 
   case 32:
-#line 623 "asn1p_y.y"
+#line 624 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2610,7 +2614,7 @@ yyreduce:
     break;
 
   case 33:
-#line 637 "asn1p_y.y"
+#line 638 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2621,12 +2625,12 @@ yyreduce:
     break;
 
   case 34:
-#line 645 "asn1p_y.y"
+#line 646 "asn1p_y.y"
     { asn1p_lexer_hack_push_encoding_control(); }
     break;
 
   case 35:
-#line 646 "asn1p_y.y"
+#line 647 "asn1p_y.y"
     {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -2638,7 +2642,7 @@ yyreduce:
     break;
 
   case 36:
-#line 658 "asn1p_y.y"
+#line 659 "asn1p_y.y"
     {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -2647,12 +2651,12 @@ yyreduce:
     break;
 
   case 37:
-#line 671 "asn1p_y.y"
+#line 672 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 39:
-#line 675 "asn1p_y.y"
+#line 676 "asn1p_y.y"
     {
 		if(!saved_aid && 0)
 			return yyerror("Unterminated IMPORTS FROM, "
@@ -2663,19 +2667,19 @@ yyreduce:
     break;
 
   case 40:
-#line 685 "asn1p_y.y"
+#line 686 "asn1p_y.y"
     {
 		return yyerror("Empty IMPORTS list");
 	}
     break;
 
   case 41:
-#line 691 "asn1p_y.y"
+#line 692 "asn1p_y.y"
     { (yyval.a_module) = asn1p_module_new(); }
     break;
 
   case 43:
-#line 695 "asn1p_y.y"
+#line 696 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2684,7 +2688,7 @@ yyreduce:
     break;
 
   case 44:
-#line 700 "asn1p_y.y"
+#line 701 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
 		TQ_ADD(&((yyval.a_module)->imports), (yyvsp[(2) - (2)].a_xports), xp_next);
@@ -2692,17 +2696,17 @@ yyreduce:
     break;
 
   case 45:
-#line 707 "asn1p_y.y"
+#line 708 "asn1p_y.y"
     { memset(&(yyval.a_aid), 0, sizeof((yyval.a_aid))); }
     break;
 
   case 46:
-#line 708 "asn1p_y.y"
+#line 709 "asn1p_y.y"
     { (yyval.a_aid).oid = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 47:
-#line 712 "asn1p_y.y"
+#line 713 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (4)].a_xports);
 		(yyval.a_xports)->fromModuleName = (yyvsp[(3) - (4)].tv_str);
@@ -2714,7 +2718,7 @@ yyreduce:
     break;
 
   case 48:
-#line 723 "asn1p_y.y"
+#line 724 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		checkmem((yyval.a_xports));
@@ -2723,7 +2727,7 @@ yyreduce:
     break;
 
   case 49:
-#line 728 "asn1p_y.y"
+#line 729 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2731,7 +2735,7 @@ yyreduce:
     break;
 
   case 50:
-#line 735 "asn1p_y.y"
+#line 736 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2741,7 +2745,7 @@ yyreduce:
     break;
 
   case 51:
-#line 741 "asn1p_y.y"
+#line 742 "asn1p_y.y"
     {		/* Completely equivalent to above */
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2751,7 +2755,7 @@ yyreduce:
     break;
 
   case 52:
-#line 747 "asn1p_y.y"
+#line 748 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2761,12 +2765,12 @@ yyreduce:
     break;
 
   case 53:
-#line 757 "asn1p_y.y"
+#line 758 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 54:
-#line 758 "asn1p_y.y"
+#line 759 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2779,21 +2783,21 @@ yyreduce:
     break;
 
   case 55:
-#line 770 "asn1p_y.y"
+#line 771 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(2) - (3)].a_xports);
 	}
     break;
 
   case 56:
-#line 773 "asn1p_y.y"
+#line 774 "asn1p_y.y"
     {
 		(yyval.a_xports) = 0;
 	}
     break;
 
   case 57:
-#line 776 "asn1p_y.y"
+#line 777 "asn1p_y.y"
     {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		(yyval.a_xports) = asn1p_xports_new();
@@ -2802,7 +2806,7 @@ yyreduce:
     break;
 
   case 58:
-#line 784 "asn1p_y.y"
+#line 785 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		assert((yyval.a_xports));
@@ -2811,7 +2815,7 @@ yyreduce:
     break;
 
   case 59:
-#line 789 "asn1p_y.y"
+#line 790 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2819,7 +2823,7 @@ yyreduce:
     break;
 
   case 60:
-#line 796 "asn1p_y.y"
+#line 797 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2829,7 +2833,7 @@ yyreduce:
     break;
 
   case 61:
-#line 802 "asn1p_y.y"
+#line 803 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2839,7 +2843,7 @@ yyreduce:
     break;
 
   case 62:
-#line 808 "asn1p_y.y"
+#line 809 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2849,12 +2853,12 @@ yyreduce:
     break;
 
   case 63:
-#line 817 "asn1p_y.y"
+#line 818 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
   case 64:
-#line 820 "asn1p_y.y"
+#line 821 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -2865,14 +2869,14 @@ yyreduce:
     break;
 
   case 65:
-#line 830 "asn1p_y.y"
+#line 831 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 66:
-#line 843 "asn1p_y.y"
+#line 844 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2883,7 +2887,7 @@ yyreduce:
     break;
 
   case 67:
-#line 853 "asn1p_y.y"
+#line 854 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2895,7 +2899,7 @@ yyreduce:
     break;
 
   case 68:
-#line 873 "asn1p_y.y"
+#line 874 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2905,7 +2909,7 @@ yyreduce:
     break;
 
   case 69:
-#line 879 "asn1p_y.y"
+#line 880 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2915,7 +2919,7 @@ yyreduce:
     break;
 
   case 70:
-#line 895 "asn1p_y.y"
+#line 896 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
@@ -2924,7 +2928,7 @@ yyreduce:
     break;
 
   case 71:
-#line 901 "asn1p_y.y"
+#line 902 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
@@ -2933,7 +2937,7 @@ yyreduce:
     break;
 
   case 72:
-#line 909 "asn1p_y.y"
+#line 910 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = asn1p_paramlist_new(yylineno);
@@ -2946,7 +2950,7 @@ yyreduce:
     break;
 
   case 73:
-#line 918 "asn1p_y.y"
+#line 919 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = (yyvsp[(1) - (3)].a_plist);
@@ -2958,7 +2962,7 @@ yyreduce:
     break;
 
   case 74:
-#line 929 "asn1p_y.y"
+#line 930 "asn1p_y.y"
     {
 		(yyval.a_parg).governor = NULL;
 		(yyval.a_parg).argument = (yyvsp[(1) - (1)].tv_str);
@@ -2966,7 +2970,7 @@ yyreduce:
     break;
 
   case 75:
-#line 933 "asn1p_y.y"
+#line 934 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2978,7 +2982,7 @@ yyreduce:
     break;
 
   case 76:
-#line 941 "asn1p_y.y"
+#line 942 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2990,7 +2994,7 @@ yyreduce:
     break;
 
   case 77:
-#line 949 "asn1p_y.y"
+#line 950 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -3002,7 +3006,7 @@ yyreduce:
     break;
 
   case 78:
-#line 957 "asn1p_y.y"
+#line 958 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -3014,7 +3018,7 @@ yyreduce:
     break;
 
   case 79:
-#line 968 "asn1p_y.y"
+#line 969 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3023,7 +3027,7 @@ yyreduce:
     break;
 
   case 80:
-#line 973 "asn1p_y.y"
+#line 974 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3031,14 +3035,14 @@ yyreduce:
     break;
 
   case 81:
-#line 980 "asn1p_y.y"
+#line 981 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 82:
-#line 983 "asn1p_y.y"
+#line 984 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3050,7 +3054,7 @@ yyreduce:
     break;
 
   case 83:
-#line 991 "asn1p_y.y"
+#line 992 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		(yyval.a_expr) = NEW_EXPR();
@@ -3065,7 +3069,7 @@ yyreduce:
     break;
 
   case 84:
-#line 1002 "asn1p_y.y"
+#line 1003 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->expr_type = A1TC_VALUESET;
@@ -3075,17 +3079,17 @@ yyreduce:
     break;
 
   case 85:
-#line 1025 "asn1p_y.y"
+#line 1026 "asn1p_y.y"
     { (yyval.a_expr) = NEW_EXPR(); }
     break;
 
   case 86:
-#line 1026 "asn1p_y.y"
+#line 1027 "asn1p_y.y"
     { (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr); }
     break;
 
   case 87:
-#line 1029 "asn1p_y.y"
+#line 1030 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3094,7 +3098,7 @@ yyreduce:
     break;
 
   case 88:
-#line 1034 "asn1p_y.y"
+#line 1035 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3102,7 +3106,7 @@ yyreduce:
     break;
 
   case 89:
-#line 1038 "asn1p_y.y"
+#line 1039 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (5)].a_expr);
 		asn1p_expr_add_many((yyval.a_expr), (yyvsp[(4) - (5)].a_expr));
@@ -3111,7 +3115,7 @@ yyreduce:
     break;
 
   case 90:
-#line 1046 "asn1p_y.y"
+#line 1047 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3122,7 +3126,7 @@ yyreduce:
     break;
 
   case 91:
-#line 1053 "asn1p_y.y"
+#line 1054 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
 		(yyvsp[(2) - (2)].a_marker).flags |= (yyval.a_expr)->marker.flags;
@@ -3132,7 +3136,7 @@ yyreduce:
     break;
 
   case 92:
-#line 1059 "asn1p_y.y"
+#line 1060 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3143,14 +3147,14 @@ yyreduce:
     break;
 
   case 93:
-#line 1066 "asn1p_y.y"
+#line 1067 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 94:
-#line 1072 "asn1p_y.y"
+#line 1073 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3159,7 +3163,7 @@ yyreduce:
     break;
 
   case 95:
-#line 1077 "asn1p_y.y"
+#line 1078 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3167,7 +3171,7 @@ yyreduce:
     break;
 
   case 96:
-#line 1084 "asn1p_y.y"
+#line 1085 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3176,14 +3180,14 @@ yyreduce:
     break;
 
   case 97:
-#line 1089 "asn1p_y.y"
+#line 1090 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 98:
-#line 1092 "asn1p_y.y"
+#line 1093 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 		_fixup_anonymous_identifier((yyval.a_expr));
@@ -3191,7 +3195,7 @@ yyreduce:
     break;
 
   case 99:
-#line 1099 "asn1p_y.y"
+#line 1100 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (5)].a_expr);
 		checkmem((yyval.a_expr));
@@ -3202,17 +3206,17 @@ yyreduce:
     break;
 
   case 100:
-#line 1109 "asn1p_y.y"
+#line 1110 "asn1p_y.y"
     { (yyval.a_int) = 0; }
     break;
 
   case 101:
-#line 1110 "asn1p_y.y"
+#line 1111 "asn1p_y.y"
     { (yyval.a_int) = 1; }
     break;
 
   case 102:
-#line 1114 "asn1p_y.y"
+#line 1115 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3223,7 +3227,7 @@ yyreduce:
     break;
 
   case 103:
-#line 1121 "asn1p_y.y"
+#line 1122 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3231,7 +3235,7 @@ yyreduce:
     break;
 
   case 104:
-#line 1131 "asn1p_y.y"
+#line 1132 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3243,7 +3247,7 @@ yyreduce:
     break;
 
   case 105:
-#line 1141 "asn1p_y.y"
+#line 1142 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
@@ -3256,7 +3260,7 @@ yyreduce:
     break;
 
   case 106:
-#line 1152 "asn1p_y.y"
+#line 1153 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3268,7 +3272,7 @@ yyreduce:
     break;
 
   case 107:
-#line 1162 "asn1p_y.y"
+#line 1163 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3281,7 +3285,7 @@ yyreduce:
     break;
 
   case 108:
-#line 1173 "asn1p_y.y"
+#line 1174 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3293,7 +3297,7 @@ yyreduce:
     break;
 
   case 109:
-#line 1183 "asn1p_y.y"
+#line 1184 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3306,7 +3310,7 @@ yyreduce:
     break;
 
   case 110:
-#line 1194 "asn1p_y.y"
+#line 1195 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3319,31 +3323,31 @@ yyreduce:
     break;
 
   case 111:
-#line 1206 "asn1p_y.y"
+#line 1207 "asn1p_y.y"
     { (yyval.a_wsynt) = 0; }
     break;
 
   case 112:
-#line 1207 "asn1p_y.y"
+#line 1208 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (1)].a_wsynt);
 	}
     break;
 
   case 113:
-#line 1214 "asn1p_y.y"
+#line 1215 "asn1p_y.y"
     { asn1p_lexer_hack_enable_with_syntax(); }
     break;
 
   case 114:
-#line 1216 "asn1p_y.y"
+#line 1217 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(5) - (6)].a_wsynt);
 	}
     break;
 
   case 115:
-#line 1222 "asn1p_y.y"
+#line 1223 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = asn1p_wsyntx_new();
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(1) - (1)].a_wchunk), next);
@@ -3351,7 +3355,7 @@ yyreduce:
     break;
 
   case 116:
-#line 1226 "asn1p_y.y"
+#line 1227 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (2)].a_wsynt);
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(2) - (2)].a_wchunk), next);
@@ -3359,7 +3363,7 @@ yyreduce:
     break;
 
   case 117:
-#line 1233 "asn1p_y.y"
+#line 1234 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_opaque).buf, 0);
 		(yyval.a_wchunk)->type = WC_WHITESPACE;
@@ -3367,14 +3371,14 @@ yyreduce:
     break;
 
   case 118:
-#line 1237 "asn1p_y.y"
+#line 1238 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_str), 0);
 	}
     break;
 
   case 119:
-#line 1240 "asn1p_y.y"
+#line 1241 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].a_refcomp).name, 0);
 		(yyval.a_wchunk)->type = WC_FIELD;
@@ -3382,14 +3386,14 @@ yyreduce:
     break;
 
   case 120:
-#line 1244 "asn1p_y.y"
+#line 1245 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromsyntax((yyvsp[(2) - (3)].a_wsynt));
 	}
     break;
 
   case 121:
-#line 1250 "asn1p_y.y"
+#line 1251 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3401,7 +3405,7 @@ yyreduce:
     break;
 
   case 122:
-#line 1258 "asn1p_y.y"
+#line 1259 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3414,7 +3418,7 @@ yyreduce:
     break;
 
   case 123:
-#line 1267 "asn1p_y.y"
+#line 1268 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3427,7 +3431,7 @@ yyreduce:
     break;
 
   case 124:
-#line 1279 "asn1p_y.y"
+#line 1280 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		(yyval.a_expr)->tag = (yyvsp[(1) - (3)].a_tag);
@@ -3452,7 +3456,7 @@ yyreduce:
     break;
 
   case 125:
-#line 1303 "asn1p_y.y"
+#line 1304 "asn1p_y.y"
     {
 		(yyval.a_int) = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
@@ -3460,7 +3464,7 @@ yyreduce:
     break;
 
   case 126:
-#line 1310 "asn1p_y.y"
+#line 1311 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		(yyval.a_expr)->marker.flags |= (yyvsp[(1) - (2)].a_int);
@@ -3480,14 +3484,14 @@ yyreduce:
     break;
 
   case 127:
-#line 1329 "asn1p_y.y"
+#line 1330 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 128:
-#line 1332 "asn1p_y.y"
+#line 1333 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3497,7 +3501,7 @@ yyreduce:
     break;
 
   case 129:
-#line 1338 "asn1p_y.y"
+#line 1339 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3507,7 +3511,7 @@ yyreduce:
     break;
 
   case 130:
-#line 1344 "asn1p_y.y"
+#line 1345 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3517,7 +3521,7 @@ yyreduce:
     break;
 
   case 131:
-#line 1350 "asn1p_y.y"
+#line 1351 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3531,7 +3535,7 @@ yyreduce:
     break;
 
   case 132:
-#line 1360 "asn1p_y.y"
+#line 1361 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3545,7 +3549,7 @@ yyreduce:
     break;
 
   case 133:
-#line 1370 "asn1p_y.y"
+#line 1371 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3555,7 +3559,7 @@ yyreduce:
     break;
 
   case 134:
-#line 1376 "asn1p_y.y"
+#line 1377 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_expr) = NEW_EXPR();
@@ -3571,7 +3575,7 @@ yyreduce:
     break;
 
   case 135:
-#line 1388 "asn1p_y.y"
+#line 1389 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3582,7 +3586,7 @@ yyreduce:
     break;
 
   case 136:
-#line 1403 "asn1p_y.y"
+#line 1404 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3594,7 +3598,7 @@ yyreduce:
     break;
 
   case 137:
-#line 1411 "asn1p_y.y"
+#line 1412 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3609,7 +3613,7 @@ yyreduce:
     break;
 
   case 138:
-#line 1422 "asn1p_y.y"
+#line 1423 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3624,7 +3628,7 @@ yyreduce:
     break;
 
   case 139:
-#line 1433 "asn1p_y.y"
+#line 1434 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3639,7 +3643,7 @@ yyreduce:
     break;
 
   case 140:
-#line 1444 "asn1p_y.y"
+#line 1445 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3651,7 +3655,7 @@ yyreduce:
     break;
 
   case 141:
-#line 1452 "asn1p_y.y"
+#line 1453 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(3) - (3)].a_ref);
@@ -3674,7 +3678,7 @@ yyreduce:
     break;
 
   case 142:
-#line 1474 "asn1p_y.y"
+#line 1475 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3686,7 +3690,7 @@ yyreduce:
     break;
 
   case 143:
-#line 1482 "asn1p_y.y"
+#line 1483 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(1) - (3)].a_ref);
@@ -3697,7 +3701,7 @@ yyreduce:
     break;
 
   case 145:
-#line 1495 "asn1p_y.y"
+#line 1496 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_AmpUppercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
@@ -3705,7 +3709,7 @@ yyreduce:
     break;
 
   case 146:
-#line 1500 "asn1p_y.y"
+#line 1501 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_Amplowercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
@@ -3713,7 +3717,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1509 "asn1p_y.y"
+#line 1510 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_AmpUppercase);
@@ -3722,7 +3726,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1514 "asn1p_y.y"
+#line 1515 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_AmpUppercase);
@@ -3731,7 +3735,7 @@ yyreduce:
     break;
 
   case 149:
-#line 1519 "asn1p_y.y"
+#line 1520 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_Amplowercase);
@@ -3740,7 +3744,7 @@ yyreduce:
     break;
 
   case 150:
-#line 1527 "asn1p_y.y"
+#line 1528 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_CAPITALS);
@@ -3749,7 +3753,7 @@ yyreduce:
     break;
 
   case 151:
-#line 1550 "asn1p_y.y"
+#line 1551 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == NULL);
@@ -3760,7 +3764,7 @@ yyreduce:
     break;
 
   case 154:
-#line 1562 "asn1p_y.y"
+#line 1563 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3771,12 +3775,12 @@ yyreduce:
     break;
 
   case 155:
-#line 1569 "asn1p_y.y"
+#line 1570 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
   case 156:
-#line 1569 "asn1p_y.y"
+#line 1570 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_frombuf((yyvsp[(3) - (3)].tv_opaque).buf, (yyvsp[(3) - (3)].tv_opaque).len, 0);
 		checkmem((yyval.a_value));
@@ -3785,7 +3789,7 @@ yyreduce:
     break;
 
   case 157:
-#line 1574 "asn1p_y.y"
+#line 1575 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3794,7 +3798,7 @@ yyreduce:
     break;
 
   case 158:
-#line 1582 "asn1p_y.y"
+#line 1583 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3803,7 +3807,7 @@ yyreduce:
     break;
 
   case 159:
-#line 1587 "asn1p_y.y"
+#line 1588 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3812,7 +3816,7 @@ yyreduce:
     break;
 
   case 160:
-#line 1592 "asn1p_y.y"
+#line 1593 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
 		checkmem((yyval.a_value));
@@ -3821,7 +3825,7 @@ yyreduce:
     break;
 
   case 161:
-#line 1597 "asn1p_y.y"
+#line 1598 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
 		checkmem((yyval.a_value));
@@ -3830,21 +3834,21 @@ yyreduce:
     break;
 
   case 162:
-#line 1602 "asn1p_y.y"
+#line 1603 "asn1p_y.y"
     {
 		(yyval.a_value) = (yyval.a_value);
 	}
     break;
 
   case 163:
-#line 1605 "asn1p_y.y"
+#line 1606 "asn1p_y.y"
     {
 		(yyval.a_value) = (yyvsp[(1) - (1)].a_value);
 	}
     break;
 
   case 164:
-#line 1611 "asn1p_y.y"
+#line 1612 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3859,7 +3863,7 @@ yyreduce:
     break;
 
   case 165:
-#line 1622 "asn1p_y.y"
+#line 1623 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3877,7 +3881,7 @@ yyreduce:
     break;
 
   case 166:
-#line 1640 "asn1p_y.y"
+#line 1641 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_frombuf((yyvsp[(1) - (1)].tv_opaque).buf, (yyvsp[(1) - (1)].tv_opaque).len, 0);
 		checkmem((yyval.a_value));
@@ -3885,7 +3889,7 @@ yyreduce:
     break;
 
   case 167:
-#line 1644 "asn1p_y.y"
+#line 1645 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3894,7 +3898,7 @@ yyreduce:
     break;
 
   case 168:
-#line 1649 "asn1p_y.y"
+#line 1650 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3903,20 +3907,20 @@ yyreduce:
     break;
 
   case 169:
-#line 1657 "asn1p_y.y"
+#line 1658 "asn1p_y.y"
     {
 		(yyval.tv_opaque).len = (yyvsp[(1) - (1)].tv_opaque).len + 1;
-		(yyval.tv_opaque).buf = malloc((yyval.tv_opaque).len + 1);
+		(yyval.tv_opaque).buf = malloc(1 + (yyval.tv_opaque).len + 1);
 		checkmem((yyval.tv_opaque).buf);
 		(yyval.tv_opaque).buf[0] = '{';
 		memcpy((yyval.tv_opaque).buf + 1, (yyvsp[(1) - (1)].tv_opaque).buf, (yyvsp[(1) - (1)].tv_opaque).len);
 		(yyval.tv_opaque).buf[(yyval.tv_opaque).len] = '\0';
 		free((yyvsp[(1) - (1)].tv_opaque).buf);
-	}
+    }
     break;
 
   case 170:
-#line 1666 "asn1p_y.y"
+#line 1667 "asn1p_y.y"
     {
 		int newsize = (yyvsp[(1) - (2)].tv_opaque).len + (yyvsp[(2) - (2)].tv_opaque).len;
 		char *p = malloc(newsize + 1);
@@ -3931,78 +3935,86 @@ yyreduce:
 	}
     break;
 
-  case 171:
-#line 1681 "asn1p_y.y"
+  case 172:
+#line 1683 "asn1p_y.y"
+    {
+        (yyval.tv_opaque).len = strlen((yyvsp[(1) - (1)].tv_str));
+        (yyval.tv_opaque).buf = (yyvsp[(1) - (1)].tv_str);
+    }
+    break;
+
+  case 173:
+#line 1689 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BOOLEAN; }
     break;
 
-  case 172:
-#line 1682 "asn1p_y.y"
+  case 174:
+#line 1690 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_NULL; }
     break;
 
-  case 173:
-#line 1683 "asn1p_y.y"
+  case 175:
+#line 1691 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_REAL; }
     break;
 
-  case 174:
-#line 1684 "asn1p_y.y"
+  case 176:
+#line 1692 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OCTET_STRING; }
     break;
 
-  case 175:
-#line 1685 "asn1p_y.y"
+  case 177:
+#line 1693 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OBJECT_IDENTIFIER; }
     break;
 
-  case 176:
-#line 1686 "asn1p_y.y"
+  case 178:
+#line 1694 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_RELATIVE_OID; }
     break;
 
-  case 177:
-#line 1687 "asn1p_y.y"
+  case 179:
+#line 1695 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EXTERNAL; }
     break;
 
-  case 178:
-#line 1688 "asn1p_y.y"
+  case 180:
+#line 1696 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EMBEDDED_PDV; }
     break;
 
-  case 179:
-#line 1689 "asn1p_y.y"
+  case 181:
+#line 1697 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_CHARACTER_STRING; }
     break;
 
-  case 180:
-#line 1690 "asn1p_y.y"
+  case 182:
+#line 1698 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_UTCTime; }
     break;
 
-  case 181:
-#line 1691 "asn1p_y.y"
+  case 183:
+#line 1699 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_GeneralizedTime; }
     break;
 
-  case 184:
-#line 1700 "asn1p_y.y"
+  case 186:
+#line 1708 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
-  case 185:
-#line 1701 "asn1p_y.y"
+  case 187:
+#line 1709 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
-  case 186:
-#line 1702 "asn1p_y.y"
+  case 188:
+#line 1710 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BIT_STRING; }
     break;
 
-  case 187:
-#line 1706 "asn1p_y.y"
+  case 189:
+#line 1714 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4011,8 +4023,8 @@ yyreduce:
 	}
     break;
 
-  case 188:
-#line 1712 "asn1p_y.y"
+  case 190:
+#line 1720 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_INTEGER;
@@ -4020,8 +4032,8 @@ yyreduce:
     }
     break;
 
-  case 189:
-#line 1717 "asn1p_y.y"
+  case 191:
+#line 1725 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_ENUMERATED;
@@ -4029,8 +4041,8 @@ yyreduce:
     }
     break;
 
-  case 190:
-#line 1722 "asn1p_y.y"
+  case 192:
+#line 1730 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(4) - (5)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4038,8 +4050,8 @@ yyreduce:
     }
     break;
 
-  case 191:
-#line 1727 "asn1p_y.y"
+  case 193:
+#line 1735 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4047,8 +4059,8 @@ yyreduce:
     }
     break;
 
-  case 192:
-#line 1732 "asn1p_y.y"
+  case 194:
+#line 1740 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4057,112 +4069,112 @@ yyreduce:
     }
     break;
 
-  case 193:
-#line 1741 "asn1p_y.y"
+  case 195:
+#line 1749 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_BMPString; }
     break;
 
-  case 194:
-#line 1742 "asn1p_y.y"
+  case 196:
+#line 1750 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	}
     break;
 
-  case 195:
-#line 1746 "asn1p_y.y"
+  case 197:
+#line 1754 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	}
     break;
 
-  case 196:
-#line 1750 "asn1p_y.y"
+  case 198:
+#line 1758 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_IA5String; }
     break;
 
-  case 197:
-#line 1751 "asn1p_y.y"
+  case 199:
+#line 1759 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ISO646String; }
     break;
 
-  case 198:
-#line 1752 "asn1p_y.y"
+  case 200:
+#line 1760 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_NumericString; }
     break;
 
-  case 199:
-#line 1753 "asn1p_y.y"
+  case 201:
+#line 1761 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_PrintableString; }
     break;
 
-  case 200:
-#line 1754 "asn1p_y.y"
+  case 202:
+#line 1762 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	}
     break;
 
-  case 201:
-#line 1758 "asn1p_y.y"
+  case 203:
+#line 1766 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_TeletexString; }
     break;
 
-  case 202:
-#line 1759 "asn1p_y.y"
+  case 204:
+#line 1767 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UniversalString; }
     break;
 
-  case 203:
-#line 1760 "asn1p_y.y"
+  case 205:
+#line 1768 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UTF8String; }
     break;
 
-  case 204:
-#line 1761 "asn1p_y.y"
+  case 206:
+#line 1769 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	}
     break;
 
-  case 205:
-#line 1765 "asn1p_y.y"
+  case 207:
+#line 1773 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_VisibleString; }
     break;
 
-  case 206:
-#line 1766 "asn1p_y.y"
+  case 208:
+#line 1774 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ObjectDescriptor; }
     break;
 
-  case 211:
-#line 1778 "asn1p_y.y"
+  case 213:
+#line 1786 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
-  case 213:
-#line 1783 "asn1p_y.y"
+  case 215:
+#line 1791 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
-  case 215:
-#line 1788 "asn1p_y.y"
+  case 217:
+#line 1796 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
-  case 218:
-#line 1794 "asn1p_y.y"
+  case 220:
+#line 1802 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(2) - (3)].a_constr), 0);
     }
     break;
 
-  case 220:
-#line 1801 "asn1p_y.y"
+  case 222:
+#line 1809 "asn1p_y.y"
     {
         if((yyvsp[(2) - (2)].a_constr)->type == ACT_CA_SET && (yyvsp[(2) - (2)].a_constr)->el_count == 1) {
             CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (2)].a_constr), (yyvsp[(2) - (2)].a_constr)->elements[0]);
@@ -4172,16 +4184,16 @@ yyreduce:
 	}
     break;
 
-  case 224:
-#line 1815 "asn1p_y.y"
+  case 226:
+#line 1823 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_EL_EXT;
 	}
     break;
 
-  case 226:
-#line 1820 "asn1p_y.y"
+  case 228:
+#line 1828 "asn1p_y.y"
     {
        asn1p_constraint_t *ct;
        ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4190,8 +4202,8 @@ yyreduce:
    }
     break;
 
-  case 227:
-#line 1826 "asn1p_y.y"
+  case 229:
+#line 1834 "asn1p_y.y"
     {
        asn1p_constraint_t *ct;
        ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4202,36 +4214,36 @@ yyreduce:
    }
     break;
 
-  case 229:
-#line 1838 "asn1p_y.y"
+  case 231:
+#line 1846 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_AEX, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 231:
-#line 1845 "asn1p_y.y"
+  case 233:
+#line 1853 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_UNI, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 233:
-#line 1852 "asn1p_y.y"
+  case 235:
+#line 1860 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_INT, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 235:
-#line 1860 "asn1p_y.y"
+  case 237:
+#line 1868 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_EXC, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 237:
-#line 1867 "asn1p_y.y"
+  case 239:
+#line 1875 "asn1p_y.y"
     {
         int ret;
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4242,8 +4254,8 @@ yyreduce:
     }
     break;
 
-  case 238:
-#line 1878 "asn1p_y.y"
+  case 240:
+#line 1886 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4252,8 +4264,8 @@ yyreduce:
 	}
     break;
 
-  case 239:
-#line 1884 "asn1p_y.y"
+  case 241:
+#line 1892 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4262,13 +4274,13 @@ yyreduce:
 	}
     break;
 
-  case 245:
-#line 1896 "asn1p_y.y"
+  case 247:
+#line 1904 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 246:
-#line 1896 "asn1p_y.y"
+  case 248:
+#line 1904 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4278,22 +4290,22 @@ yyreduce:
 	}
     break;
 
-  case 247:
-#line 1907 "asn1p_y.y"
+  case 249:
+#line 1915 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_FROM, (yyvsp[(2) - (2)].a_constr), 0);
 	}
     break;
 
-  case 248:
-#line 1912 "asn1p_y.y"
+  case 250:
+#line 1920 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_SIZE, (yyvsp[(2) - (2)].a_constr), 0);
 	}
     break;
 
-  case 249:
-#line 1917 "asn1p_y.y"
+  case 251:
+#line 1925 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_PATTERN;
@@ -4301,8 +4313,8 @@ yyreduce:
 	}
     break;
 
-  case 250:
-#line 1922 "asn1p_y.y"
+  case 252:
+#line 1930 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4314,8 +4326,8 @@ yyreduce:
 	}
     break;
 
-  case 251:
-#line 1934 "asn1p_y.y"
+  case 253:
+#line 1942 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4325,24 +4337,24 @@ yyreduce:
     }
     break;
 
-  case 253:
-#line 1944 "asn1p_y.y"
+  case 255:
+#line 1952 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(-123);
 		(yyval.a_value)->type = ATV_MIN;
     }
     break;
 
-  case 255:
-#line 1951 "asn1p_y.y"
+  case 257:
+#line 1959 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(321);
 		(yyval.a_value)->type = ATV_MAX;
     }
     break;
 
-  case 256:
-#line 1957 "asn1p_y.y"
+  case 258:
+#line 1965 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -4350,8 +4362,8 @@ yyreduce:
 	}
     break;
 
-  case 257:
-#line 1962 "asn1p_y.y"
+  case 259:
+#line 1970 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(1);
 		checkmem((yyval.a_value));
@@ -4359,8 +4371,8 @@ yyreduce:
 	}
     break;
 
-  case 261:
-#line 1970 "asn1p_y.y"
+  case 263:
+#line 1978 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -4374,8 +4386,8 @@ yyreduce:
 	}
     break;
 
-  case 262:
-#line 1984 "asn1p_y.y"
+  case 264:
+#line 1992 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
 		checkmem((yyval.a_value));
@@ -4383,8 +4395,8 @@ yyreduce:
 	}
     break;
 
-  case 263:
-#line 1989 "asn1p_y.y"
+  case 265:
+#line 1997 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
 		checkmem((yyval.a_value));
@@ -4392,33 +4404,33 @@ yyreduce:
 	}
     break;
 
-  case 264:
-#line 1997 "asn1p_y.y"
+  case 266:
+#line 2005 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
 		checkmem((yyval.a_value));
     }
     break;
 
-  case 265:
-#line 2004 "asn1p_y.y"
+  case 267:
+#line 2012 "asn1p_y.y"
     { (yyval.a_int) = 0; }
     break;
 
-  case 266:
-#line 2005 "asn1p_y.y"
+  case 268:
+#line 2013 "asn1p_y.y"
     { (yyval.a_int) = 1; }
     break;
 
-  case 267:
-#line 2013 "asn1p_y.y"
+  case 269:
+#line 2021 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_WCOMP, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 268:
-#line 2016 "asn1p_y.y"
+  case 270:
+#line 2024 "asn1p_y.y"
     {
         assert((yyvsp[(3) - (3)].a_constr)->type == ACT_CA_CSV);
         (yyvsp[(3) - (3)].a_constr)->type = ACT_CT_WCOMPS;
@@ -4426,13 +4438,13 @@ yyreduce:
 	}
     break;
 
-  case 272:
-#line 2024 "asn1p_y.y"
+  case 274:
+#line 2032 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
-  case 273:
-#line 2026 "asn1p_y.y"
+  case 275:
+#line 2034 "asn1p_y.y"
     {
         assert((yyvsp[(4) - (5)].a_constr)->type == ACT_CA_CSV);
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4447,8 +4459,8 @@ yyreduce:
     }
     break;
 
-  case 274:
-#line 2039 "asn1p_y.y"
+  case 276:
+#line 2047 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         (yyval.a_constr)->type = ACT_CA_CSV;
@@ -4456,16 +4468,16 @@ yyreduce:
     }
     break;
 
-  case 275:
-#line 2044 "asn1p_y.y"
+  case 277:
+#line 2052 "asn1p_y.y"
     {
         (yyval.a_constr) = (yyvsp[(1) - (3)].a_constr);
         asn1p_constraint_insert((yyval.a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 276:
-#line 2050 "asn1p_y.y"
+  case 278:
+#line 2058 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         checkmem((yyval.a_constr));
@@ -4476,44 +4488,44 @@ yyreduce:
     }
     break;
 
-  case 277:
-#line 2064 "asn1p_y.y"
+  case 279:
+#line 2072 "asn1p_y.y"
     { (yyval.a_pres) = ACPRES_DEFAULT; }
     break;
 
-  case 278:
-#line 2065 "asn1p_y.y"
+  case 280:
+#line 2073 "asn1p_y.y"
     { (yyval.a_pres) = (yyvsp[(1) - (1)].a_pres); }
     break;
 
-  case 279:
-#line 2069 "asn1p_y.y"
+  case 281:
+#line 2077 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_PRESENT;
 	}
     break;
 
-  case 280:
-#line 2072 "asn1p_y.y"
+  case 282:
+#line 2080 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_ABSENT;
 	}
     break;
 
-  case 281:
-#line 2075 "asn1p_y.y"
+  case 283:
+#line 2083 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_OPTIONAL;
 	}
     break;
 
-  case 285:
-#line 2090 "asn1p_y.y"
+  case 287:
+#line 2098 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 286:
-#line 2090 "asn1p_y.y"
+  case 288:
+#line 2098 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4524,8 +4536,8 @@ yyreduce:
 	}
     break;
 
-  case 287:
-#line 2101 "asn1p_y.y"
+  case 289:
+#line 2109 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_CTNG;
@@ -4534,42 +4546,42 @@ yyreduce:
 	}
     break;
 
-  case 288:
-#line 2110 "asn1p_y.y"
+  case 290:
+#line 2118 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RANGE; }
     break;
 
-  case 289:
-#line 2111 "asn1p_y.y"
+  case 291:
+#line 2119 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RLRANGE; }
     break;
 
-  case 290:
-#line 2112 "asn1p_y.y"
+  case 292:
+#line 2120 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_LLRANGE; }
     break;
 
-  case 291:
-#line 2113 "asn1p_y.y"
+  case 293:
+#line 2121 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_ULRANGE; }
     break;
 
-  case 292:
-#line 2116 "asn1p_y.y"
+  case 294:
+#line 2124 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 293:
-#line 2119 "asn1p_y.y"
+  case 295:
+#line 2127 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 294:
-#line 2128 "asn1p_y.y"
+  case 296:
+#line 2136 "asn1p_y.y"
     {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_constraint_t *ct;
@@ -4585,15 +4597,15 @@ yyreduce:
 	}
     break;
 
-  case 295:
-#line 2144 "asn1p_y.y"
+  case 297:
+#line 2152 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CRC, (yyvsp[(1) - (4)].a_constr), (yyvsp[(3) - (4)].a_constr));
 	}
     break;
 
-  case 296:
-#line 2150 "asn1p_y.y"
+  case 298:
+#line 2158 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4602,8 +4614,8 @@ yyreduce:
 	}
     break;
 
-  case 297:
-#line 2156 "asn1p_y.y"
+  case 299:
+#line 2164 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4614,8 +4626,8 @@ yyreduce:
 	}
     break;
 
-  case 298:
-#line 2170 "asn1p_y.y"
+  case 300:
+#line 2178 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(2) - (2)].tv_str)) + 2);
 		int ret;
@@ -4629,8 +4641,8 @@ yyreduce:
 	}
     break;
 
-  case 299:
-#line 2181 "asn1p_y.y"
+  case 301:
+#line 2189 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(3) - (3)].tv_str)) + 3);
 		int ret;
@@ -4645,15 +4657,15 @@ yyreduce:
 	}
     break;
 
-  case 300:
-#line 2197 "asn1p_y.y"
+  case 302:
+#line 2205 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 301:
-#line 2200 "asn1p_y.y"
+  case 303:
+#line 2208 "asn1p_y.y"
     {
 		int l1 = strlen((yyvsp[(1) - (3)].tv_str));
 		int l3 = strlen((yyvsp[(3) - (3)].tv_str));
@@ -4667,37 +4679,37 @@ yyreduce:
 	}
     break;
 
-  case 302:
-#line 2220 "asn1p_y.y"
+  case 304:
+#line 2228 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_NOMARK;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 303:
-#line 2224 "asn1p_y.y"
+  case 305:
+#line 2232 "asn1p_y.y"
     { (yyval.a_marker) = (yyvsp[(1) - (1)].a_marker); }
     break;
 
-  case 304:
-#line 2228 "asn1p_y.y"
+  case 306:
+#line 2236 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_OPTIONAL | EM_INDIRECT;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 305:
-#line 2232 "asn1p_y.y"
+  case 307:
+#line 2240 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_DEFAULT;
 		(yyval.a_marker).default_value = (yyvsp[(2) - (2)].a_value);
 	}
     break;
 
-  case 306:
-#line 2239 "asn1p_y.y"
+  case 308:
+#line 2247 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4705,16 +4717,16 @@ yyreduce:
     }
     break;
 
-  case 307:
-#line 2244 "asn1p_y.y"
+  case 309:
+#line 2252 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
     }
     break;
 
-  case 308:
-#line 2250 "asn1p_y.y"
+  case 310:
+#line 2258 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4724,8 +4736,8 @@ yyreduce:
     }
     break;
 
-  case 309:
-#line 2259 "asn1p_y.y"
+  case 311:
+#line 2267 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4733,16 +4745,16 @@ yyreduce:
 	}
     break;
 
-  case 310:
-#line 2264 "asn1p_y.y"
+  case 312:
+#line 2272 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 311:
-#line 2271 "asn1p_y.y"
+  case 313:
+#line 2279 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4753,8 +4765,8 @@ yyreduce:
 	}
     break;
 
-  case 312:
-#line 2279 "asn1p_y.y"
+  case 314:
+#line 2287 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4765,8 +4777,8 @@ yyreduce:
 	}
     break;
 
-  case 313:
-#line 2289 "asn1p_y.y"
+  case 315:
+#line 2297 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4774,16 +4786,16 @@ yyreduce:
 	}
     break;
 
-  case 314:
-#line 2294 "asn1p_y.y"
+  case 316:
+#line 2302 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 315:
-#line 2301 "asn1p_y.y"
+  case 317:
+#line 2309 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4794,8 +4806,8 @@ yyreduce:
 	}
     break;
 
-  case 316:
-#line 2309 "asn1p_y.y"
+  case 318:
+#line 2317 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4806,8 +4818,8 @@ yyreduce:
 	}
     break;
 
-  case 317:
-#line 2319 "asn1p_y.y"
+  case 319:
+#line 2327 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
         asn1p_expr_t *first_memb = TQ_FIRST(&((yyval.a_expr)->members));
@@ -4823,8 +4835,8 @@ yyreduce:
     }
     break;
 
-  case 318:
-#line 2334 "asn1p_y.y"
+  case 320:
+#line 2342 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4832,16 +4844,16 @@ yyreduce:
 	}
     break;
 
-  case 319:
-#line 2339 "asn1p_y.y"
+  case 321:
+#line 2347 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 320:
-#line 2346 "asn1p_y.y"
+  case 322:
+#line 2354 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4851,8 +4863,8 @@ yyreduce:
 	}
     break;
 
-  case 321:
-#line 2353 "asn1p_y.y"
+  case 323:
+#line 2361 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4863,8 +4875,8 @@ yyreduce:
 	}
     break;
 
-  case 322:
-#line 2361 "asn1p_y.y"
+  case 324:
+#line 2369 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4875,8 +4887,8 @@ yyreduce:
 	}
     break;
 
-  case 323:
-#line 2369 "asn1p_y.y"
+  case 325:
+#line 2377 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4886,8 +4898,8 @@ yyreduce:
 	}
     break;
 
-  case 324:
-#line 2376 "asn1p_y.y"
+  case 326:
+#line 2384 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4898,145 +4910,145 @@ yyreduce:
 	}
     break;
 
-  case 325:
-#line 2387 "asn1p_y.y"
+  case 327:
+#line 2395 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 326:
-#line 2391 "asn1p_y.y"
+  case 328:
+#line 2399 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 328:
-#line 2399 "asn1p_y.y"
+  case 330:
+#line 2407 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromdouble((yyvsp[(1) - (1)].a_dbl));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 329:
-#line 2430 "asn1p_y.y"
+  case 331:
+#line 2438 "asn1p_y.y"
     { memset(&(yyval.a_tag), 0, sizeof((yyval.a_tag))); }
     break;
 
-  case 330:
-#line 2431 "asn1p_y.y"
+  case 332:
+#line 2439 "asn1p_y.y"
     { (yyval.a_tag) = (yyvsp[(1) - (1)].a_tag); }
     break;
 
-  case 331:
-#line 2435 "asn1p_y.y"
+  case 333:
+#line 2443 "asn1p_y.y"
     {
 		(yyval.a_tag) = (yyvsp[(1) - (2)].a_tag);
 		(yyval.a_tag).tag_mode = (yyvsp[(2) - (2)].a_tag).tag_mode;
 	}
     break;
 
-  case 332:
-#line 2442 "asn1p_y.y"
+  case 334:
+#line 2450 "asn1p_y.y"
     {
 		(yyval.a_tag) = (yyvsp[(2) - (4)].a_tag);
 		(yyval.a_tag).tag_value = (yyvsp[(3) - (4)].a_int);
 	}
     break;
 
-  case 333:
-#line 2448 "asn1p_y.y"
+  case 335:
+#line 2456 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_CONTEXT_SPECIFIC; }
     break;
 
-  case 334:
-#line 2449 "asn1p_y.y"
+  case 336:
+#line 2457 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_UNIVERSAL; }
     break;
 
-  case 335:
-#line 2450 "asn1p_y.y"
+  case 337:
+#line 2458 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_APPLICATION; }
     break;
 
-  case 336:
-#line 2451 "asn1p_y.y"
+  case 338:
+#line 2459 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_PRIVATE; }
     break;
 
-  case 337:
-#line 2455 "asn1p_y.y"
+  case 339:
+#line 2463 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_DEFAULT; }
     break;
 
-  case 338:
-#line 2456 "asn1p_y.y"
+  case 340:
+#line 2464 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_IMPLICIT; }
     break;
 
-  case 339:
-#line 2457 "asn1p_y.y"
+  case 341:
+#line 2465 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_EXPLICIT; }
     break;
 
-  case 340:
-#line 2461 "asn1p_y.y"
+  case 342:
+#line 2469 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 341:
-#line 2465 "asn1p_y.y"
+  case 343:
+#line 2473 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 342:
-#line 2473 "asn1p_y.y"
+  case 344:
+#line 2481 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 343:
-#line 2480 "asn1p_y.y"
+  case 345:
+#line 2488 "asn1p_y.y"
     { (yyval.tv_str) = 0; }
     break;
 
-  case 344:
-#line 2481 "asn1p_y.y"
+  case 346:
+#line 2489 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 345:
-#line 2487 "asn1p_y.y"
+  case 347:
+#line 2495 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 346:
-#line 2494 "asn1p_y.y"
+  case 348:
+#line 2502 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
     }
     break;
 
-  case 347:
-#line 2500 "asn1p_y.y"
+  case 349:
+#line 2508 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromref((yyvsp[(1) - (1)].a_ref), 0);
     }
@@ -5044,7 +5056,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 5048 "asn1p_y.c"
+#line 5060 "asn1p_y.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5258,7 +5270,7 @@ yyreturn:
 }
 
 
-#line 2504 "asn1p_y.y"
+#line 2512 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 1f213d27..c81f5241 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -350,6 +350,7 @@ static asn1p_module_t *currentModule;
 %type	<a_type>		BasicTypeId_UniverationCompatible
 %type	<a_type>		BasicString
 %type	<tv_opaque>		Opaque
+%type	<tv_opaque>		OpaqueFirstToken
 %type	<a_tag>			Tag 		/* [UNIVERSAL 0] IMPLICIT */
 %type	<a_tag>			TagClass TagTypeValue TagPlicit
 %type	<a_tag>			optTag		/* [UNIVERSAL 0] IMPLICIT */
@@ -1566,7 +1567,7 @@ Value:
 		$$->value.choice_identifier.identifier = $1;
 		$$->value.choice_identifier.value = $3;
 	}
-	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
+	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque {
 		$$ = asn1p_value_frombuf($3.buf, $3.len, 0);
 		checkmem($$);
 		$$->type = ATV_UNPARSED;
@@ -1654,15 +1655,15 @@ RestrictedCharacterStringValue:
 	;
 
 Opaque:
-	TOK_opaque {
+    OpaqueFirstToken {
 		$$.len = $1.len + 1;
-		$$.buf = malloc($$.len + 1);
+		$$.buf = malloc(1 + $$.len + 1);
 		checkmem($$.buf);
 		$$.buf[0] = '{';
 		memcpy($$.buf + 1, $1.buf, $1.len);
 		$$.buf[$$.len] = '\0';
 		free($1.buf);
-	}
+    }
 	| Opaque TOK_opaque {
 		int newsize = $1.len + $2.len;
 		char *p = malloc(newsize + 1);
@@ -1677,6 +1678,13 @@ Opaque:
 	}
 	;
 
+OpaqueFirstToken:
+    TOK_opaque
+    | Identifier {
+        $$.len = strlen($1);
+        $$.buf = $1;
+    };
+
 BasicTypeId:
 	TOK_BOOLEAN { $$ = ASN_BASIC_BOOLEAN; }
 	| TOK_NULL { $$ = ASN_BASIC_NULL; }
@@ -1893,7 +1901,7 @@ SubtypeElements:
 	| InnerTypeConstraints  /* WITH COMPONENT[S] ... */
 	| PatternConstraint     /* PATTERN ... */
 	| ValueRange
-	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
+	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque {
 		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
diff --git a/tests/tests-asn1c-compiler/150-with-components-OK.asn1 b/tests/tests-asn1c-compiler/150-with-components-OK.asn1
new file mode 100644
index 00000000..40ea0002
--- /dev/null
+++ b/tests/tests-asn1c-compiler/150-with-components-OK.asn1
@@ -0,0 +1,25 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .150
+
+ModuleValueWithComponents
+	{ iso org(3) dod(6) internet(1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 150 }
+DEFINITIONS ::= BEGIN
+
+    EntityType ::= BIT STRING {app (0), enrol (1)} (SIZE (8))
+
+    GroupPermissions ::= SEQUENCE {
+        minChainDepth   INTEGER DEFAULT 1,
+        eeType          EntityType DEFAULT {app}
+    }
+
+    EnrolPermissions ::= GroupPermissions (WITH COMPONENTS {
+        minChainDepth (2),
+        eeType ({enrol})
+    })
+
+END
diff --git a/tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF b/tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF
new file mode 100644
index 00000000..ddc8944e
--- /dev/null
+++ b/tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF
@@ -0,0 +1,18 @@
+ModuleValueWithComponents { iso org(3) dod(6) internet(1) private(4)
+	enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 150 }
+DEFINITIONS ::=
+BEGIN
+
+EntityType ::= BIT STRING {
+    app(0),
+    enrol(1)
+} (SIZE(8))
+
+GroupPermissions ::= SEQUENCE {
+    minChainDepth	 INTEGER DEFAULT 1,
+    eeType	 EntityType DEFAULT {app}
+}
+
+EnrolPermissions ::= GroupPermissions (WITH COMPONENTS { minChainDepth (2), eeType ({enrol}) })
+
+END
-- 
2.26.2