]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[master] Merge branch 'trac5357' (shared network parsers update)
authorTomek Mrugalski <tomasz@isc.org>
Thu, 14 Sep 2017 10:02:38 +0000 (12:02 +0200)
committerTomek Mrugalski <tomasz@isc.org>
Thu, 14 Sep 2017 10:02:38 +0000 (12:02 +0200)
# Conflicts:
# src/bin/dhcp4/dhcp4_lexer.cc
# src/bin/dhcp4/dhcp4_parser.cc
# src/bin/dhcp4/dhcp4_parser.h
# src/bin/dhcp6/dhcp6_lexer.cc
# src/bin/dhcp6/dhcp6_parser.cc
# src/bin/dhcp6/dhcp6_parser.h

18 files changed:
1  2 
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.h
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/parser_unittest.cc
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/parser_unittest.cc

index bc9d7a346c0c011dbb7f6e6b832308abed73dad0,58c952c044cd18463e330f4d9301ebdb200ef8e9..b84b82fb35de884aaa725e822b1ec10376cd3900
@@@ -1542,28 -1324,28 +1324,28 @@@ static yyconst flex_int16_t yy_chk[1681
  static yy_state_type yy_last_accepting_state;
  static char *yy_last_accepting_cpos;
  
- extern int yy_flex_debug;
- int yy_flex_debug = 1;
+ extern int parser4__flex_debug;
+ int parser4__flex_debug = 1;
  
- static const flex_int16_t yy_rule_linenum[154] =
+ static yyconst flex_int16_t yy_rule_linenum[155] =
      {   0,
-       137,  139,  141,  146,  147,  152,  153,  154,  166,  169,
-       174,  181,  190,  199,  208,  217,  227,  236,  245,  254,
-       263,  272,  283,  292,  301,  310,  319,  329,  339,  349,
-       359,  369,  379,  389,  399,  409,  419,  429,  439,  448,
-       457,  466,  480,  495,  504,  513,  522,  531,  541,  550,
-       559,  568,  577,  586,  595,  604,  613,  622,  631,  641,
-       650,  659,  668,  677,  686,  695,  704,  713,  722,  731,
-       741,  751,  761,  770,  780,  790,  800,  810,  820,  829,
-       839,  848,  857,  866,  875,  884,  894,  904,  913,  922,
-       931,  940,  949,  958,  967,  976,  985,  994, 1003, 1012,
 -      134,  136,  138,  143,  144,  149,  150,  151,  163,  166,
 -      171,  178,  187,  196,  205,  214,  224,  233,  242,  251,
 -      260,  269,  280,  289,  298,  307,  316,  326,  336,  346,
 -      356,  366,  376,  386,  396,  406,  417,  428,  439,  448,
 -      458,  467,  476,  491,  507,  516,  525,  534,  543,  552,
 -      561,  571,  580,  589,  598,  608,  617,  626,  635,  644,
 -      654,  663,  672,  681,  690,  699,  708,  717,  726,  735,
 -      744,  754,  764,  774,  783,  793,  803,  813,  823,  833,
 -      842,  852,  861,  870,  879,  888,  898,  908,  918,  927,
 -      936,  945,  954,  963,  972,  981,  990,  999, 1008, 1017,
--
-      1021, 1030, 1039, 1048, 1057, 1066, 1075, 1084, 1093, 1102,
-      1111, 1120, 1129, 1138, 1147, 1156, 1166, 1176, 1186, 1196,
-      1206, 1216, 1226, 1236, 1246, 1255, 1264, 1273, 1282, 1291,
-      1300, 1310, 1320, 1332, 1343, 1356, 1454, 1459, 1464, 1469,
-      1470, 1471, 1472, 1473, 1474, 1476, 1494, 1507, 1512, 1516,
-      1518, 1520, 1522
 -     1026, 1035, 1044, 1053, 1062, 1071, 1080, 1089, 1098, 1107,
 -     1116, 1125, 1134, 1143, 1152, 1161, 1170, 1180, 1190, 1200,
 -     1210, 1220, 1230, 1240, 1250, 1260, 1269, 1278, 1287, 1296,
 -     1305, 1314, 1325, 1336, 1349, 1360, 1373, 1471, 1476, 1481,
 -     1486, 1487, 1488, 1489, 1490, 1491, 1493, 1511, 1524, 1529,
 -     1533, 1535, 1537, 1539
++      138,  140,  142,  147,  148,  153,  154,  155,  167,  170,
++      175,  182,  191,  200,  209,  218,  228,  237,  246,  255,
++      264,  273,  284,  293,  302,  311,  320,  330,  340,  350,
++      360,  370,  380,  390,  400,  410,  421,  432,  443,  452,
++      462,  471,  480,  495,  511,  520,  529,  538,  547,  557,
++      566,  576,  585,  594,  603,  613,  622,  631,  640,  649,
++      659,  668,  677,  686,  695,  704,  713,  722,  731,  740,
++      749,  759,  769,  779,  788,  798,  808,  818,  828,  838,
++      847,  857,  866,  875,  884,  893,  903,  913,  923,  932,
++      941,  950,  959,  968,  977,  986,  995, 1004, 1013, 1022,
++
++     1031, 1040, 1049, 1058, 1067, 1076, 1085, 1094, 1103, 1112,
++     1121, 1130, 1139, 1148, 1157, 1166, 1175, 1185, 1195, 1205,
++     1215, 1225, 1235, 1245, 1255, 1265, 1274, 1283, 1292, 1301,
++     1310, 1319, 1330, 1341, 1354, 1365, 1378, 1476, 1481, 1486,
++     1491, 1492, 1493, 1494, 1495, 1496, 1498, 1516, 1529, 1534,
++     1538, 1540, 1542, 1544
      } ;
  
  /* The intent behind this definition is that it'll catch
@@@ -1963,7 -1746,7 +1750,7 @@@ YY_DEC
      }
  
  
- #line 1966 "dhcp4_lexer.cc"
 -#line 1750 "dhcp4_lexer.cc"
++#line 1754 "dhcp4_lexer.cc"
  
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@@ -2041,17 -1824,17 +1828,17 @@@ do_action:   /* This label is used only t
  
  case 1:
  YY_RULE_SETUP
- #line 137 "dhcp4_lexer.ll"
 -#line 134 "dhcp4_lexer.ll"
++#line 138 "dhcp4_lexer.ll"
  ;
        YY_BREAK
  case 2:
  YY_RULE_SETUP
- #line 139 "dhcp4_lexer.ll"
 -#line 136 "dhcp4_lexer.ll"
++#line 140 "dhcp4_lexer.ll"
  ;
        YY_BREAK
  case 3:
  YY_RULE_SETUP
- #line 141 "dhcp4_lexer.ll"
 -#line 138 "dhcp4_lexer.ll"
++#line 142 "dhcp4_lexer.ll"
  {
    BEGIN(COMMENT);
    comment_start_line = driver.loc_.end.line;;
        YY_BREAK
  case 4:
  YY_RULE_SETUP
- #line 146 "dhcp4_lexer.ll"
 -#line 143 "dhcp4_lexer.ll"
++#line 147 "dhcp4_lexer.ll"
  BEGIN(INITIAL);
        YY_BREAK
  case 5:
  YY_RULE_SETUP
- #line 147 "dhcp4_lexer.ll"
 -#line 144 "dhcp4_lexer.ll"
++#line 148 "dhcp4_lexer.ll"
  ;
        YY_BREAK
  case YY_STATE_EOF(COMMENT):
- #line 148 "dhcp4_lexer.ll"
 -#line 145 "dhcp4_lexer.ll"
++#line 149 "dhcp4_lexer.ll"
  {
      isc_throw(Dhcp4ParseError, "Comment not closed. (/* in line " << comment_start_line);
  }
        YY_BREAK
  case 6:
  YY_RULE_SETUP
- #line 152 "dhcp4_lexer.ll"
 -#line 149 "dhcp4_lexer.ll"
++#line 153 "dhcp4_lexer.ll"
  BEGIN(DIR_ENTER);
        YY_BREAK
  case 7:
  YY_RULE_SETUP
- #line 153 "dhcp4_lexer.ll"
 -#line 150 "dhcp4_lexer.ll"
++#line 154 "dhcp4_lexer.ll"
  BEGIN(DIR_INCLUDE);
        YY_BREAK
  case 8:
  YY_RULE_SETUP
- #line 154 "dhcp4_lexer.ll"
 -#line 151 "dhcp4_lexer.ll"
++#line 155 "dhcp4_lexer.ll"
  {
      /* Include directive. */
  
  case YY_STATE_EOF(DIR_ENTER):
  case YY_STATE_EOF(DIR_INCLUDE):
  case YY_STATE_EOF(DIR_EXIT):
- #line 163 "dhcp4_lexer.ll"
 -#line 160 "dhcp4_lexer.ll"
++#line 164 "dhcp4_lexer.ll"
  {
      isc_throw(Dhcp4ParseError, "Directive not closed.");
  }
        YY_BREAK
  case 9:
  YY_RULE_SETUP
- #line 166 "dhcp4_lexer.ll"
 -#line 163 "dhcp4_lexer.ll"
++#line 167 "dhcp4_lexer.ll"
  BEGIN(INITIAL);
        YY_BREAK
  case 10:
  YY_RULE_SETUP
- #line 169 "dhcp4_lexer.ll"
 -#line 166 "dhcp4_lexer.ll"
++#line 170 "dhcp4_lexer.ll"
  {
      /* Ok, we found a with space. Let's ignore it and update loc variable. */
      driver.loc_.step();
  case 11:
  /* rule 11 can match eol */
  YY_RULE_SETUP
- #line 174 "dhcp4_lexer.ll"
 -#line 171 "dhcp4_lexer.ll"
++#line 175 "dhcp4_lexer.ll"
  {
      /* Newline found. Let's update the location and continue. */
-     driver.loc_.lines(yyleng);
+     driver.loc_.lines(parser4_leng);
      driver.loc_.step();
  }
        YY_BREAK
  case 12:
  YY_RULE_SETUP
- #line 181 "dhcp4_lexer.ll"
 -#line 178 "dhcp4_lexer.ll"
++#line 182 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONFIG:
        YY_BREAK
  case 13:
  YY_RULE_SETUP
- #line 190 "dhcp4_lexer.ll"
 -#line 187 "dhcp4_lexer.ll"
++#line 191 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 14:
  YY_RULE_SETUP
- #line 199 "dhcp4_lexer.ll"
 -#line 196 "dhcp4_lexer.ll"
++#line 200 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
        YY_BREAK
  case 15:
  YY_RULE_SETUP
- #line 208 "dhcp4_lexer.ll"
 -#line 205 "dhcp4_lexer.ll"
++#line 209 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
        YY_BREAK
  case 16:
  YY_RULE_SETUP
- #line 217 "dhcp4_lexer.ll"
 -#line 214 "dhcp4_lexer.ll"
++#line 218 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_SOCKET_TYPE:
        YY_BREAK
  case 17:
  YY_RULE_SETUP
- #line 227 "dhcp4_lexer.ll"
 -#line 224 "dhcp4_lexer.ll"
++#line 228 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
        YY_BREAK
  case 18:
  YY_RULE_SETUP
- #line 236 "dhcp4_lexer.ll"
 -#line 233 "dhcp4_lexer.ll"
++#line 237 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::INTERFACES_CONFIG:
        YY_BREAK
  case 19:
  YY_RULE_SETUP
- #line 245 "dhcp4_lexer.ll"
 -#line 242 "dhcp4_lexer.ll"
++#line 246 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 20:
  YY_RULE_SETUP
- #line 254 "dhcp4_lexer.ll"
 -#line 251 "dhcp4_lexer.ll"
++#line 255 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 21:
  YY_RULE_SETUP
- #line 263 "dhcp4_lexer.ll"
 -#line 260 "dhcp4_lexer.ll"
++#line 264 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOSTS_DATABASE:
        YY_BREAK
  case 22:
  YY_RULE_SETUP
- #line 272 "dhcp4_lexer.ll"
 -#line 269 "dhcp4_lexer.ll"
++#line 273 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 23:
  YY_RULE_SETUP
- #line 283 "dhcp4_lexer.ll"
 -#line 280 "dhcp4_lexer.ll"
++#line 284 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DATABASE_TYPE:
        YY_BREAK
  case 24:
  YY_RULE_SETUP
- #line 292 "dhcp4_lexer.ll"
 -#line 289 "dhcp4_lexer.ll"
++#line 293 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DATABASE_TYPE:
        YY_BREAK
  case 25:
  YY_RULE_SETUP
- #line 301 "dhcp4_lexer.ll"
 -#line 298 "dhcp4_lexer.ll"
++#line 302 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DATABASE_TYPE:
        YY_BREAK
  case 26:
  YY_RULE_SETUP
- #line 310 "dhcp4_lexer.ll"
 -#line 307 "dhcp4_lexer.ll"
++#line 311 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DATABASE_TYPE:
        YY_BREAK
  case 27:
  YY_RULE_SETUP
- #line 319 "dhcp4_lexer.ll"
 -#line 316 "dhcp4_lexer.ll"
++#line 320 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 28:
  YY_RULE_SETUP
- #line 329 "dhcp4_lexer.ll"
 -#line 326 "dhcp4_lexer.ll"
++#line 330 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 29:
  YY_RULE_SETUP
- #line 339 "dhcp4_lexer.ll"
 -#line 336 "dhcp4_lexer.ll"
++#line 340 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 30:
  YY_RULE_SETUP
- #line 349 "dhcp4_lexer.ll"
 -#line 346 "dhcp4_lexer.ll"
++#line 350 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 31:
  YY_RULE_SETUP
- #line 359 "dhcp4_lexer.ll"
 -#line 356 "dhcp4_lexer.ll"
++#line 360 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 32:
  YY_RULE_SETUP
- #line 369 "dhcp4_lexer.ll"
 -#line 366 "dhcp4_lexer.ll"
++#line 370 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 33:
  YY_RULE_SETUP
- #line 379 "dhcp4_lexer.ll"
 -#line 376 "dhcp4_lexer.ll"
++#line 380 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 34:
  YY_RULE_SETUP
- #line 389 "dhcp4_lexer.ll"
 -#line 386 "dhcp4_lexer.ll"
++#line 390 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 35:
  YY_RULE_SETUP
- #line 399 "dhcp4_lexer.ll"
 -#line 396 "dhcp4_lexer.ll"
++#line 400 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
        YY_BREAK
  case 36:
  YY_RULE_SETUP
- #line 409 "dhcp4_lexer.ll"
 -#line 406 "dhcp4_lexer.ll"
++#line 410 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 37:
  YY_RULE_SETUP
- #line 419 "dhcp4_lexer.ll"
 -#line 417 "dhcp4_lexer.ll"
++#line 421 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 38:
  YY_RULE_SETUP
- #line 429 "dhcp4_lexer.ll"
 -#line 428 "dhcp4_lexer.ll"
++#line 432 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 39:
  YY_RULE_SETUP
--#line 439 "dhcp4_lexer.ll"
++#line 443 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 40:
  YY_RULE_SETUP
--#line 448 "dhcp4_lexer.ll"
++#line 452 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
        YY_BREAK
  case 41:
  YY_RULE_SETUP
- #line 457 "dhcp4_lexer.ll"
 -#line 458 "dhcp4_lexer.ll"
++#line 462 "dhcp4_lexer.ll"
+ {
+     switch (driver.ctx_) {
+     case Parser4Context::DHCP4:
+         return Dhcp4Parser::make_SHARED_NETWORKS(driver.loc_);
+     default:
+         return Dhcp4Parser::make_STRING("shared-networks", driver.loc_);
+     }
+ }
+       YY_BREAK
+ case 42:
+ YY_RULE_SETUP
 -#line 467 "dhcp4_lexer.ll"
++#line 471 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 42:
+ case 43:
  YY_RULE_SETUP
- #line 466 "dhcp4_lexer.ll"
 -#line 476 "dhcp4_lexer.ll"
++#line 480 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 43:
+ case 44:
  YY_RULE_SETUP
- #line 480 "dhcp4_lexer.ll"
 -#line 491 "dhcp4_lexer.ll"
++#line 495 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LEASE_DATABASE:
      }
  }
        YY_BREAK
- case 44:
+ case 45:
  YY_RULE_SETUP
- #line 495 "dhcp4_lexer.ll"
 -#line 507 "dhcp4_lexer.ll"
++#line 511 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 45:
+ case 46:
  YY_RULE_SETUP
- #line 504 "dhcp4_lexer.ll"
 -#line 516 "dhcp4_lexer.ll"
++#line 520 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 46:
+ case 47:
  YY_RULE_SETUP
- #line 513 "dhcp4_lexer.ll"
 -#line 525 "dhcp4_lexer.ll"
++#line 529 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 47:
+ case 48:
  YY_RULE_SETUP
- #line 522 "dhcp4_lexer.ll"
 -#line 534 "dhcp4_lexer.ll"
++#line 538 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::POOLS:
      }
  }
        YY_BREAK
- case 48:
+ case 49:
  YY_RULE_SETUP
- #line 531 "dhcp4_lexer.ll"
 -#line 543 "dhcp4_lexer.ll"
++#line 547 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
 +    case isc::dhcp::Parser4Context::SUBNET4:
      case isc::dhcp::Parser4Context::POOLS:
          return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_);
      default:
      }
  }
        YY_BREAK
- case 49:
+ case 50:
  YY_RULE_SETUP
- #line 541 "dhcp4_lexer.ll"
 -#line 552 "dhcp4_lexer.ll"
++#line 557 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 50:
+ case 51:
  YY_RULE_SETUP
- #line 550 "dhcp4_lexer.ll"
 -#line 561 "dhcp4_lexer.ll"
++#line 566 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 51:
+ case 52:
  YY_RULE_SETUP
- #line 559 "dhcp4_lexer.ll"
 -#line 571 "dhcp4_lexer.ll"
++#line 576 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 52:
+ case 53:
  YY_RULE_SETUP
- #line 568 "dhcp4_lexer.ll"
 -#line 580 "dhcp4_lexer.ll"
++#line 585 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 53:
+ case 54:
  YY_RULE_SETUP
- #line 577 "dhcp4_lexer.ll"
 -#line 589 "dhcp4_lexer.ll"
++#line 594 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 54:
+ case 55:
  YY_RULE_SETUP
- #line 586 "dhcp4_lexer.ll"
 -#line 598 "dhcp4_lexer.ll"
++#line 603 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 55:
+ case 56:
  YY_RULE_SETUP
- #line 595 "dhcp4_lexer.ll"
 -#line 608 "dhcp4_lexer.ll"
++#line 613 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 56:
+ case 57:
  YY_RULE_SETUP
- #line 604 "dhcp4_lexer.ll"
 -#line 617 "dhcp4_lexer.ll"
++#line 622 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 57:
+ case 58:
  YY_RULE_SETUP
- #line 613 "dhcp4_lexer.ll"
 -#line 626 "dhcp4_lexer.ll"
++#line 631 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 58:
+ case 59:
  YY_RULE_SETUP
- #line 622 "dhcp4_lexer.ll"
 -#line 635 "dhcp4_lexer.ll"
++#line 640 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 59:
+ case 60:
  YY_RULE_SETUP
- #line 631 "dhcp4_lexer.ll"
 -#line 644 "dhcp4_lexer.ll"
++#line 649 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 60:
+ case 61:
  YY_RULE_SETUP
- #line 641 "dhcp4_lexer.ll"
 -#line 654 "dhcp4_lexer.ll"
++#line 659 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 61:
+ case 62:
  YY_RULE_SETUP
- #line 650 "dhcp4_lexer.ll"
 -#line 663 "dhcp4_lexer.ll"
++#line 668 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONFIG:
      }
  }
        YY_BREAK
- case 62:
+ case 63:
  YY_RULE_SETUP
- #line 659 "dhcp4_lexer.ll"
 -#line 672 "dhcp4_lexer.ll"
++#line 677 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LOGGING:
      }
  }
        YY_BREAK
- case 63:
+ case 64:
  YY_RULE_SETUP
- #line 668 "dhcp4_lexer.ll"
 -#line 681 "dhcp4_lexer.ll"
++#line 686 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LOGGERS:
      }
  }
        YY_BREAK
- case 64:
+ case 65:
  YY_RULE_SETUP
- #line 677 "dhcp4_lexer.ll"
 -#line 690 "dhcp4_lexer.ll"
++#line 695 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 65:
+ case 66:
  YY_RULE_SETUP
- #line 686 "dhcp4_lexer.ll"
 -#line 699 "dhcp4_lexer.ll"
++#line 704 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LOGGERS:
      }
  }
        YY_BREAK
- case 66:
+ case 67:
  YY_RULE_SETUP
- #line 695 "dhcp4_lexer.ll"
 -#line 708 "dhcp4_lexer.ll"
++#line 713 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 67:
+ case 68:
  YY_RULE_SETUP
- #line 704 "dhcp4_lexer.ll"
 -#line 717 "dhcp4_lexer.ll"
++#line 722 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 68:
+ case 69:
  YY_RULE_SETUP
- #line 713 "dhcp4_lexer.ll"
 -#line 726 "dhcp4_lexer.ll"
++#line 731 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 69:
+ case 70:
  YY_RULE_SETUP
- #line 722 "dhcp4_lexer.ll"
 -#line 735 "dhcp4_lexer.ll"
++#line 740 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::LOGGERS:
      }
  }
        YY_BREAK
- case 70:
+ case 71:
  YY_RULE_SETUP
- #line 731 "dhcp4_lexer.ll"
 -#line 744 "dhcp4_lexer.ll"
++#line 749 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 71:
+ case 72:
  YY_RULE_SETUP
- #line 741 "dhcp4_lexer.ll"
 -#line 754 "dhcp4_lexer.ll"
++#line 759 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 72:
+ case 73:
  YY_RULE_SETUP
- #line 751 "dhcp4_lexer.ll"
 -#line 764 "dhcp4_lexer.ll"
++#line 769 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CLIENT_CLASSES:
      }
  }
        YY_BREAK
- case 73:
+ case 74:
  YY_RULE_SETUP
- #line 761 "dhcp4_lexer.ll"
 -#line 774 "dhcp4_lexer.ll"
++#line 779 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 74:
+ case 75:
  YY_RULE_SETUP
- #line 770 "dhcp4_lexer.ll"
 -#line 783 "dhcp4_lexer.ll"
++#line 788 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 75:
+ case 76:
  YY_RULE_SETUP
- #line 780 "dhcp4_lexer.ll"
 -#line 793 "dhcp4_lexer.ll"
++#line 798 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 76:
+ case 77:
  YY_RULE_SETUP
- #line 790 "dhcp4_lexer.ll"
 -#line 803 "dhcp4_lexer.ll"
++#line 808 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 77:
+ case 78:
  YY_RULE_SETUP
- #line 800 "dhcp4_lexer.ll"
 -#line 813 "dhcp4_lexer.ll"
++#line 818 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 78:
+ case 79:
  YY_RULE_SETUP
- #line 810 "dhcp4_lexer.ll"
 -#line 823 "dhcp4_lexer.ll"
++#line 828 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 79:
+ case 80:
  YY_RULE_SETUP
- #line 820 "dhcp4_lexer.ll"
 -#line 833 "dhcp4_lexer.ll"
++#line 838 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RESERVATIONS:
      }
  }
        YY_BREAK
- case 80:
+ case 81:
  YY_RULE_SETUP
- #line 829 "dhcp4_lexer.ll"
 -#line 842 "dhcp4_lexer.ll"
++#line 847 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 81:
+ case 82:
  YY_RULE_SETUP
- #line 839 "dhcp4_lexer.ll"
 -#line 852 "dhcp4_lexer.ll"
++#line 857 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 82:
+ case 83:
  YY_RULE_SETUP
- #line 848 "dhcp4_lexer.ll"
 -#line 861 "dhcp4_lexer.ll"
++#line 866 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 83:
+ case 84:
  YY_RULE_SETUP
- #line 857 "dhcp4_lexer.ll"
 -#line 870 "dhcp4_lexer.ll"
++#line 875 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 84:
+ case 85:
  YY_RULE_SETUP
- #line 866 "dhcp4_lexer.ll"
 -#line 879 "dhcp4_lexer.ll"
++#line 884 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 85:
+ case 86:
  YY_RULE_SETUP
- #line 875 "dhcp4_lexer.ll"
 -#line 888 "dhcp4_lexer.ll"
++#line 893 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 86:
+ case 87:
  YY_RULE_SETUP
- #line 884 "dhcp4_lexer.ll"
 -#line 898 "dhcp4_lexer.ll"
++#line 903 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::RELAY:
      }
  }
        YY_BREAK
- case 87:
+ case 88:
  YY_RULE_SETUP
- #line 894 "dhcp4_lexer.ll"
 -#line 908 "dhcp4_lexer.ll"
++#line 913 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 88:
+ case 89:
  YY_RULE_SETUP
- #line 904 "dhcp4_lexer.ll"
 -#line 918 "dhcp4_lexer.ll"
++#line 923 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
      }
  }
        YY_BREAK
- case 89:
+ case 90:
  YY_RULE_SETUP
- #line 913 "dhcp4_lexer.ll"
 -#line 927 "dhcp4_lexer.ll"
++#line 932 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
      }
  }
        YY_BREAK
- case 90:
+ case 91:
  YY_RULE_SETUP
- #line 922 "dhcp4_lexer.ll"
 -#line 936 "dhcp4_lexer.ll"
++#line 941 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 91:
+ case 92:
  YY_RULE_SETUP
- #line 931 "dhcp4_lexer.ll"
 -#line 945 "dhcp4_lexer.ll"
++#line 950 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 92:
+ case 93:
  YY_RULE_SETUP
- #line 940 "dhcp4_lexer.ll"
 -#line 954 "dhcp4_lexer.ll"
++#line 959 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 93:
+ case 94:
  YY_RULE_SETUP
- #line 949 "dhcp4_lexer.ll"
 -#line 963 "dhcp4_lexer.ll"
++#line 968 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 94:
+ case 95:
  YY_RULE_SETUP
- #line 958 "dhcp4_lexer.ll"
 -#line 972 "dhcp4_lexer.ll"
++#line 977 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 95:
+ case 96:
  YY_RULE_SETUP
- #line 967 "dhcp4_lexer.ll"
 -#line 981 "dhcp4_lexer.ll"
++#line 986 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 96:
+ case 97:
  YY_RULE_SETUP
- #line 976 "dhcp4_lexer.ll"
 -#line 990 "dhcp4_lexer.ll"
++#line 995 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 97:
+ case 98:
  YY_RULE_SETUP
- #line 985 "dhcp4_lexer.ll"
 -#line 999 "dhcp4_lexer.ll"
++#line 1004 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 98:
+ case 99:
  YY_RULE_SETUP
- #line 994 "dhcp4_lexer.ll"
 -#line 1008 "dhcp4_lexer.ll"
++#line 1013 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 99:
+ case 100:
  YY_RULE_SETUP
- #line 1003 "dhcp4_lexer.ll"
 -#line 1017 "dhcp4_lexer.ll"
++#line 1022 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONTROL_SOCKET:
      }
  }
        YY_BREAK
- case 100:
+ case 101:
  YY_RULE_SETUP
- #line 1012 "dhcp4_lexer.ll"
 -#line 1026 "dhcp4_lexer.ll"
++#line 1031 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONTROL_SOCKET:
      }
  }
        YY_BREAK
- case 101:
+ case 102:
  YY_RULE_SETUP
- #line 1021 "dhcp4_lexer.ll"
 -#line 1035 "dhcp4_lexer.ll"
++#line 1040 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 102:
+ case 103:
  YY_RULE_SETUP
- #line 1030 "dhcp4_lexer.ll"
 -#line 1044 "dhcp4_lexer.ll"
++#line 1049 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 103:
+ case 104:
  YY_RULE_SETUP
- #line 1039 "dhcp4_lexer.ll"
 -#line 1053 "dhcp4_lexer.ll"
++#line 1058 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 104:
+ case 105:
  YY_RULE_SETUP
- #line 1048 "dhcp4_lexer.ll"
 -#line 1062 "dhcp4_lexer.ll"
++#line 1067 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 105:
+ case 106:
  YY_RULE_SETUP
- #line 1057 "dhcp4_lexer.ll"
 -#line 1071 "dhcp4_lexer.ll"
++#line 1076 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 106:
+ case 107:
  YY_RULE_SETUP
- #line 1066 "dhcp4_lexer.ll"
 -#line 1080 "dhcp4_lexer.ll"
++#line 1085 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 107:
+ case 108:
  YY_RULE_SETUP
- #line 1075 "dhcp4_lexer.ll"
 -#line 1089 "dhcp4_lexer.ll"
++#line 1094 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 108:
+ case 109:
  YY_RULE_SETUP
- #line 1084 "dhcp4_lexer.ll"
 -#line 1098 "dhcp4_lexer.ll"
++#line 1103 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 109:
+ case 110:
  YY_RULE_SETUP
- #line 1093 "dhcp4_lexer.ll"
 -#line 1107 "dhcp4_lexer.ll"
++#line 1112 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 110:
+ case 111:
  YY_RULE_SETUP
- #line 1102 "dhcp4_lexer.ll"
 -#line 1116 "dhcp4_lexer.ll"
++#line 1121 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 111:
+ case 112:
  YY_RULE_SETUP
- #line 1111 "dhcp4_lexer.ll"
 -#line 1125 "dhcp4_lexer.ll"
++#line 1130 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 112:
+ case 113:
  YY_RULE_SETUP
- #line 1120 "dhcp4_lexer.ll"
 -#line 1134 "dhcp4_lexer.ll"
++#line 1139 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 113:
+ case 114:
  YY_RULE_SETUP
- #line 1129 "dhcp4_lexer.ll"
 -#line 1143 "dhcp4_lexer.ll"
++#line 1148 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 114:
+ case 115:
  YY_RULE_SETUP
- #line 1138 "dhcp4_lexer.ll"
 -#line 1152 "dhcp4_lexer.ll"
++#line 1157 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 115:
+ case 116:
  YY_RULE_SETUP
- #line 1147 "dhcp4_lexer.ll"
 -#line 1161 "dhcp4_lexer.ll"
++#line 1166 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP_DDNS:
      }
  }
        YY_BREAK
- case 116:
+ case 117:
  YY_RULE_SETUP
- #line 1156 "dhcp4_lexer.ll"
 -#line 1170 "dhcp4_lexer.ll"
++#line 1175 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 117:
+ case 118:
  YY_RULE_SETUP
- #line 1166 "dhcp4_lexer.ll"
 -#line 1180 "dhcp4_lexer.ll"
++#line 1185 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 118:
+ case 119:
  YY_RULE_SETUP
- #line 1176 "dhcp4_lexer.ll"
 -#line 1190 "dhcp4_lexer.ll"
++#line 1195 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 119:
+ case 120:
  YY_RULE_SETUP
- #line 1186 "dhcp4_lexer.ll"
 -#line 1200 "dhcp4_lexer.ll"
++#line 1205 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 120:
+ case 121:
  YY_RULE_SETUP
- #line 1196 "dhcp4_lexer.ll"
 -#line 1210 "dhcp4_lexer.ll"
++#line 1215 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 121:
+ case 122:
  YY_RULE_SETUP
- #line 1206 "dhcp4_lexer.ll"
 -#line 1220 "dhcp4_lexer.ll"
++#line 1225 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 122:
+ case 123:
  YY_RULE_SETUP
- #line 1216 "dhcp4_lexer.ll"
 -#line 1230 "dhcp4_lexer.ll"
++#line 1235 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 123:
+ case 124:
  YY_RULE_SETUP
- #line 1226 "dhcp4_lexer.ll"
 -#line 1240 "dhcp4_lexer.ll"
++#line 1245 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 124:
+ case 125:
  YY_RULE_SETUP
- #line 1236 "dhcp4_lexer.ll"
 -#line 1250 "dhcp4_lexer.ll"
++#line 1255 "dhcp4_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
      return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
  }
        YY_BREAK
- case 125:
+ case 126:
  YY_RULE_SETUP
- #line 1246 "dhcp4_lexer.ll"
 -#line 1260 "dhcp4_lexer.ll"
++#line 1265 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONFIG:
      }
  }
        YY_BREAK
- case 126:
+ case 127:
  YY_RULE_SETUP
- #line 1255 "dhcp4_lexer.ll"
 -#line 1269 "dhcp4_lexer.ll"
++#line 1274 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONFIG:
      }
  }
        YY_BREAK
- case 127:
+ case 128:
  YY_RULE_SETUP
- #line 1264 "dhcp4_lexer.ll"
 -#line 1278 "dhcp4_lexer.ll"
++#line 1283 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::CONFIG:
      }
  }
        YY_BREAK
- case 128:
+ case 129:
  YY_RULE_SETUP
- #line 1273 "dhcp4_lexer.ll"
 -#line 1287 "dhcp4_lexer.ll"
++#line 1292 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 129:
+ case 130:
  YY_RULE_SETUP
- #line 1282 "dhcp4_lexer.ll"
 -#line 1296 "dhcp4_lexer.ll"
++#line 1301 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 130:
+ case 131:
  YY_RULE_SETUP
- #line 1291 "dhcp4_lexer.ll"
 -#line 1305 "dhcp4_lexer.ll"
++#line 1310 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 131:
+ case 132:
  YY_RULE_SETUP
- #line 1300 "dhcp4_lexer.ll"
 -#line 1314 "dhcp4_lexer.ll"
++#line 1319 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 132:
+ case 133:
  YY_RULE_SETUP
- #line 1310 "dhcp4_lexer.ll"
 -#line 1325 "dhcp4_lexer.ll"
++#line 1330 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 133:
+ case 134:
  YY_RULE_SETUP
- #line 1320 "dhcp4_lexer.ll"
 -#line 1336 "dhcp4_lexer.ll"
++#line 1341 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::DHCP4:
      }
  }
        YY_BREAK
- case 134:
+ case 135:
  YY_RULE_SETUP
- #line 1332 "dhcp4_lexer.ll"
 -#line 1349 "dhcp4_lexer.ll"
++#line 1354 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 135:
+ case 136:
  YY_RULE_SETUP
- #line 1343 "dhcp4_lexer.ll"
 -#line 1360 "dhcp4_lexer.ll"
++#line 1365 "dhcp4_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser4Context::SUBNET4:
      }
  }
        YY_BREAK
- case 136:
+ case 137:
  YY_RULE_SETUP
- #line 1356 "dhcp4_lexer.ll"
 -#line 1373 "dhcp4_lexer.ll"
++#line 1378 "dhcp4_lexer.ll"
  {
      /* A string has been matched. It contains the actual string and single quotes.
         We need to get those quotes out of the way and just use its content, e.g.
      return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
  }
        YY_BREAK
- case 137:
- /* rule 137 can match eol */
+ case 138:
+ /* rule 138 can match eol */
  YY_RULE_SETUP
- #line 1454 "dhcp4_lexer.ll"
 -#line 1471 "dhcp4_lexer.ll"
++#line 1476 "dhcp4_lexer.ll"
  {
      /* Bad string with a forbidden control character inside */
-     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+     driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
  }
        YY_BREAK
- case 138:
- /* rule 138 can match eol */
+ case 139:
+ /* rule 139 can match eol */
  YY_RULE_SETUP
- #line 1459 "dhcp4_lexer.ll"
 -#line 1476 "dhcp4_lexer.ll"
++#line 1481 "dhcp4_lexer.ll"
  {
      /* Bad string with a bad escape inside */
-     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+     driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
  }
        YY_BREAK
- case 139:
+ case 140:
  YY_RULE_SETUP
- #line 1464 "dhcp4_lexer.ll"
 -#line 1481 "dhcp4_lexer.ll"
++#line 1486 "dhcp4_lexer.ll"
  {
      /* Bad string with an open escape at the end */
-     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+     driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
  }
        YY_BREAK
- case 140:
+ case 141:
  YY_RULE_SETUP
- #line 1469 "dhcp4_lexer.ll"
 -#line 1486 "dhcp4_lexer.ll"
++#line 1491 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
- case 141:
+ case 142:
  YY_RULE_SETUP
- #line 1470 "dhcp4_lexer.ll"
 -#line 1487 "dhcp4_lexer.ll"
++#line 1492 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
- case 142:
+ case 143:
  YY_RULE_SETUP
- #line 1471 "dhcp4_lexer.ll"
 -#line 1488 "dhcp4_lexer.ll"
++#line 1493 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
- case 143:
+ case 144:
  YY_RULE_SETUP
- #line 1472 "dhcp4_lexer.ll"
 -#line 1489 "dhcp4_lexer.ll"
++#line 1494 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
- case 144:
+ case 145:
  YY_RULE_SETUP
- #line 1473 "dhcp4_lexer.ll"
 -#line 1490 "dhcp4_lexer.ll"
++#line 1495 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
- case 145:
+ case 146:
  YY_RULE_SETUP
- #line 1474 "dhcp4_lexer.ll"
 -#line 1491 "dhcp4_lexer.ll"
++#line 1496 "dhcp4_lexer.ll"
  { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
- case 146:
+ case 147:
  YY_RULE_SETUP
- #line 1476 "dhcp4_lexer.ll"
 -#line 1493 "dhcp4_lexer.ll"
++#line 1498 "dhcp4_lexer.ll"
  {
      /* An integer was found. */
-     std::string tmp(yytext);
+     std::string tmp(parser4_text);
      int64_t integer = 0;
      try {
          /* In substring we want to use negative values (e.g. -1).
      return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
  }
        YY_BREAK
- case 147:
+ case 148:
  YY_RULE_SETUP
- #line 1494 "dhcp4_lexer.ll"
 -#line 1511 "dhcp4_lexer.ll"
++#line 1516 "dhcp4_lexer.ll"
  {
      /* A floating point was found. */
-     std::string tmp(yytext);
+     std::string tmp(parser4_text);
      double fp = 0.0;
      try {
          fp = boost::lexical_cast<double>(tmp);
      return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
  }
        YY_BREAK
- case 148:
+ case 149:
  YY_RULE_SETUP
- #line 1507 "dhcp4_lexer.ll"
 -#line 1524 "dhcp4_lexer.ll"
++#line 1529 "dhcp4_lexer.ll"
  {
-     string tmp(yytext);
+     string tmp(parser4_text);
      return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
  }
        YY_BREAK
- case 149:
+ case 150:
  YY_RULE_SETUP
- #line 1512 "dhcp4_lexer.ll"
 -#line 1529 "dhcp4_lexer.ll"
++#line 1534 "dhcp4_lexer.ll"
  {
     return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
  }
        YY_BREAK
- case 150:
+ case 151:
  YY_RULE_SETUP
- #line 1516 "dhcp4_lexer.ll"
 -#line 1533 "dhcp4_lexer.ll"
++#line 1538 "dhcp4_lexer.ll"
  driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
- case 151:
+ case 152:
  YY_RULE_SETUP
- #line 1518 "dhcp4_lexer.ll"
 -#line 1535 "dhcp4_lexer.ll"
++#line 1540 "dhcp4_lexer.ll"
  driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
- case 152:
+ case 153:
  YY_RULE_SETUP
- #line 1520 "dhcp4_lexer.ll"
 -#line 1537 "dhcp4_lexer.ll"
++#line 1542 "dhcp4_lexer.ll"
  driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
- case 153:
+ case 154:
  YY_RULE_SETUP
- #line 1522 "dhcp4_lexer.ll"
- driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
 -#line 1539 "dhcp4_lexer.ll"
++#line 1544 "dhcp4_lexer.ll"
+ driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
  case YY_STATE_EOF(INITIAL):
- #line 1524 "dhcp4_lexer.ll"
 -#line 1541 "dhcp4_lexer.ll"
++#line 1546 "dhcp4_lexer.ll"
  {
      if (driver.states_.empty()) {
          return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
      BEGIN(DIR_EXIT);
  }
        YY_BREAK
- case 154:
+ case 155:
  YY_RULE_SETUP
- #line 1547 "dhcp4_lexer.ll"
 -#line 1564 "dhcp4_lexer.ll"
++#line 1569 "dhcp4_lexer.ll"
  ECHO;
        YY_BREAK
- #line 3933 "dhcp4_lexer.cc"
 -#line 3740 "dhcp4_lexer.cc"
++#line 3745 "dhcp4_lexer.cc"
  
        case YY_END_OF_BUFFER:
                {
@@@ -5035,7 -4839,8 +4844,8 @@@ void parser4_free (void * ptr 
  
  /* %ok-for-header */
  
- #line 1547 "dhcp4_lexer.ll"
 -#line 1564 "dhcp4_lexer.ll"
++#line 1569 "dhcp4_lexer.ll"
  
  
  using namespace isc::dhcp;
Simple merge
index 5c2f0011a42fdb60709f71ab2c801b5f54adb2d0,6c54dc30ea241b6c44c120908ac8cf6a01d6fe0c..7921dae934e2581fa4105cbd5f4dd60bdeb254f5
@@@ -253,29 -253,29 +253,29 @@@ namespace isc { namespace dhcp 
    {
        switch (that.type_get ())
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.move< ElementPtr > (that.value);
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.move< bool > (that.value);
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.move< double > (that.value);
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.move< int64_t > (that.value);
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.move< std::string > (that.value);
          break;
  
      state = that.state;
        switch (that.type_get ())
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.copy< ElementPtr > (that.value);
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.copy< bool > (that.value);
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.copy< double > (that.value);
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.copy< int64_t > (that.value);
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.copy< std::string > (that.value);
          break;
  
          << yysym.location << ": ";
      switch (yytype)
      {
--            case 142: // "constant string"
++            case 143: // "constant string"
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< std::string > (); }
  #line 364 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< int64_t > (); }
  #line 371 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< double > (); }
  #line 378 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< bool > (); }
  #line 385 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 160: // value
 -      case 159: // value
++      case 161: // value
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 392 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 164: // map_value
 -      case 163: // map_value
++      case 165: // map_value
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 399 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 202: // socket_type
 -      case 201: // socket_type
++      case 203: // socket_type
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 406 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 212: // db_type
 -      case 211: // db_type
++      case 213: // db_type
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 413 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 289: // hr_mode
 -      case 288: // hr_mode
++      case 290: // hr_mode
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 420 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 424: // ncr_protocol_value
 -      case 429: // ncr_protocol_value
++      case 433: // ncr_protocol_value
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 427 "dhcp4_parser.cc" // lalr1.cc:636
          break;
  
-       case 432: // replace_client_name_value
 -      case 437: // replace_client_name_value
++      case 441: // replace_client_name_value
  
- #line 218 "dhcp4_parser.yy" // lalr1.cc:636
 -#line 219 "dhcp4_parser.yy" // lalr1.cc:636
++#line 220 "dhcp4_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 434 "dhcp4_parser.cc" // lalr1.cc:636
          break;
           when using variants.  */
          switch (yyr1_[yyn])
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          yylhs.value.build< ElementPtr > ();
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          yylhs.value.build< bool > ();
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          yylhs.value.build< double > ();
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          yylhs.value.build< int64_t > ();
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          yylhs.value.build< std::string > ();
          break;
  
            switch (yyn)
              {
    case 2:
- #line 227 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 228 "dhcp4_parser.yy" // lalr1.cc:859
++#line 229 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.NO_KEYWORD; }
  #line 680 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 4:
- #line 228 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 229 "dhcp4_parser.yy" // lalr1.cc:859
++#line 230 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.CONFIG; }
  #line 686 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 6:
- #line 229 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 230 "dhcp4_parser.yy" // lalr1.cc:859
++#line 231 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.DHCP4; }
  #line 692 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 8:
- #line 230 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 231 "dhcp4_parser.yy" // lalr1.cc:859
++#line 232 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
  #line 698 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 10:
- #line 231 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 232 "dhcp4_parser.yy" // lalr1.cc:859
++#line 233 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.SUBNET4; }
  #line 704 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 12:
- #line 232 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 233 "dhcp4_parser.yy" // lalr1.cc:859
++#line 234 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.POOLS; }
  #line 710 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 14:
- #line 233 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 234 "dhcp4_parser.yy" // lalr1.cc:859
++#line 235 "dhcp4_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.RESERVATIONS; }
  #line 716 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 16:
- #line 234 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 235 "dhcp4_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.OPTION_DEF; }
++#line 236 "dhcp4_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.DHCP4; }
  #line 722 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 18:
- #line 235 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 236 "dhcp4_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.OPTION_DATA; }
++#line 237 "dhcp4_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.OPTION_DEF; }
  #line 728 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 20:
- #line 236 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 237 "dhcp4_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
++#line 238 "dhcp4_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.OPTION_DATA; }
  #line 734 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 22:
- #line 237 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 238 "dhcp4_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.DHCP_DDNS; }
++#line 239 "dhcp4_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
  #line 740 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 24:
- #line 238 "dhcp4_parser.yy" // lalr1.cc:859
 -#line 246 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
++#line 240 "dhcp4_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.DHCP_DDNS; }
  #line 746 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 25:
 -#line 247 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 752 "dhcp4_parser.cc" // lalr1.cc:859
 -    break;
 -
    case 26:
- #line 246 "dhcp4_parser.yy" // lalr1.cc:859
+ #line 248 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 758 "dhcp4_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 752 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 27:
- #line 247 "dhcp4_parser.yy" // lalr1.cc:859
+ #line 249 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 764 "dhcp4_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 758 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 28:
- #line 248 "dhcp4_parser.yy" // lalr1.cc:859
+ #line 250 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 -#line 770 "dhcp4_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 764 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 29:
- #line 249 "dhcp4_parser.yy" // lalr1.cc:859
+ #line 251 "dhcp4_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 -#line 776 "dhcp4_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 770 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
    case 30:
- #line 250 "dhcp4_parser.yy" // lalr1.cc:859
+ #line 252 "dhcp4_parser.yy" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 +#line 776 "dhcp4_parser.cc" // lalr1.cc:859
 +    break;
 +
 +  case 31:
- #line 251 "dhcp4_parser.yy" // lalr1.cc:859
++#line 253 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
  #line 782 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 31:
 -#line 255 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 32:
- #line 252 "dhcp4_parser.yy" // lalr1.cc:859
++#line 254 "dhcp4_parser.yy" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 +#line 788 "dhcp4_parser.cc" // lalr1.cc:859
 +    break;
 +
 +  case 33:
- #line 255 "dhcp4_parser.yy" // lalr1.cc:859
++#line 257 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Push back the JSON value on the stack
      ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
  }
 -#line 791 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 797 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 32:
 -#line 260 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 34:
- #line 260 "dhcp4_parser.yy" // lalr1.cc:859
++#line 262 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 802 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 808 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 33:
 -#line 265 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 35:
- #line 265 "dhcp4_parser.yy" // lalr1.cc:859
++#line 267 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // map parsing completed. If we ever want to do any wrap up
      // (maybe some sanity checking), this would be the best place
      // for it.
  }
 -#line 812 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 818 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 34:
 -#line 271 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 36:
- #line 271 "dhcp4_parser.yy" // lalr1.cc:859
++#line 273 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 -#line 818 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 824 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 37:
 -#line 278 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 39:
- #line 278 "dhcp4_parser.yy" // lalr1.cc:859
++#line 280 "dhcp4_parser.yy" // lalr1.cc:859
      {
                    // map containing a single entry
                    ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 827 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 833 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 38:
 -#line 282 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 40:
- #line 282 "dhcp4_parser.yy" // lalr1.cc:859
++#line 284 "dhcp4_parser.yy" // lalr1.cc:859
      {
                    // map consisting of a shorter map followed by
                    // comma and string:value
                    ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 837 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 843 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 39:
 -#line 289 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 41:
- #line 289 "dhcp4_parser.yy" // lalr1.cc:859
++#line 291 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(l);
  }
 -#line 846 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 852 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 40:
 -#line 292 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 42:
- #line 292 "dhcp4_parser.yy" // lalr1.cc:859
++#line 294 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // list parsing complete. Put any sanity checking here
  }
 -#line 854 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 860 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 43:
 -#line 300 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 45:
- #line 300 "dhcp4_parser.yy" // lalr1.cc:859
++#line 302 "dhcp4_parser.yy" // lalr1.cc:859
      {
                    // List consisting of a single element.
                    ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 863 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 869 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 44:
 -#line 304 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 46:
- #line 304 "dhcp4_parser.yy" // lalr1.cc:859
++#line 306 "dhcp4_parser.yy" // lalr1.cc:859
      {
                    // List ending with , and a value.
                    ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 872 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 878 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 45:
 -#line 311 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 47:
- #line 311 "dhcp4_parser.yy" // lalr1.cc:859
++#line 313 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // List parsing about to start
  }
 -#line 880 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 886 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 46:
 -#line 313 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 48:
- #line 313 "dhcp4_parser.yy" // lalr1.cc:859
++#line 315 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // list parsing complete. Put any sanity checking here
      //ctx.stack_.pop_back();
  }
 -#line 889 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 895 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 49:
 -#line 322 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 51:
- #line 322 "dhcp4_parser.yy" // lalr1.cc:859
++#line 324 "dhcp4_parser.yy" // lalr1.cc:859
      {
                            ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                            ctx.stack_.back()->add(s);
                            }
 -#line 898 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 904 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 50:
 -#line 326 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 52:
- #line 326 "dhcp4_parser.yy" // lalr1.cc:859
++#line 328 "dhcp4_parser.yy" // lalr1.cc:859
      {
                            ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                            ctx.stack_.back()->add(s);
                            }
 -#line 907 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 913 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 51:
 -#line 337 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 53:
- #line 337 "dhcp4_parser.yy" // lalr1.cc:859
++#line 339 "dhcp4_parser.yy" // lalr1.cc:859
      {
      const std::string& where = ctx.contextName();
      const std::string& keyword = yystack_[1].value.as< std::string > ();
      error(yystack_[1].location,
            "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
  }
 -#line 918 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 924 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 52:
 -#line 347 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 54:
- #line 347 "dhcp4_parser.yy" // lalr1.cc:859
++#line 349 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 929 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 935 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 53:
 -#line 352 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 55:
- #line 352 "dhcp4_parser.yy" // lalr1.cc:859
++#line 354 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // map parsing completed. If we ever want to do any wrap up
      // (maybe some sanity checking), this would be the best place
      // for it.
 +
 +    // Dhcp4 is required
 +    ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
  }
 -#line 939 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 948 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 62:
 -#line 373 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 64:
- #line 376 "dhcp4_parser.yy" // lalr1.cc:859
++#line 378 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ctx.stack_.push_back(m);
      ctx.enter(ctx.DHCP4);
  }
 -#line 952 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 961 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 63:
 -#line 380 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 65:
- #line 383 "dhcp4_parser.yy" // lalr1.cc:859
++#line 385 "dhcp4_parser.yy" // lalr1.cc:859
      {
 -    // map parsing completed. If we ever want to do any wrap up
 -    // (maybe some sanity checking), this would be the best place
 -    // for it.
 +    // No global parameter is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 964 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 971 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 64:
 -#line 390 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 66:
- #line 391 "dhcp4_parser.yy" // lalr1.cc:859
++#line 393 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the Dhcp4 map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 974 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 981 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
 -  case 65:
 -#line 394 "dhcp4_parser.yy" // lalr1.cc:859
 +  case 67:
- #line 395 "dhcp4_parser.yy" // lalr1.cc:859
++#line 397 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // No global parameter is required
      // parsing completed
  }
 -#line 982 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 990 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 91:
- #line 429 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 90:
 -#line 428 "dhcp4_parser.yy" // lalr1.cc:859
++  case 92:
++#line 432 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("valid-lifetime", prf);
  }
 -#line 991 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 999 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 92:
- #line 434 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 91:
 -#line 433 "dhcp4_parser.yy" // lalr1.cc:859
++  case 93:
++#line 437 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("renew-timer", prf);
  }
 -#line 1000 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1008 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 93:
- #line 439 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 92:
 -#line 438 "dhcp4_parser.yy" // lalr1.cc:859
++  case 94:
++#line 442 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("rebind-timer", prf);
  }
 -#line 1009 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1017 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 94:
- #line 444 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 93:
 -#line 443 "dhcp4_parser.yy" // lalr1.cc:859
++  case 95:
++#line 447 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("decline-probation-period", dpp);
  }
 -#line 1018 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1026 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 95:
- #line 449 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 94:
 -#line 448 "dhcp4_parser.yy" // lalr1.cc:859
++  case 96:
++#line 452 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("echo-client-id", echo);
  }
 -#line 1027 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1035 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 96:
- #line 454 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 95:
 -#line 453 "dhcp4_parser.yy" // lalr1.cc:859
++  case 97:
++#line 457 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("match-client-id", match);
  }
 -#line 1036 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1044 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 97:
- #line 460 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 96:
 -#line 459 "dhcp4_parser.yy" // lalr1.cc:859
++  case 98:
++#line 463 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interfaces-config", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.INTERFACES_CONFIG);
  }
 -#line 1047 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1055 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 98:
- #line 465 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 97:
 -#line 464 "dhcp4_parser.yy" // lalr1.cc:859
++  case 99:
++#line 468 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // No interfaces config param is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1056 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1065 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 104:
- #line 480 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 103:
 -#line 478 "dhcp4_parser.yy" // lalr1.cc:859
++  case 105:
++#line 483 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the interfaces-config map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1066 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1075 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 105:
- #line 484 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 104:
 -#line 482 "dhcp4_parser.yy" // lalr1.cc:859
++  case 106:
++#line 487 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // No interfaces config param is required
      // parsing completed
  }
 -#line 1074 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1084 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 106:
- #line 489 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 105:
 -#line 486 "dhcp4_parser.yy" // lalr1.cc:859
++  case 107:
++#line 492 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interfaces", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1085 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1095 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 107:
- #line 494 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 106:
 -#line 491 "dhcp4_parser.yy" // lalr1.cc:859
++  case 108:
++#line 497 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1094 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1104 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 108:
- #line 499 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 107:
 -#line 496 "dhcp4_parser.yy" // lalr1.cc:859
++  case 109:
++#line 502 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.DHCP_SOCKET_TYPE);
  }
 -#line 1102 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1112 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 109:
- #line 501 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 108:
 -#line 498 "dhcp4_parser.yy" // lalr1.cc:859
++  case 110:
++#line 504 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1111 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1121 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 110:
- #line 506 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 109:
 -#line 503 "dhcp4_parser.yy" // lalr1.cc:859
++  case 111:
++#line 509 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
 -#line 1117 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1127 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 111:
- #line 507 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 110:
 -#line 504 "dhcp4_parser.yy" // lalr1.cc:859
++  case 112:
++#line 510 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
 -#line 1123 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1133 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 112:
- #line 510 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 111:
 -#line 507 "dhcp4_parser.yy" // lalr1.cc:859
++  case 113:
++#line 513 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("re-detect", b);
  }
 -#line 1132 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1142 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 113:
- #line 516 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 112:
 -#line 513 "dhcp4_parser.yy" // lalr1.cc:859
++  case 114:
++#line 519 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("lease-database", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.LEASE_DATABASE);
  }
 -#line 1143 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1153 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 114:
- #line 521 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 113:
 -#line 518 "dhcp4_parser.yy" // lalr1.cc:859
++  case 115:
++#line 524 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The type parameter is required
 +    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1152 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1164 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 115:
- #line 528 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 114:
 -#line 523 "dhcp4_parser.yy" // lalr1.cc:859
++  case 116:
++#line 531 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hosts-database", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.HOSTS_DATABASE);
  }
 -#line 1163 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1175 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 116:
- #line 533 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 115:
 -#line 528 "dhcp4_parser.yy" // lalr1.cc:859
++  case 117:
++#line 536 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The type parameter is required
 +    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1172 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1186 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 132:
- #line 559 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 131:
 -#line 552 "dhcp4_parser.yy" // lalr1.cc:859
++  case 133:
++#line 562 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.DATABASE_TYPE);
  }
 -#line 1180 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1194 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 133:
- #line 561 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 132:
 -#line 554 "dhcp4_parser.yy" // lalr1.cc:859
++  case 134:
++#line 564 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1189 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1203 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 134:
- #line 566 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 133:
 -#line 559 "dhcp4_parser.yy" // lalr1.cc:859
++  case 135:
++#line 569 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 -#line 1195 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1209 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 135:
- #line 567 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 134:
 -#line 560 "dhcp4_parser.yy" // lalr1.cc:859
++  case 136:
++#line 570 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1201 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1215 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 136:
- #line 568 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 135:
 -#line 561 "dhcp4_parser.yy" // lalr1.cc:859
++  case 137:
++#line 571 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1207 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1221 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 137:
- #line 569 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 136:
 -#line 562 "dhcp4_parser.yy" // lalr1.cc:859
++  case 138:
++#line 572 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1213 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1227 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 138:
- #line 572 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 137:
 -#line 565 "dhcp4_parser.yy" // lalr1.cc:859
++  case 139:
++#line 575 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1221 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1235 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 139:
- #line 574 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 138:
 -#line 567 "dhcp4_parser.yy" // lalr1.cc:859
++  case 140:
++#line 577 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("user", user);
      ctx.leave();
  }
 -#line 1231 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1245 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 140:
- #line 580 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 139:
 -#line 573 "dhcp4_parser.yy" // lalr1.cc:859
++  case 141:
++#line 583 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1239 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1253 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 141:
- #line 582 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 140:
 -#line 575 "dhcp4_parser.yy" // lalr1.cc:859
++  case 142:
++#line 585 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("password", pwd);
      ctx.leave();
  }
 -#line 1249 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1263 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 142:
- #line 588 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 141:
 -#line 581 "dhcp4_parser.yy" // lalr1.cc:859
++  case 143:
++#line 591 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1257 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1271 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 143:
- #line 590 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 142:
 -#line 583 "dhcp4_parser.yy" // lalr1.cc:859
++  case 144:
++#line 593 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("host", h);
      ctx.leave();
  }
 -#line 1267 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1281 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 144:
- #line 596 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 143:
 -#line 589 "dhcp4_parser.yy" // lalr1.cc:859
++  case 145:
++#line 599 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("port", p);
  }
 -#line 1276 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1290 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 145:
- #line 601 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 144:
 -#line 594 "dhcp4_parser.yy" // lalr1.cc:859
++  case 146:
++#line 604 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1284 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1298 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 146:
- #line 603 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 145:
 -#line 596 "dhcp4_parser.yy" // lalr1.cc:859
++  case 147:
++#line 606 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("name", name);
      ctx.leave();
  }
 -#line 1294 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1308 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 147:
- #line 609 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 146:
 -#line 602 "dhcp4_parser.yy" // lalr1.cc:859
++  case 148:
++#line 612 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("persist", n);
  }
 -#line 1303 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1317 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 148:
- #line 614 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 147:
 -#line 607 "dhcp4_parser.yy" // lalr1.cc:859
++  case 149:
++#line 617 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("lfc-interval", n);
  }
 -#line 1312 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1326 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 149:
- #line 619 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 148:
 -#line 612 "dhcp4_parser.yy" // lalr1.cc:859
++  case 150:
++#line 622 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("readonly", n);
  }
 -#line 1321 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1335 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 150:
- #line 624 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 149:
 -#line 617 "dhcp4_parser.yy" // lalr1.cc:859
++  case 151:
++#line 627 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("connect-timeout", n);
  }
 -#line 1330 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1344 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 151:
- #line 629 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 150:
 -#line 622 "dhcp4_parser.yy" // lalr1.cc:859
++  case 152:
++#line 632 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1338 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1352 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 152:
- #line 631 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 151:
 -#line 624 "dhcp4_parser.yy" // lalr1.cc:859
++  case 153:
++#line 634 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("contact-points", cp);
      ctx.leave();
  }
 -#line 1348 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1362 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 153:
- #line 637 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 152:
 -#line 630 "dhcp4_parser.yy" // lalr1.cc:859
++  case 154:
++#line 640 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1356 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1370 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 154:
- #line 639 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 153:
 -#line 632 "dhcp4_parser.yy" // lalr1.cc:859
++  case 155:
++#line 642 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("keyspace", ks);
      ctx.leave();
  }
 -#line 1366 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1380 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 155:
- #line 646 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 154:
 -#line 639 "dhcp4_parser.yy" // lalr1.cc:859
++  case 156:
++#line 649 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("host-reservation-identifiers", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
  }
 -#line 1377 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1391 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 156:
- #line 651 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 155:
 -#line 644 "dhcp4_parser.yy" // lalr1.cc:859
++  case 157:
++#line 654 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1386 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1400 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 164:
- #line 667 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 163:
 -#line 660 "dhcp4_parser.yy" // lalr1.cc:859
++  case 165:
++#line 670 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(duid);
  }
 -#line 1395 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1409 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 165:
- #line 672 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 164:
 -#line 665 "dhcp4_parser.yy" // lalr1.cc:859
++  case 166:
++#line 675 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(hwaddr);
  }
 -#line 1404 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1418 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 166:
- #line 677 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 165:
 -#line 670 "dhcp4_parser.yy" // lalr1.cc:859
++  case 167:
++#line 680 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(circuit);
  }
 -#line 1413 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1427 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 167:
- #line 682 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 166:
 -#line 675 "dhcp4_parser.yy" // lalr1.cc:859
++  case 168:
++#line 685 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(client);
  }
 -#line 1422 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1436 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 168:
- #line 687 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 167:
 -#line 680 "dhcp4_parser.yy" // lalr1.cc:859
++  case 169:
++#line 690 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(flex_id);
  }
 -#line 1431 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1445 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 169:
- #line 692 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 168:
 -#line 685 "dhcp4_parser.yy" // lalr1.cc:859
++  case 170:
++#line 695 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hooks-libraries", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.HOOKS_LIBRARIES);
  }
 -#line 1442 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1456 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 170:
- #line 697 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 169:
 -#line 690 "dhcp4_parser.yy" // lalr1.cc:859
++  case 171:
++#line 700 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1451 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1465 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 175:
- #line 710 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 174:
 -#line 703 "dhcp4_parser.yy" // lalr1.cc:859
++  case 176:
++#line 713 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
 -#line 1461 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1475 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 176:
- #line 714 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 175:
 -#line 707 "dhcp4_parser.yy" // lalr1.cc:859
++  case 177:
++#line 717 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The library hooks parameter is required
 +    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
 -#line 1469 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1485 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 177:
- #line 720 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 176:
 -#line 711 "dhcp4_parser.yy" // lalr1.cc:859
++  case 178:
++#line 723 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the hooks-libraries list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1479 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1495 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 178:
- #line 724 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 177:
 -#line 715 "dhcp4_parser.yy" // lalr1.cc:859
++  case 179:
++#line 727 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The library hooks parameter is required
 +    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
 -#line 1487 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1505 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 184:
- #line 739 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 183:
 -#line 728 "dhcp4_parser.yy" // lalr1.cc:859
++  case 185:
++#line 742 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1495 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1513 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 185:
- #line 741 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 184:
 -#line 730 "dhcp4_parser.yy" // lalr1.cc:859
++  case 186:
++#line 744 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("library", lib);
      ctx.leave();
  }
 -#line 1505 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1523 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 186:
- #line 747 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 185:
 -#line 736 "dhcp4_parser.yy" // lalr1.cc:859
++  case 187:
++#line 750 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1513 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1531 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 187:
- #line 749 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 186:
 -#line 738 "dhcp4_parser.yy" // lalr1.cc:859
++  case 188:
++#line 752 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1522 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1540 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 188:
- #line 755 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 187:
 -#line 744 "dhcp4_parser.yy" // lalr1.cc:859
++  case 189:
++#line 758 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("expired-leases-processing", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
  }
 -#line 1533 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1551 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 189:
- #line 760 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 188:
 -#line 749 "dhcp4_parser.yy" // lalr1.cc:859
++  case 190:
++#line 763 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // No expired lease parameter is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1542 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1561 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 198:
- #line 778 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 197:
 -#line 766 "dhcp4_parser.yy" // lalr1.cc:859
++  case 199:
++#line 781 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("reclaim-timer-wait-time", value);
  }
 -#line 1551 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1570 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 199:
- #line 783 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 198:
 -#line 771 "dhcp4_parser.yy" // lalr1.cc:859
++  case 200:
++#line 786 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
  }
 -#line 1560 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1579 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 200:
- #line 788 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 199:
 -#line 776 "dhcp4_parser.yy" // lalr1.cc:859
++  case 201:
++#line 791 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hold-reclaimed-time", value);
  }
 -#line 1569 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 201:
- #line 793 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 200:
 -#line 781 "dhcp4_parser.yy" // lalr1.cc:859
++  case 202:
++#line 796 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-reclaim-leases", value);
  }
 -#line 1578 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1597 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 202:
- #line 798 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 201:
 -#line 786 "dhcp4_parser.yy" // lalr1.cc:859
++  case 203:
++#line 801 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-reclaim-time", value);
  }
 -#line 1587 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1606 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 203:
- #line 803 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 202:
 -#line 791 "dhcp4_parser.yy" // lalr1.cc:859
++  case 204:
++#line 806 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
  }
 -#line 1596 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1615 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 204:
- #line 811 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 203:
 -#line 799 "dhcp4_parser.yy" // lalr1.cc:859
++  case 205:
++#line 814 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("subnet4", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.SUBNET4);
  }
 -#line 1607 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 205:
- #line 816 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 204:
 -#line 804 "dhcp4_parser.yy" // lalr1.cc:859
++  case 206:
++#line 819 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1616 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1635 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 210:
- #line 836 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 209:
 -#line 824 "dhcp4_parser.yy" // lalr1.cc:859
++  case 211:
++#line 839 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
 -#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1645 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 211:
- #line 840 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 210:
 -#line 828 "dhcp4_parser.yy" // lalr1.cc:859
++  case 212:
++#line 843 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Once we reached this place, the subnet parsing is now complete.
      // If we want to, we can implement default values here.
      //         ctx.stack_.back()->set("renew-timer", renew);
      //     }
      // }
 +
 +    // The subnet subnet4 parameter is required
 +    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
 -#line 1649 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1671 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 212:
- #line 862 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 211:
 -#line 847 "dhcp4_parser.yy" // lalr1.cc:859
++  case 213:
++#line 865 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the subnet4 list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1659 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1681 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 213:
- #line 866 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 212:
 -#line 851 "dhcp4_parser.yy" // lalr1.cc:859
++  case 214:
++#line 869 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The subnet subnet4 parameter is required
 +    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
 -#line 1667 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1691 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 237:
- #line 901 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 235:
 -#line 883 "dhcp4_parser.yy" // lalr1.cc:859
++  case 238:
++#line 904 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1675 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1699 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 238:
- #line 903 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 236:
 -#line 885 "dhcp4_parser.yy" // lalr1.cc:859
++  case 239:
++#line 906 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("subnet", subnet);
      ctx.leave();
  }
 -#line 1685 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1709 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 239:
- #line 909 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 237:
 -#line 891 "dhcp4_parser.yy" // lalr1.cc:859
++  case 240:
++#line 912 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1693 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1717 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 240:
- #line 911 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 238:
 -#line 893 "dhcp4_parser.yy" // lalr1.cc:859
++  case 241:
++#line 914 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("4o6-interface", iface);
      ctx.leave();
  }
 -#line 1703 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1727 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 241:
- #line 917 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 239:
 -#line 899 "dhcp4_parser.yy" // lalr1.cc:859
++  case 242:
++#line 920 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1711 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1735 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 242:
- #line 919 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 240:
 -#line 901 "dhcp4_parser.yy" // lalr1.cc:859
++  case 243:
++#line 922 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("4o6-interface-id", iface);
      ctx.leave();
  }
 -#line 1721 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1745 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 243:
- #line 925 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 241:
 -#line 907 "dhcp4_parser.yy" // lalr1.cc:859
++  case 244:
++#line 928 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1729 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1753 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 244:
- #line 927 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 242:
 -#line 909 "dhcp4_parser.yy" // lalr1.cc:859
++  case 245:
++#line 930 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("4o6-subnet", iface);
      ctx.leave();
  }
 -#line 1739 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1763 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 245:
- #line 933 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 243:
 -#line 915 "dhcp4_parser.yy" // lalr1.cc:859
++  case 246:
++#line 936 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1747 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1771 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 246:
- #line 935 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 244:
 -#line 917 "dhcp4_parser.yy" // lalr1.cc:859
++  case 247:
++#line 938 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interface", iface);
      ctx.leave();
  }
 -#line 1757 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1781 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 247:
- #line 941 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 245:
 -#line 923 "dhcp4_parser.yy" // lalr1.cc:859
++  case 248:
++#line 944 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1765 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1789 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 248:
- #line 943 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 246:
 -#line 925 "dhcp4_parser.yy" // lalr1.cc:859
++  case 249:
++#line 946 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interface-id", iface);
      ctx.leave();
  }
 -#line 1775 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1799 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 249:
- #line 949 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 247:
 -#line 931 "dhcp4_parser.yy" // lalr1.cc:859
++  case 250:
++#line 952 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.CLIENT_CLASS);
  }
 -#line 1783 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1807 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 250:
- #line 951 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 248:
 -#line 933 "dhcp4_parser.yy" // lalr1.cc:859
++  case 251:
++#line 954 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-class", cls);
      ctx.leave();
  }
 -#line 1793 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1817 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 251:
- #line 957 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 249:
 -#line 939 "dhcp4_parser.yy" // lalr1.cc:859
++  case 252:
++#line 960 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.RESERVATION_MODE);
  }
 -#line 1801 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1825 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 252:
- #line 959 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 250:
 -#line 941 "dhcp4_parser.yy" // lalr1.cc:859
++  case 253:
++#line 962 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1810 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1834 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 253:
- #line 964 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 251:
 -#line 946 "dhcp4_parser.yy" // lalr1.cc:859
++  case 254:
++#line 967 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 -#line 1816 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1840 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 254:
- #line 965 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 252:
 -#line 947 "dhcp4_parser.yy" // lalr1.cc:859
++  case 255:
++#line 968 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 -#line 1822 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 255:
- #line 966 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 253:
 -#line 948 "dhcp4_parser.yy" // lalr1.cc:859
++  case 256:
++#line 969 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 -#line 1828 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1852 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 256:
- #line 969 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 254:
 -#line 951 "dhcp4_parser.yy" // lalr1.cc:859
++  case 257:
++#line 972 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("id", id);
  }
 -#line 1837 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1861 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 257:
- #line 974 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 255:
 -#line 956 "dhcp4_parser.yy" // lalr1.cc:859
++  case 258:
++#line 977 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("rapid-commit", rc);
  }
 -#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1870 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 258:
- #line 983 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 256:
 -#line 963 "dhcp4_parser.yy" // lalr1.cc:859
++  case 259:
++#line 984 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
-     ctx.stack_.back()->set("option-def", l);
+     ctx.stack_.back()->set("shared-networks", l);
      ctx.stack_.push_back(l);
-     ctx.enter(ctx.OPTION_DEF);
+     ctx.enter(ctx.SHARED_NETWORK);
  }
 -#line 1857 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1881 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 259:
- #line 988 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 257:
 -#line 968 "dhcp4_parser.yy" // lalr1.cc:859
++  case 260:
++#line 989 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1866 "dhcp4_parser.cc" // lalr1.cc:859
 +#line 1890 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 260:
- #line 996 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 262:
 -#line 983 "dhcp4_parser.yy" // lalr1.cc:859
++  case 265:
++#line 1004 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+     ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 1899 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1876 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1900 "dhcp4_parser.cc" // lalr1.cc:859
+     break;
 -  case 263:
 -#line 987 "dhcp4_parser.yy" // lalr1.cc:859
++  case 266:
++#line 1008 "dhcp4_parser.yy" // lalr1.cc:859
+     {
+     ctx.stack_.pop_back();
+ }
 -#line 1884 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1908 "dhcp4_parser.cc" // lalr1.cc:859
+     break;
 -  case 279:
 -#line 1014 "dhcp4_parser.yy" // lalr1.cc:859
++  case 282:
++#line 1035 "dhcp4_parser.yy" // lalr1.cc:859
+     {
+     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
+     ctx.stack_.back()->set("option-def", l);
+     ctx.stack_.push_back(l);
+     ctx.enter(ctx.OPTION_DEF);
+ }
 -#line 1895 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1919 "dhcp4_parser.cc" // lalr1.cc:859
++    break;
++
++  case 283:
++#line 1040 "dhcp4_parser.yy" // lalr1.cc:859
++    {
++    ctx.stack_.pop_back();
++    ctx.leave();
++}
++#line 1928 "dhcp4_parser.cc" // lalr1.cc:859
 +    break;
 +
-   case 261:
- #line 999 "dhcp4_parser.yy" // lalr1.cc:859
++  case 284:
++#line 1048 "dhcp4_parser.yy" // lalr1.cc:859
++    {
++    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
++    ctx.stack_.push_back(m);
++}
++#line 1937 "dhcp4_parser.cc" // lalr1.cc:859
+     break;
 -  case 280:
 -#line 1019 "dhcp4_parser.yy" // lalr1.cc:859
++  case 285:
++#line 1051 "dhcp4_parser.yy" // lalr1.cc:859
      {
 -    ctx.stack_.pop_back();
 -    ctx.leave();
 +    // parsing completed
  }
- #line 1907 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1904 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1945 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 266:
- #line 1015 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 285:
 -#line 1036 "dhcp4_parser.yy" // lalr1.cc:859
++  case 290:
++#line 1067 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 1917 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1914 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1955 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 267:
- #line 1019 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 286:
 -#line 1040 "dhcp4_parser.yy" // lalr1.cc:859
++  case 291:
++#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The name, code and type option def parameters are required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 1929 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1922 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1967 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 268:
- #line 1030 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 287:
 -#line 1047 "dhcp4_parser.yy" // lalr1.cc:859
++  case 292:
++#line 1082 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the option-def list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 1939 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1932 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1977 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 269:
- #line 1034 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 288:
 -#line 1051 "dhcp4_parser.yy" // lalr1.cc:859
++  case 293:
++#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The name, code and type option def parameters are required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 1951 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1940 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1989 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 283:
- #line 1064 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 302:
 -#line 1077 "dhcp4_parser.yy" // lalr1.cc:859
++  case 307:
++#line 1116 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("code", code);
  }
- #line 1960 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1949 "dhcp4_parser.cc" // lalr1.cc:859
++#line 1998 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 285:
- #line 1071 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 304:
 -#line 1084 "dhcp4_parser.yy" // lalr1.cc:859
++  case 309:
++#line 1123 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1968 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1957 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2006 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 286:
- #line 1073 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 305:
 -#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
++  case 310:
++#line 1125 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("type", prf);
      ctx.leave();
  }
- #line 1978 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1967 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2016 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 287:
- #line 1079 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 306:
 -#line 1092 "dhcp4_parser.yy" // lalr1.cc:859
++  case 311:
++#line 1131 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1986 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1975 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2024 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 288:
- #line 1081 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 307:
 -#line 1094 "dhcp4_parser.yy" // lalr1.cc:859
++  case 312:
++#line 1133 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("record-types", rtypes);
      ctx.leave();
  }
- #line 1996 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1985 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2034 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 289:
- #line 1087 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 308:
 -#line 1100 "dhcp4_parser.yy" // lalr1.cc:859
++  case 313:
++#line 1139 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2004 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 1993 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2042 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 290:
- #line 1089 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 309:
 -#line 1102 "dhcp4_parser.yy" // lalr1.cc:859
++  case 314:
++#line 1141 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("space", space);
      ctx.leave();
  }
- #line 2014 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2003 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2052 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 292:
- #line 1097 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 311:
 -#line 1110 "dhcp4_parser.yy" // lalr1.cc:859
++  case 316:
++#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2022 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2011 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2060 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 293:
- #line 1099 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 312:
 -#line 1112 "dhcp4_parser.yy" // lalr1.cc:859
++  case 317:
++#line 1151 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("encapsulate", encap);
      ctx.leave();
  }
- #line 2032 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2021 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2070 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 294:
- #line 1105 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 313:
 -#line 1118 "dhcp4_parser.yy" // lalr1.cc:859
++  case 318:
++#line 1157 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("array", array);
  }
- #line 2041 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2030 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2079 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 295:
- #line 1114 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 314:
 -#line 1127 "dhcp4_parser.yy" // lalr1.cc:859
++  case 319:
++#line 1166 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("option-data", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.OPTION_DATA);
  }
- #line 2052 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2041 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2090 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 296:
- #line 1119 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 315:
 -#line 1132 "dhcp4_parser.yy" // lalr1.cc:859
++  case 320:
++#line 1171 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2061 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2050 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2099 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 301:
- #line 1138 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 320:
 -#line 1151 "dhcp4_parser.yy" // lalr1.cc:859
++  case 325:
++#line 1190 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2071 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2060 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2109 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 302:
- #line 1142 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 321:
 -#line 1155 "dhcp4_parser.yy" // lalr1.cc:859
++  case 326:
++#line 1194 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: the code or name parameters are required.
      ctx.stack_.pop_back();
  }
- #line 2080 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2068 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2118 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 303:
- #line 1150 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 322:
 -#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
++  case 327:
++#line 1202 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the option-data list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2090 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2078 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2128 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 304:
- #line 1154 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 323:
 -#line 1166 "dhcp4_parser.yy" // lalr1.cc:859
++  case 328:
++#line 1206 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: the code or name parameters are required.
      // parsing completed
  }
- #line 2099 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2086 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2137 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 317:
- #line 1185 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 336:
 -#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
++  case 341:
++#line 1237 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2107 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2094 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2145 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 318:
- #line 1187 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 337:
 -#line 1198 "dhcp4_parser.yy" // lalr1.cc:859
++  case 342:
++#line 1239 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("data", data);
      ctx.leave();
  }
- #line 2117 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2104 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2155 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 321:
- #line 1197 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 340:
 -#line 1208 "dhcp4_parser.yy" // lalr1.cc:859
++  case 345:
++#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("csv-format", space);
  }
- #line 2126 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2113 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2164 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 322:
- #line 1202 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 341:
 -#line 1213 "dhcp4_parser.yy" // lalr1.cc:859
++  case 346:
++#line 1254 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("always-send", persist);
  }
- #line 2135 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2122 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2173 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 323:
- #line 1210 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 342:
 -#line 1221 "dhcp4_parser.yy" // lalr1.cc:859
++  case 347:
++#line 1262 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("pools", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.POOLS);
  }
- #line 2146 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2133 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2184 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 324:
- #line 1215 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 343:
 -#line 1226 "dhcp4_parser.yy" // lalr1.cc:859
++  case 348:
++#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2155 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2142 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2193 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 329:
- #line 1230 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 348:
 -#line 1241 "dhcp4_parser.yy" // lalr1.cc:859
++  case 353:
++#line 1282 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2165 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2152 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2203 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 330:
- #line 1234 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 349:
 -#line 1245 "dhcp4_parser.yy" // lalr1.cc:859
++  case 354:
++#line 1286 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The pool parameter is required.
 +    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 2175 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2160 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2213 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 331:
- #line 1240 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 350:
 -#line 1249 "dhcp4_parser.yy" // lalr1.cc:859
++  case 355:
++#line 1292 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the pool list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2185 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2170 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2223 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 332:
- #line 1244 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 351:
 -#line 1253 "dhcp4_parser.yy" // lalr1.cc:859
++  case 356:
++#line 1296 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The pool parameter is required.
 +    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 2195 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2178 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2233 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 339:
- #line 1260 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 358:
 -#line 1267 "dhcp4_parser.yy" // lalr1.cc:859
++  case 363:
++#line 1312 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2203 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2186 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2241 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 340:
- #line 1262 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 359:
 -#line 1269 "dhcp4_parser.yy" // lalr1.cc:859
++  case 364:
++#line 1314 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("pool", pool);
      ctx.leave();
  }
- #line 2213 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2196 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2251 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 341:
- #line 1268 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 360:
 -#line 1275 "dhcp4_parser.yy" // lalr1.cc:859
++  case 365:
++#line 1320 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2221 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2204 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2259 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 342:
- #line 1270 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 361:
 -#line 1277 "dhcp4_parser.yy" // lalr1.cc:859
++  case 366:
++#line 1322 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2230 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2213 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2268 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 343:
- #line 1278 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 362:
 -#line 1285 "dhcp4_parser.yy" // lalr1.cc:859
++  case 367:
++#line 1330 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("reservations", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.RESERVATIONS);
  }
- #line 2241 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2224 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2279 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 344:
- #line 1283 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 363:
 -#line 1290 "dhcp4_parser.yy" // lalr1.cc:859
++  case 368:
++#line 1335 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2250 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2233 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2288 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 349:
- #line 1296 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 368:
 -#line 1303 "dhcp4_parser.yy" // lalr1.cc:859
++  case 373:
++#line 1348 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2260 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2243 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2298 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 350:
- #line 1300 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 369:
 -#line 1307 "dhcp4_parser.yy" // lalr1.cc:859
++  case 374:
++#line 1352 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: an identifier parameter is required.
      ctx.stack_.pop_back();
  }
- #line 2269 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2251 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2307 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 351:
- #line 1305 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 370:
 -#line 1311 "dhcp4_parser.yy" // lalr1.cc:859
++  case 375:
++#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the reservations list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2279 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2261 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2317 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 352:
- #line 1309 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 371:
 -#line 1315 "dhcp4_parser.yy" // lalr1.cc:859
++  case 376:
++#line 1361 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: an identifier parameter is required.
      // parsing completed
  }
- #line 2288 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2269 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2326 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 370:
- #line 1338 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 389:
 -#line 1343 "dhcp4_parser.yy" // lalr1.cc:859
++  case 394:
++#line 1390 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2296 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2277 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2334 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 371:
- #line 1340 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 390:
 -#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
++  case 395:
++#line 1392 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("next-server", next_server);
      ctx.leave();
  }
- #line 2306 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2287 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2344 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 372:
- #line 1346 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 391:
 -#line 1351 "dhcp4_parser.yy" // lalr1.cc:859
++  case 396:
++#line 1398 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2314 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2295 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2352 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 373:
- #line 1348 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 392:
 -#line 1353 "dhcp4_parser.yy" // lalr1.cc:859
++  case 397:
++#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-hostname", srv);
      ctx.leave();
  }
- #line 2324 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2305 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2362 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 374:
- #line 1354 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 393:
 -#line 1359 "dhcp4_parser.yy" // lalr1.cc:859
++  case 398:
++#line 1406 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2332 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2313 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2370 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 375:
- #line 1356 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 394:
 -#line 1361 "dhcp4_parser.yy" // lalr1.cc:859
++  case 399:
++#line 1408 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("boot-file-name", bootfile);
      ctx.leave();
  }
- #line 2342 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2323 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2380 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 376:
- #line 1362 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 395:
 -#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
++  case 400:
++#line 1414 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2350 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2331 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2388 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 377:
- #line 1364 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 396:
 -#line 1369 "dhcp4_parser.yy" // lalr1.cc:859
++  case 401:
++#line 1416 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ip-address", addr);
      ctx.leave();
  }
- #line 2360 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2341 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2398 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 378:
- #line 1370 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 397:
 -#line 1375 "dhcp4_parser.yy" // lalr1.cc:859
++  case 402:
++#line 1422 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2368 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2349 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2406 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 379:
- #line 1372 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 398:
 -#line 1377 "dhcp4_parser.yy" // lalr1.cc:859
++  case 403:
++#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("duid", d);
      ctx.leave();
  }
- #line 2378 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2359 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2416 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 380:
- #line 1378 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 399:
 -#line 1383 "dhcp4_parser.yy" // lalr1.cc:859
++  case 404:
++#line 1430 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2386 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2367 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2424 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 381:
- #line 1380 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 400:
 -#line 1385 "dhcp4_parser.yy" // lalr1.cc:859
++  case 405:
++#line 1432 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hw-address", hw);
      ctx.leave();
  }
- #line 2396 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2377 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2434 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 382:
- #line 1386 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 401:
 -#line 1391 "dhcp4_parser.yy" // lalr1.cc:859
++  case 406:
++#line 1438 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2404 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2385 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2442 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 383:
- #line 1388 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 402:
 -#line 1393 "dhcp4_parser.yy" // lalr1.cc:859
++  case 407:
++#line 1440 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-id", hw);
      ctx.leave();
  }
- #line 2414 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2395 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2452 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 384:
- #line 1394 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 403:
 -#line 1399 "dhcp4_parser.yy" // lalr1.cc:859
++  case 408:
++#line 1446 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2422 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2403 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2460 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 385:
- #line 1396 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 404:
 -#line 1401 "dhcp4_parser.yy" // lalr1.cc:859
++  case 409:
++#line 1448 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("circuit-id", hw);
      ctx.leave();
  }
- #line 2432 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2413 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2470 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 386:
- #line 1402 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 405:
 -#line 1407 "dhcp4_parser.yy" // lalr1.cc:859
++  case 410:
++#line 1454 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2440 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2421 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2478 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 387:
- #line 1404 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 406:
 -#line 1409 "dhcp4_parser.yy" // lalr1.cc:859
++  case 411:
++#line 1456 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flex-id", hw);
      ctx.leave();
  }
- #line 2450 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2431 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2488 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 388:
- #line 1410 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 407:
 -#line 1415 "dhcp4_parser.yy" // lalr1.cc:859
++  case 412:
++#line 1462 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2458 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2439 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2496 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 389:
- #line 1412 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 408:
 -#line 1417 "dhcp4_parser.yy" // lalr1.cc:859
++  case 413:
++#line 1464 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hostname", host);
      ctx.leave();
  }
- #line 2468 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2449 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2506 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 390:
- #line 1418 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 409:
 -#line 1423 "dhcp4_parser.yy" // lalr1.cc:859
++  case 414:
++#line 1470 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-classes", c);
      ctx.stack_.push_back(c);
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2479 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2460 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2517 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 391:
- #line 1423 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 410:
 -#line 1428 "dhcp4_parser.yy" // lalr1.cc:859
++  case 415:
++#line 1475 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2488 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2469 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2526 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 392:
- #line 1431 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 411:
 -#line 1436 "dhcp4_parser.yy" // lalr1.cc:859
++  case 416:
++#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("relay", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.RELAY);
  }
- #line 2499 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2480 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2537 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 393:
- #line 1436 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 412:
 -#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
++  case 417:
++#line 1488 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2508 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2489 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2546 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 394:
- #line 1441 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 413:
 -#line 1446 "dhcp4_parser.yy" // lalr1.cc:859
++  case 418:
++#line 1493 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2516 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2497 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2554 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 395:
- #line 1443 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 414:
 -#line 1448 "dhcp4_parser.yy" // lalr1.cc:859
++  case 419:
++#line 1495 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ip-address", ip);
      ctx.leave();
  }
- #line 2526 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2507 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2564 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 396:
- #line 1452 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 415:
 -#line 1457 "dhcp4_parser.yy" // lalr1.cc:859
++  case 420:
++#line 1504 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-classes", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.CLIENT_CLASSES);
  }
- #line 2537 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2518 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2575 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 397:
- #line 1457 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 416:
 -#line 1462 "dhcp4_parser.yy" // lalr1.cc:859
++  case 421:
++#line 1509 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2546 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2527 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2584 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 400:
- #line 1466 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 419:
 -#line 1471 "dhcp4_parser.yy" // lalr1.cc:859
++  case 424:
++#line 1518 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2556 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2537 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2594 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 401:
- #line 1470 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 420:
 -#line 1475 "dhcp4_parser.yy" // lalr1.cc:859
++  case 425:
++#line 1522 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The name client class parameter is required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 2566 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2545 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2604 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 414:
- #line 1495 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 433:
 -#line 1498 "dhcp4_parser.yy" // lalr1.cc:859
++  case 438:
++#line 1547 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2574 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2553 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2612 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 415:
- #line 1497 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 434:
 -#line 1500 "dhcp4_parser.yy" // lalr1.cc:859
++  case 439:
++#line 1549 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("test", test);
      ctx.leave();
  }
- #line 2584 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2563 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2622 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 416:
- #line 1507 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 435:
 -#line 1510 "dhcp4_parser.yy" // lalr1.cc:859
++  case 440:
++#line 1559 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("dhcp4o6-port", time);
  }
- #line 2593 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2572 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2631 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 417:
- #line 1514 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 436:
 -#line 1517 "dhcp4_parser.yy" // lalr1.cc:859
++  case 441:
++#line 1566 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("control-socket", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.CONTROL_SOCKET);
  }
- #line 2604 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2583 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2642 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 418:
- #line 1519 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 437:
 -#line 1522 "dhcp4_parser.yy" // lalr1.cc:859
++  case 442:
++#line 1571 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2613 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2592 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2651 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 423:
- #line 1532 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 442:
 -#line 1535 "dhcp4_parser.yy" // lalr1.cc:859
++  case 447:
++#line 1584 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2621 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2600 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2659 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 424:
- #line 1534 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 443:
 -#line 1537 "dhcp4_parser.yy" // lalr1.cc:859
++  case 448:
++#line 1586 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("socket-type", stype);
      ctx.leave();
  }
- #line 2631 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2610 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2669 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 425:
- #line 1540 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 444:
 -#line 1543 "dhcp4_parser.yy" // lalr1.cc:859
++  case 449:
++#line 1592 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2639 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2618 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2677 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 426:
- #line 1542 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 445:
 -#line 1545 "dhcp4_parser.yy" // lalr1.cc:859
++  case 450:
++#line 1594 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("socket-name", name);
      ctx.leave();
  }
- #line 2649 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2628 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2687 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 427:
- #line 1550 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 446:
 -#line 1553 "dhcp4_parser.yy" // lalr1.cc:859
++  case 451:
++#line 1602 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("dhcp-ddns", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.DHCP_DDNS);
  }
- #line 2660 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2639 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2698 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 428:
- #line 1555 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 447:
 -#line 1558 "dhcp4_parser.yy" // lalr1.cc:859
++  case 452:
++#line 1607 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The enable updates DHCP DDNS parameter is required.
 +    ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2671 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2648 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2709 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 429:
- #line 1562 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 448:
 -#line 1563 "dhcp4_parser.yy" // lalr1.cc:859
++  case 453:
++#line 1614 "dhcp4_parser.yy" // lalr1.cc:859
      {
      // Parse the dhcp-ddns map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2681 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2658 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2719 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 430:
- #line 1566 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 449:
 -#line 1567 "dhcp4_parser.yy" // lalr1.cc:859
++  case 454:
++#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
      {
 +    // The enable updates DHCP DDNS parameter is required.
 +    ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 2691 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2666 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2729 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 448:
- #line 1593 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 467:
 -#line 1592 "dhcp4_parser.yy" // lalr1.cc:859
++  case 472:
++#line 1645 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("enable-updates", b);
  }
- #line 2700 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2675 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2738 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 449:
- #line 1598 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 468:
 -#line 1597 "dhcp4_parser.yy" // lalr1.cc:859
++  case 473:
++#line 1650 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2708 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2683 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2746 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 450:
- #line 1600 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 469:
 -#line 1599 "dhcp4_parser.yy" // lalr1.cc:859
++  case 474:
++#line 1652 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("qualifying-suffix", s);
      ctx.leave();
  }
- #line 2718 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2693 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2756 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 451:
- #line 1606 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 470:
 -#line 1605 "dhcp4_parser.yy" // lalr1.cc:859
++  case 475:
++#line 1658 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2726 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2701 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2764 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 452:
- #line 1608 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 471:
 -#line 1607 "dhcp4_parser.yy" // lalr1.cc:859
++  case 476:
++#line 1660 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-ip", s);
      ctx.leave();
  }
- #line 2736 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2711 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2774 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 453:
- #line 1614 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 472:
 -#line 1613 "dhcp4_parser.yy" // lalr1.cc:859
++  case 477:
++#line 1666 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-port", i);
  }
- #line 2745 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2720 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2783 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 454:
- #line 1619 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 473:
 -#line 1618 "dhcp4_parser.yy" // lalr1.cc:859
++  case 478:
++#line 1671 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2753 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2728 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2791 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 455:
- #line 1621 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 474:
 -#line 1620 "dhcp4_parser.yy" // lalr1.cc:859
++  case 479:
++#line 1673 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("sender-ip", s);
      ctx.leave();
  }
- #line 2763 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2738 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2801 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 456:
- #line 1627 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 475:
 -#line 1626 "dhcp4_parser.yy" // lalr1.cc:859
++  case 480:
++#line 1679 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("sender-port", i);
  }
- #line 2772 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2747 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2810 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 457:
- #line 1632 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 476:
 -#line 1631 "dhcp4_parser.yy" // lalr1.cc:859
++  case 481:
++#line 1684 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-queue-size", i);
  }
- #line 2781 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2756 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2819 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 458:
- #line 1637 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 477:
 -#line 1636 "dhcp4_parser.yy" // lalr1.cc:859
++  case 482:
++#line 1689 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NCR_PROTOCOL);
  }
- #line 2789 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2764 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2827 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 459:
- #line 1639 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 478:
 -#line 1638 "dhcp4_parser.yy" // lalr1.cc:859
++  case 483:
++#line 1691 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2798 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2773 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2836 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 460:
- #line 1645 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 479:
 -#line 1644 "dhcp4_parser.yy" // lalr1.cc:859
++  case 484:
++#line 1697 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
- #line 2804 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2779 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2842 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 461:
- #line 1646 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 480:
 -#line 1645 "dhcp4_parser.yy" // lalr1.cc:859
++  case 485:
++#line 1698 "dhcp4_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
- #line 2810 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2785 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2848 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 462:
- #line 1649 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 481:
 -#line 1648 "dhcp4_parser.yy" // lalr1.cc:859
++  case 486:
++#line 1701 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NCR_FORMAT);
  }
- #line 2818 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2793 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2856 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 463:
- #line 1651 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 482:
 -#line 1650 "dhcp4_parser.yy" // lalr1.cc:859
++  case 487:
++#line 1703 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ncr-format", json);
      ctx.leave();
  }
- #line 2828 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2803 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2866 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 464:
- #line 1657 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 483:
 -#line 1656 "dhcp4_parser.yy" // lalr1.cc:859
++  case 488:
++#line 1709 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("always-include-fqdn", b);
  }
- #line 2837 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2812 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2875 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 465:
- #line 1662 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 484:
 -#line 1661 "dhcp4_parser.yy" // lalr1.cc:859
++  case 489:
++#line 1714 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("override-no-update", b);
  }
- #line 2846 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2821 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2884 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 466:
- #line 1667 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 485:
 -#line 1666 "dhcp4_parser.yy" // lalr1.cc:859
++  case 490:
++#line 1719 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("override-client-update", b);
  }
- #line 2855 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2830 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2893 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 467:
- #line 1672 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 486:
 -#line 1671 "dhcp4_parser.yy" // lalr1.cc:859
++  case 491:
++#line 1724 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.REPLACE_CLIENT_NAME);
  }
- #line 2863 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2838 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2901 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 468:
- #line 1674 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 487:
 -#line 1673 "dhcp4_parser.yy" // lalr1.cc:859
++  case 492:
++#line 1726 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2872 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2847 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2910 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 469:
- #line 1680 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 488:
 -#line 1679 "dhcp4_parser.yy" // lalr1.cc:859
++  case 493:
++#line 1732 "dhcp4_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
        }
- #line 2880 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2855 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2918 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 470:
- #line 1683 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 489:
 -#line 1682 "dhcp4_parser.yy" // lalr1.cc:859
++  case 494:
++#line 1735 "dhcp4_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
        }
- #line 2888 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2863 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2926 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 471:
- #line 1686 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 490:
 -#line 1685 "dhcp4_parser.yy" // lalr1.cc:859
++  case 495:
++#line 1738 "dhcp4_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
        }
- #line 2896 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2871 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2934 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 472:
- #line 1689 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 491:
 -#line 1688 "dhcp4_parser.yy" // lalr1.cc:859
++  case 496:
++#line 1741 "dhcp4_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
        }
- #line 2904 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2879 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2942 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 473:
- #line 1692 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 492:
 -#line 1691 "dhcp4_parser.yy" // lalr1.cc:859
++  case 497:
++#line 1744 "dhcp4_parser.yy" // lalr1.cc:859
      {
        error(yystack_[0].location, "boolean values for the replace-client-name are "
                  "no longer supported");
        }
- #line 2913 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2888 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2951 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 474:
- #line 1698 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 493:
 -#line 1697 "dhcp4_parser.yy" // lalr1.cc:859
++  case 498:
++#line 1750 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2921 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2896 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2959 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 475:
- #line 1700 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 494:
 -#line 1699 "dhcp4_parser.yy" // lalr1.cc:859
++  case 499:
++#line 1752 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("generated-prefix", s);
      ctx.leave();
  }
- #line 2931 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2906 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2969 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 476:
- #line 1708 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 495:
 -#line 1707 "dhcp4_parser.yy" // lalr1.cc:859
++  case 500:
++#line 1760 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2939 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2914 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2977 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 477:
- #line 1710 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 496:
 -#line 1709 "dhcp4_parser.yy" // lalr1.cc:859
++  case 501:
++#line 1762 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2948 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2923 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2986 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 478:
- #line 1715 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 497:
 -#line 1714 "dhcp4_parser.yy" // lalr1.cc:859
++  case 502:
++#line 1767 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2956 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2931 "dhcp4_parser.cc" // lalr1.cc:859
++#line 2994 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 479:
- #line 1717 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 498:
 -#line 1716 "dhcp4_parser.yy" // lalr1.cc:859
++  case 503:
++#line 1769 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2965 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2940 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3003 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 480:
- #line 1722 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 499:
 -#line 1721 "dhcp4_parser.yy" // lalr1.cc:859
++  case 504:
++#line 1774 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2973 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2948 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3011 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 481:
- #line 1724 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 500:
 -#line 1723 "dhcp4_parser.yy" // lalr1.cc:859
++  case 505:
++#line 1776 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2982 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2957 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3020 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 482:
- #line 1734 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 501:
 -#line 1733 "dhcp4_parser.yy" // lalr1.cc:859
++  case 506:
++#line 1786 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("Logging", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.LOGGING);
  }
- #line 2993 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2968 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3031 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 483:
- #line 1739 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 502:
 -#line 1738 "dhcp4_parser.yy" // lalr1.cc:859
++  case 507:
++#line 1791 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3002 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2977 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3040 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 487:
- #line 1756 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 506:
 -#line 1755 "dhcp4_parser.yy" // lalr1.cc:859
++  case 511:
++#line 1808 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("loggers", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.LOGGERS);
  }
- #line 3013 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2988 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3051 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 488:
- #line 1761 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 507:
 -#line 1760 "dhcp4_parser.yy" // lalr1.cc:859
++  case 512:
++#line 1813 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3022 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 2997 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3060 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 491:
- #line 1773 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 510:
 -#line 1772 "dhcp4_parser.yy" // lalr1.cc:859
++  case 515:
++#line 1825 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(l);
      ctx.stack_.push_back(l);
  }
- #line 3032 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3007 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3070 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 492:
- #line 1777 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 511:
 -#line 1776 "dhcp4_parser.yy" // lalr1.cc:859
++  case 516:
++#line 1829 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
  }
- #line 3040 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3015 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3078 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 500:
- #line 1792 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 519:
 -#line 1791 "dhcp4_parser.yy" // lalr1.cc:859
++  case 524:
++#line 1844 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("debuglevel", dl);
  }
- #line 3049 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3024 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3087 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 501:
- #line 1797 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 520:
 -#line 1796 "dhcp4_parser.yy" // lalr1.cc:859
++  case 525:
++#line 1849 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3057 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3032 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3095 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 502:
- #line 1799 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 521:
 -#line 1798 "dhcp4_parser.yy" // lalr1.cc:859
++  case 526:
++#line 1851 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("severity", sev);
      ctx.leave();
  }
- #line 3067 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3042 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3105 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 503:
- #line 1805 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 522:
 -#line 1804 "dhcp4_parser.yy" // lalr1.cc:859
++  case 527:
++#line 1857 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("output_options", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.OUTPUT_OPTIONS);
  }
- #line 3078 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3053 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3116 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 504:
- #line 1810 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 523:
 -#line 1809 "dhcp4_parser.yy" // lalr1.cc:859
++  case 528:
++#line 1862 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3087 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3062 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3125 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 507:
- #line 1819 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 526:
 -#line 1818 "dhcp4_parser.yy" // lalr1.cc:859
++  case 531:
++#line 1871 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 3097 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3072 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3135 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 508:
- #line 1823 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 527:
 -#line 1822 "dhcp4_parser.yy" // lalr1.cc:859
++  case 532:
++#line 1875 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
  }
- #line 3105 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3080 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3143 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 515:
- #line 1837 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 534:
 -#line 1836 "dhcp4_parser.yy" // lalr1.cc:859
++  case 539:
++#line 1889 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3113 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3088 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3151 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 516:
- #line 1839 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 535:
 -#line 1838 "dhcp4_parser.yy" // lalr1.cc:859
++  case 540:
++#line 1891 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("output", sev);
      ctx.leave();
  }
- #line 3123 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3098 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3161 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 517:
- #line 1845 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 536:
 -#line 1844 "dhcp4_parser.yy" // lalr1.cc:859
++  case 541:
++#line 1897 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flush", flush);
  }
- #line 3132 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3107 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3170 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 518:
- #line 1850 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 537:
 -#line 1849 "dhcp4_parser.yy" // lalr1.cc:859
++  case 542:
++#line 1902 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("maxsize", maxsize);
  }
- #line 3141 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3116 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3179 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
-   case 519:
- #line 1855 "dhcp4_parser.yy" // lalr1.cc:859
 -  case 538:
 -#line 1854 "dhcp4_parser.yy" // lalr1.cc:859
++  case 543:
++#line 1907 "dhcp4_parser.yy" // lalr1.cc:859
      {
      ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("maxver", maxver);
  }
- #line 3150 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3125 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3188 "dhcp4_parser.cc" // lalr1.cc:859
      break;
  
  
- #line 3154 "dhcp4_parser.cc" // lalr1.cc:859
 -#line 3129 "dhcp4_parser.cc" // lalr1.cc:859
++#line 3192 "dhcp4_parser.cc" // lalr1.cc:859
              default:
                break;
              }
    }
  
  
-   const short int Dhcp4Parser::yypact_ninf_ = -496;
 -  const short int Dhcp4Parser::yypact_ninf_ = -678;
++  const short int Dhcp4Parser::yypact_ninf_ = -688;
  
    const signed char Dhcp4Parser::yytable_ninf_ = -1;
  
    const short int
    Dhcp4Parser::yypact_[] =
    {
-      231,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,    31,    20,    33,    55,    71,    83,    90,
-      105,   115,   143,   145,   149,   175,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-       20,   -68,    18,    84,   163,    19,     9,   109,    69,    62,
-       88,   -51,   237,  -496,   177,   197,   221,   233,   236,  -496,
-     -496,  -496,  -496,  -496,   246,  -496,    27,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,   251,   252,  -496,  -496,  -496,   253,
-      254,   255,   256,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-      257,  -496,  -496,  -496,    53,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   259,    67,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,   260,   261,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,    68,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,    86,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,   258,   264,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,   262,  -496,  -496,   267,  -496,
-     -496,  -496,   268,  -496,  -496,   265,   271,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   272,   273,
-     -496,  -496,  -496,  -496,   274,   276,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,    96,  -496,  -496,  -496,
-      277,  -496,  -496,   282,  -496,   284,   285,  -496,  -496,   286,
-      287,   290,  -496,  -496,  -496,   112,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,    20,    20,  -496,   126,   291,   293,   295,   297,
-      298,  -496,    18,  -496,   302,   130,   135,   303,   307,   308,
-      170,   173,   174,   176,   314,   316,   317,   318,   319,   320,
-      322,   186,   324,   326,    84,  -496,   327,   328,   188,   163,
-     -496,    24,   345,   346,   347,   348,   349,   350,   351,   352,
-      214,   230,   369,   370,   372,   373,    19,  -496,   374,     9,
-     -496,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-      385,  -496,   109,  -496,   386,   387,   249,   389,   390,   391,
-      263,  -496,    62,   392,   266,   269,  -496,    88,   393,   394,
-        3,  -496,   270,   395,   396,   275,   397,   278,   279,   398,
-      399,   280,   281,   283,   400,   401,   237,  -496,  -496,  -496,
-      402,   403,   405,    20,    20,    20,  -496,   406,  -496,  -496,
-      288,   409,   410,  -496,  -496,  -496,  -496,   404,   414,   415,
-      418,   419,   422,   424,  -496,   425,   426,  -496,   429,   120,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   421,
-      432,  -496,  -496,  -496,   294,   296,   301,   434,   430,   304,
-      305,   309,  -496,  -496,   185,   310,   439,   438,  -496,   311,
-     -496,   312,   313,   429,   321,   323,   325,   329,   330,   331,
-      332,  -496,   334,   335,  -496,   336,   337,   339,  -496,  -496,
-      340,  -496,  -496,  -496,   341,    20,  -496,  -496,   342,   343,
-     -496,   344,  -496,  -496,    21,   355,  -496,  -496,  -496,    57,
-      353,  -496,    20,    84,   368,  -496,  -496,  -496,   163,  -496,
-       17,    17,   443,   449,   453,   121,    25,   454,   118,    73,
-      237,  -496,  -496,  -496,  -496,  -496,   458,  -496,    24,  -496,
-     -496,  -496,   457,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,   462,   388,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   140,
-     -496,   141,  -496,  -496,   150,  -496,  -496,  -496,  -496,   484,
-      485,   486,   487,   488,  -496,  -496,  -496,   209,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,   212,  -496,   490,   491,  -496,  -496,   492,   494,  -496,
-     -496,   493,   497,  -496,  -496,  -496,  -496,  -496,  -496,    36,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,   187,  -496,   495,
-      499,  -496,   489,   500,   501,   502,   503,   504,   213,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   215,  -496,
-     -496,  -496,   216,   361,   367,  -496,  -496,   505,   507,  -496,
-     -496,   506,   510,  -496,  -496,   508,  -496,   511,   368,  -496,
-     -496,   513,   514,   515,   516,   371,   407,   408,   411,   412,
-      517,   518,    17,  -496,  -496,    19,  -496,   443,    62,  -496,
-      449,    88,  -496,   453,   121,  -496,    25,  -496,   -51,  -496,
-      454,   416,   417,   420,   423,   427,   428,   118,  -496,   519,
-      520,    73,  -496,  -496,  -496,   521,   522,  -496,     9,  -496,
-      457,   109,  -496,   462,   524,  -496,   525,  -496,   217,   431,
-      433,   435,  -496,  -496,  -496,  -496,  -496,   436,   437,  -496,
-      219,  -496,   523,  -496,   526,  -496,  -496,  -496,   225,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,   440,   441,  -496,
-     -496,   442,   226,  -496,   527,  -496,   444,   529,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   232,
-     -496,    72,   529,  -496,  -496,   528,  -496,  -496,  -496,   228,
-     -496,  -496,  -496,  -496,  -496,   533,   445,   534,    72,  -496,
-      535,  -496,   447,  -496,   532,  -496,  -496,   243,  -496,   -16,
-      532,  -496,  -496,   537,   538,   539,   229,  -496,  -496,  -496,
-     -496,  -496,  -496,   540,   413,   448,   450,   -16,  -496,   452,
-     -496,  -496,  -496,  -496,  -496
 -      86,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,    56,    20,    32,    76,    87,   102,   109,   116,
 -     124,   144,   150,   200,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,    20,   -46,    16,    26,
 -     273,    13,    99,   106,   118,    50,     7,   235,  -678,   160,
 -     208,   211,   220,   227,  -678,  -678,  -678,  -678,  -678,   228,
 -    -678,    33,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   280,
 -     291,  -678,  -678,  -678,   301,   303,   304,   306,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,   308,  -678,  -678,  -678,
 -      39,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,   309,    43,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   311,
 -     312,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -      52,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,    78,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,   247,   261,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,   313,  -678,  -678,  -678,   317,  -678,  -678,
 -     314,   320,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,   321,   322,  -678,  -678,  -678,  -678,   316,
 -     324,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,   103,  -678,  -678,  -678,   325,  -678,  -678,   327,  -678,
 -     328,   344,  -678,  -678,   345,   346,   347,  -678,  -678,  -678,
 -     114,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,    20,    20,  -678,
 -     186,   348,   349,   350,   351,   352,  -678,    16,  -678,   353,
 -     213,   214,   359,   360,   361,   223,   224,   225,   229,   365,
 -     366,   367,   369,   370,   371,   372,   374,   236,   376,   377,
 -      26,  -678,   378,   379,   239,   273,  -678,    70,   381,   382,
 -     383,   384,   385,   386,   387,   252,   253,   388,   389,   390,
 -     392,    13,  -678,   393,   395,    99,  -678,   396,   397,   398,
 -     399,   400,   401,   402,   403,   404,   405,  -678,   106,   406,
 -     407,   270,   408,   410,   411,   274,  -678,   118,   412,   275,
 -     276,  -678,    50,   413,   414,   -15,  -678,   277,   419,   420,
 -     282,   422,   284,   285,   425,   426,   286,   287,   288,   430,
 -     431,   235,  -678,  -678,  -678,   432,   433,   434,    20,    20,
 -      20,  -678,   435,  -678,  -678,   295,   437,   438,  -678,  -678,
 -    -678,  -678,   441,   442,   445,   446,   449,   450,   451,   454,
 -    -678,   455,   456,  -678,   452,   176,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,   457,   436,  -678,  -678,  -678,
 -     296,   326,   330,   453,   331,   332,   333,  -678,  -678,    -6,
 -     334,   459,   462,  -678,   335,   463,  -678,   337,   338,   452,
 -     339,   340,   341,   342,   343,   354,   355,  -678,   356,   357,
 -    -678,   358,   362,   363,  -678,  -678,   364,  -678,  -678,  -678,
 -     368,    20,  -678,  -678,   373,   375,  -678,   380,  -678,  -678,
 -      35,   394,  -678,  -678,  -678,    88,   391,  -678,    20,    26,
 -     409,  -678,  -678,  -678,   273,  -678,   164,   164,   480,   481,
 -     482,   483,   159,    31,   484,   154,   207,   235,  -678,  -678,
 -    -678,  -678,  -678,   488,  -678,    70,  -678,  -678,  -678,   486,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   487,   418,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,   169,  -678,   206,  -678,
 -    -678,   226,  -678,  -678,  -678,  -678,   491,   498,   499,   503,
 -     505,  -678,  -678,  -678,   248,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   249,  -678,
 -     460,   508,  -678,  -678,   506,   510,  -678,  -678,   512,   511,
 -    -678,  -678,   513,   517,  -678,  -678,  -678,  -678,  -678,  -678,
 -      79,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   147,  -678,
 -     515,   520,  -678,   521,   522,   523,   524,   526,   527,   250,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   251,
 -    -678,  -678,  -678,   258,   415,   416,  -678,  -678,   518,   529,
 -    -678,  -678,   528,   532,  -678,  -678,   530,  -678,   533,   409,
 -    -678,  -678,   535,   536,   537,   538,   417,   421,   424,   423,
 -     427,   539,   540,   164,  -678,  -678,    13,  -678,   480,   118,
 -    -678,   481,    50,  -678,   482,    89,  -678,   483,   159,  -678,
 -      31,  -678,     7,  -678,   484,   428,   429,   439,   440,   443,
 -     444,   154,  -678,   541,   542,   207,  -678,  -678,  -678,   543,
 -     544,  -678,    99,  -678,   486,   106,  -678,   487,   546,  -678,
 -     531,  -678,   265,   447,   448,   458,  -678,  -678,  -678,  -678,
 -    -678,   461,   464,  -678,   259,  -678,   545,  -678,   547,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   260,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   262,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,   465,   466,  -678,
 -    -678,   467,   268,  -678,   548,  -678,   468,   509,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,    89,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,   272,  -678,  -678,    -9,   509,  -678,  -678,   550,  -678,
 -    -678,  -678,   269,  -678,  -678,  -678,  -678,  -678,   555,   469,
 -     557,    -9,  -678,   558,  -678,   471,  -678,   562,  -678,  -678,
 -     293,  -678,    54,   562,  -678,  -678,   560,   561,   569,   271,
 -    -678,  -678,  -678,  -678,  -678,  -678,   570,   470,   473,   474,
 -      54,  -678,   472,  -678,  -678,  -678,  -678,  -678
++     211,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,    39,    18,    38,    58,    71,    73,    75,
++     120,   146,   179,   185,   193,   203,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++      18,   -72,     9,    83,   196,    22,   -14,    31,    51,    91,
++      23,   -27,   222,  -688,   214,   226,   227,   239,   257,  -688,
++    -688,  -688,  -688,  -688,   275,  -688,    34,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,   277,   278,  -688,  -688,  -688,   280,
++     281,   282,   287,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,   288,  -688,  -688,  -688,    45,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++     290,    46,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,   291,   292,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,    52,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,    61,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,   298,   296,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,   299,  -688,  -688,
++     305,  -688,  -688,  -688,   306,  -688,  -688,   304,   297,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++     311,   312,  -688,  -688,  -688,  -688,   309,   316,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,    87,  -688,
++    -688,  -688,   331,  -688,  -688,   332,  -688,   334,   335,  -688,
++    -688,   350,   351,   352,  -688,  -688,  -688,   148,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,    18,    18,  -688,   217,   357,   359,
++     360,   362,   363,  -688,     9,  -688,   364,   223,   228,   366,
++     367,   368,   229,   231,   232,   233,   374,   375,   376,   377,
++     378,   379,   380,   381,   242,   383,   384,    83,  -688,   385,
++     386,   245,   196,  -688,    72,   388,   389,   390,   391,   392,
++     393,   394,   395,   260,   254,   397,   398,   399,   401,    22,
++    -688,   402,   -14,  -688,   403,   404,   405,   406,   407,   408,
++     409,   410,   411,   412,  -688,    31,  -688,   413,   414,   276,
++     415,   417,   418,   279,  -688,    91,   419,   283,   284,  -688,
++      23,   420,   422,   -29,  -688,   285,   423,   424,   289,   428,
++     293,   294,   430,   431,   295,   301,   302,   432,   435,   222,
++    -688,  -688,  -688,   438,   436,   437,    18,    18,    18,  -688,
++     442,  -688,  -688,   307,   444,   447,  -688,  -688,  -688,  -688,
++     450,   451,   453,   454,   455,   456,   457,   458,  -688,   459,
++     460,  -688,   463,   121,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,   461,   467,  -688,  -688,  -688,   329,   330,
++     333,   469,   468,   336,   337,   338,  -688,  -688,    49,   340,
++     472,   471,  -688,   341,  -688,   342,   343,   463,   344,   346,
++     347,   348,   349,   353,   354,  -688,   355,   356,  -688,   358,
++     361,   365,  -688,  -688,   369,  -688,  -688,  -688,   370,    18,
++    -688,  -688,   371,   372,  -688,   373,  -688,  -688,    20,   396,
++    -688,  -688,  -688,    79,   382,  -688,    18,    83,   387,  -688,
++    -688,  -688,   196,  -688,   219,   219,   486,   487,   488,   493,
++     125,    25,   495,   147,    76,   222,  -688,  -688,  -688,  -688,
++    -688,   499,  -688,    72,  -688,  -688,  -688,   498,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,   502,   434,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,   168,  -688,   172,  -688,  -688,   213,
++    -688,  -688,  -688,  -688,   507,   514,   515,   516,   517,  -688,
++    -688,  -688,   215,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,   216,  -688,   500,   519,
++    -688,  -688,   518,   520,  -688,  -688,   521,   523,  -688,  -688,
++     522,   526,  -688,  -688,  -688,  -688,  -688,  -688,    30,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,   224,  -688,   524,   528,
++    -688,   529,   530,   531,   532,   533,   534,   225,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,   255,  -688,  -688,
++    -688,   256,   400,   416,  -688,  -688,   535,   536,  -688,  -688,
++     538,   537,  -688,  -688,   539,  -688,   541,   387,  -688,  -688,
++     542,   544,   545,   546,   421,   425,   426,   427,   433,   547,
++     548,   219,  -688,  -688,    22,  -688,   486,    91,  -688,   487,
++      23,  -688,   488,   150,  -688,   493,   125,  -688,    25,  -688,
++     -27,  -688,   495,   439,   440,   441,   443,   445,   446,   147,
++    -688,   549,   550,    76,  -688,  -688,  -688,   551,   552,  -688,
++     -14,  -688,   498,    31,  -688,   502,   554,  -688,   527,  -688,
++     132,   429,   448,   449,  -688,  -688,  -688,  -688,  -688,   452,
++     462,  -688,   258,  -688,   553,  -688,   555,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,   259,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,   266,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,   464,   465,  -688,  -688,   466,
++     267,  -688,   556,  -688,   470,   559,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,   150,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,   238,
++    -688,  -688,    64,   559,  -688,  -688,   558,  -688,  -688,  -688,
++     268,  -688,  -688,  -688,  -688,  -688,   563,   473,   564,    64,
++    -688,   569,  -688,   475,  -688,   562,  -688,  -688,   274,  -688,
++      57,   562,  -688,  -688,   571,   572,   574,   270,  -688,  -688,
++    -688,  -688,  -688,  -688,   575,   474,   477,   478,    57,  -688,
++     476,  -688,  -688,  -688,  -688,  -688
    };
  
    const unsigned short int
    Dhcp4Parser::yydefact_[] =
    {
         0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
 -      20,    22,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,     0,     0,     1,    39,    32,    28,    27,    24,
 -      25,    26,    31,     3,    29,    30,    52,     5,    64,     7,
 -     103,     9,   211,    11,   350,    13,   370,    15,   287,    17,
 -     322,    19,   176,    21,   448,    23,    41,    35,     0,     0,
 -       0,     0,     0,   372,   289,   324,     0,     0,    43,     0,
 -      42,     0,     0,    36,    62,   501,   495,   497,   499,     0,
 -      61,     0,    54,    56,    58,    59,    60,    57,    96,     0,
 -       0,   389,   112,   114,     0,     0,     0,     0,   203,   279,
 -     314,   256,   154,   415,   168,   187,     0,   436,   446,    89,
 -       0,    66,    68,    69,    70,    71,    86,    87,    74,    75,
 -      76,    77,    81,    82,    72,    73,    79,    80,    88,    78,
 -      83,    84,    85,   105,   107,     0,     0,    98,   100,   101,
 -     102,   419,   237,   239,   241,   342,   235,   243,   245,     0,
 -       0,   249,   247,   362,   411,   234,   215,   216,   217,   229,
 -       0,   213,   220,   231,   232,   233,   221,   222,   225,   227,
 -     223,   224,   218,   219,   226,   230,   228,   358,   360,   357,
 -     355,     0,   352,   354,   356,   391,   393,   409,   397,   399,
 -     403,   401,   407,   405,   395,   388,   384,     0,   373,   374,
 -     385,   386,   387,   381,   376,   382,   378,   379,   380,   383,
 -     377,   304,   144,     0,   308,   306,   311,     0,   300,   301,
 -       0,   290,   291,   293,   303,   294,   295,   296,   310,   297,
 -     298,   299,   336,     0,     0,   334,   335,   338,   339,     0,
 -     325,   326,   328,   329,   330,   331,   332,   333,   183,   185,
 -     180,     0,   178,   181,   182,     0,   468,   470,     0,   473,
 -       0,     0,   477,   481,     0,     0,     0,   486,   493,   466,
 -       0,   450,   452,   453,   454,   455,   456,   457,   458,   459,
 -     460,   461,   462,   463,   464,   465,    40,     0,     0,    33,
 -       0,     0,     0,     0,     0,     0,    51,     0,    53,     0,
 +      20,    22,    24,     0,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     1,    41,    34,    30,
 +      29,    26,    27,    28,    33,     3,    31,    32,    54,     5,
-       66,     7,   104,     9,   212,    11,   331,    13,   351,    15,
-      260,    17,   268,    19,   303,    21,   177,    23,   429,    25,
-       43,    37,     0,     0,     0,     0,     0,   353,     0,   270,
-      305,     0,     0,    45,     0,    44,     0,     0,    38,    64,
-      482,   476,   478,   480,     0,    63,     0,    56,    58,    60,
-       61,    62,    59,    97,     0,     0,   370,   113,   115,     0,
-        0,     0,     0,   204,   258,   295,   155,   396,   169,   188,
-        0,   417,   427,    90,     0,    68,    70,    71,    72,    73,
-       87,    88,    75,    76,    77,    78,    82,    83,    74,    80,
-       81,    89,    79,    84,    85,    86,   106,   108,     0,     0,
-       99,   101,   102,   103,   400,   239,   241,   243,   323,   341,
-      237,   245,   247,     0,     0,   251,   249,   343,   392,   236,
-      216,   217,   218,   230,     0,   214,   221,   232,   233,   234,
-      222,   223,   226,   228,   224,   225,   219,   220,   235,   227,
-      231,   229,   339,   338,   336,     0,   333,   335,   337,   372,
-      374,   390,   378,   380,   384,   382,   388,   386,   376,   369,
-      365,     0,   354,   355,   366,   367,   368,   362,   357,   363,
-      359,   360,   361,   364,   358,     0,   285,   145,     0,   289,
-      287,   292,     0,   281,   282,     0,   271,   272,   274,   284,
-      275,   276,   277,   291,   278,   279,   280,   317,     0,     0,
-      315,   316,   319,   320,     0,   306,   307,   309,   310,   311,
-      312,   313,   314,   184,   186,   181,     0,   179,   182,   183,
-        0,   449,   451,     0,   454,     0,     0,   458,   462,     0,
-        0,     0,   467,   474,   447,     0,   431,   433,   434,   435,
-      436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-      446,    42,     0,     0,    35,     0,     0,     0,     0,     0,
-        0,    53,     0,    55,     0,     0,     0,     0,     0,     0,
++      66,     7,   105,     9,   213,    11,   355,    13,   375,    15,
++     284,    17,   292,    19,   327,    21,   178,    23,   453,    25,
++      43,    37,     0,     0,     0,     0,     0,   377,     0,   294,
++     329,     0,     0,    45,     0,    44,     0,     0,    38,    64,
++     506,   500,   502,   504,     0,    63,     0,    56,    58,    60,
++      61,    62,    59,    98,     0,     0,   394,   114,   116,     0,
++       0,     0,     0,   205,   282,   319,   259,   156,   420,   170,
++     189,     0,   441,   451,    91,     0,    68,    70,    71,    72,
++      73,    88,    89,    76,    77,    78,    79,    83,    84,    74,
++      75,    81,    82,    90,    80,    85,    86,    87,   107,   109,
++       0,     0,   100,   102,   103,   104,   424,   240,   242,   244,
++     347,   365,   238,   246,   248,     0,     0,   252,   250,   367,
++     416,   237,   217,   218,   219,   231,     0,   215,   222,   233,
++     234,   235,   223,   224,   227,   229,   225,   226,   220,   221,
++     236,   228,   232,   230,   363,   362,   360,     0,   357,   359,
++     361,   396,   398,   414,   402,   404,   408,   406,   412,   410,
++     400,   393,   389,     0,   378,   379,   390,   391,   392,   386,
++     381,   387,   383,   384,   385,   388,   382,     0,   309,   146,
++       0,   313,   311,   316,     0,   305,   306,     0,   295,   296,
++     298,   308,   299,   300,   301,   315,   302,   303,   304,   341,
++       0,     0,   339,   340,   343,   344,     0,   330,   331,   333,
++     334,   335,   336,   337,   338,   185,   187,   182,     0,   180,
++     183,   184,     0,   473,   475,     0,   478,     0,     0,   482,
++     486,     0,     0,     0,   491,   498,   471,     0,   455,   457,
++     458,   459,   460,   461,   462,   463,   464,   465,   466,   467,
++     468,   469,   470,    42,     0,     0,    35,     0,     0,     0,
++       0,     0,     0,    53,     0,    55,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,    67,     0,
++       0,     0,     0,   106,   426,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,    67,     0,     0,     0,     0,
-      105,   402,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,     0,   213,     0,     0,
-      332,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,   352,     0,   261,     0,     0,     0,     0,     0,     0,
-        0,   269,     0,     0,     0,     0,   304,     0,     0,     0,
-        0,   178,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,     0,   430,    46,    39,
-        0,     0,     0,     0,     0,     0,    57,     0,    95,    96,
-        0,     0,     0,    91,    92,    93,    94,     0,     0,     0,
-        0,     0,     0,     0,   416,     0,     0,    69,     0,     0,
-      112,   100,   414,   412,   413,   408,   409,   410,   411,     0,
-      403,   404,   406,   407,     0,     0,     0,     0,     0,     0,
-        0,     0,   256,   257,     0,     0,     0,     0,   215,     0,
-      334,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,   356,     0,     0,   283,     0,     0,     0,   294,   273,
-        0,   321,   322,   308,     0,     0,   180,   448,     0,     0,
-      453,     0,   456,   457,     0,     0,   464,   465,   466,     0,
-        0,   432,     0,     0,     0,   477,   479,   481,     0,   371,
-        0,     0,   206,   262,   297,     0,     0,   171,     0,     0,
-        0,    47,   107,   110,   111,   109,     0,   401,     0,   240,
-      242,   244,   325,    36,   342,   238,   246,   248,   253,   254,
-      255,   252,   250,   345,     0,   340,   373,   375,   391,   379,
-      381,   385,   383,   389,   387,   377,   286,   146,   290,   288,
-      293,   318,   185,   187,   450,   452,   455,   460,   461,   459,
-      463,   469,   470,   471,   472,   473,   468,   475,    40,     0,
-      487,     0,   484,   486,     0,   132,   138,   140,   142,     0,
-        0,     0,     0,     0,   151,   153,   131,     0,   117,   119,
-      120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-      130,     0,   210,     0,   207,   208,   266,     0,   263,   264,
-      301,     0,   298,   299,   164,   165,   166,   167,   168,     0,
-      157,   159,   160,   161,   162,   163,   398,     0,   175,     0,
-      172,   173,     0,     0,     0,     0,     0,     0,     0,   190,
-      192,   193,   194,   195,   196,   197,   423,   425,     0,   419,
-      421,   422,     0,    49,     0,   405,   329,     0,   326,   327,
-      349,     0,   346,   347,   394,     0,    65,     0,     0,   483,
-       98,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,   114,   116,     0,   205,     0,   270,   259,
-        0,   305,   296,     0,     0,   156,     0,   397,     0,   170,
-        0,     0,     0,     0,     0,     0,     0,     0,   189,     0,
-        0,     0,   418,   428,    51,     0,    50,   415,     0,   324,
-        0,   353,   344,     0,     0,   393,     0,   485,     0,     0,
-        0,     0,   144,   147,   148,   149,   150,     0,     0,   118,
-        0,   209,     0,   265,     0,   300,   158,   399,     0,   174,
-      198,   199,   200,   201,   202,   203,   191,     0,     0,   420,
-       48,     0,     0,   328,     0,   348,     0,     0,   134,   135,
-      136,   137,   133,   139,   141,   143,   152,   154,   211,   267,
-      302,   176,   424,   426,    52,   330,   350,   395,   491,     0,
-      489,     0,     0,   488,   503,     0,   501,   499,   495,     0,
-      493,   497,   498,   496,   490,     0,     0,     0,     0,   492,
-        0,   500,     0,   494,     0,   502,   507,     0,   505,     0,
-        0,   504,   515,     0,     0,     0,     0,   509,   511,   512,
-      513,   514,   506,     0,     0,     0,     0,     0,   508,     0,
-      517,   518,   519,   510,   516
 -       0,    65,     0,     0,     0,     0,   104,   421,     0,     0,
++     214,     0,     0,   356,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,   376,     0,   285,     0,     0,     0,
++       0,     0,     0,     0,   293,     0,     0,     0,     0,   328,
++       0,     0,     0,     0,   179,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,   212,     0,     0,     0,   351,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,   371,     0,     0,
 -       0,     0,     0,     0,     0,     0,   288,     0,     0,     0,
 -       0,   323,     0,     0,     0,     0,   177,     0,     0,     0,
++     454,    46,    39,     0,     0,     0,     0,     0,     0,    57,
++       0,    96,    97,     0,     0,     0,    92,    93,    94,    95,
++       0,     0,     0,     0,     0,     0,     0,     0,   440,     0,
++       0,    69,     0,     0,   113,   101,   438,   436,   437,   432,
++     433,   434,   435,     0,   427,   428,   430,   431,     0,     0,
++       0,     0,     0,     0,     0,     0,   257,   258,     0,     0,
++       0,     0,   216,     0,   358,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,   380,     0,     0,   307,     0,
++       0,     0,   318,   297,     0,   345,   346,   332,     0,     0,
++     181,   472,     0,     0,   477,     0,   480,   481,     0,     0,
++     488,   489,   490,     0,     0,   456,     0,     0,     0,   501,
++     503,   505,     0,   395,     0,     0,   207,   286,   321,   261,
++       0,     0,   172,     0,     0,     0,    47,   108,   111,   112,
++     110,     0,   425,     0,   241,   243,   245,   349,    36,   366,
++     239,   247,   249,   254,   255,   256,   253,   251,   369,     0,
++     364,   397,   399,   415,   403,   405,   409,   407,   413,   411,
++     401,   310,   147,   314,   312,   317,   342,   186,   188,   474,
++     476,   479,   484,   485,   483,   487,   493,   494,   495,   496,
++     497,   492,   499,    40,     0,   511,     0,   508,   510,     0,
++     133,   139,   141,   143,     0,     0,     0,     0,     0,   152,
++     154,   132,     0,   118,   120,   121,   122,   123,   124,   125,
++     126,   127,   128,   129,   130,   131,     0,   211,     0,   208,
++     209,   290,     0,   287,   288,   325,     0,   322,   323,   265,
++       0,   262,   263,   165,   166,   167,   168,   169,     0,   158,
++     160,   161,   162,   163,   164,   422,     0,   176,     0,   173,
++     174,     0,     0,     0,     0,     0,     0,     0,   191,   193,
++     194,   195,   196,   197,   198,   447,   449,     0,   443,   445,
++     446,     0,    49,     0,   429,   353,     0,   350,   351,   373,
++       0,   370,   371,   418,     0,    65,     0,     0,   507,    99,
+        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,   449,    44,    37,     0,     0,     0,     0,     0,
 -       0,    55,     0,    94,    95,     0,     0,     0,    90,    91,
 -      92,    93,     0,     0,     0,     0,     0,     0,     0,     0,
 -     435,     0,     0,    67,     0,     0,   111,    99,   433,   431,
 -     432,   427,   428,   429,   430,     0,   422,   423,   425,   426,
 -       0,     0,     0,     0,     0,     0,     0,   254,   255,     0,
 -       0,     0,     0,   214,     0,     0,   353,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,   375,     0,     0,
 -     302,     0,     0,     0,   313,   292,     0,   340,   341,   327,
 -       0,     0,   179,   467,     0,     0,   472,     0,   475,   476,
 -       0,     0,   483,   484,   485,     0,     0,   451,     0,     0,
 -       0,   496,   498,   500,     0,   390,     0,     0,   205,   281,
 -     316,   258,     0,     0,   170,     0,     0,     0,    45,   106,
 -     109,   110,   108,     0,   420,     0,   238,   240,   242,   344,
 -     236,   244,   246,   251,   252,   253,   250,   248,   364,     0,
 -     359,    34,   361,   392,   394,   410,   398,   400,   404,   402,
 -     408,   406,   396,   305,   145,   309,   307,   312,   337,   184,
 -     186,   469,   471,   474,   479,   480,   478,   482,   488,   489,
 -     490,   491,   492,   487,   494,    38,     0,   506,     0,   503,
 -     505,     0,   131,   137,   139,   141,     0,     0,     0,     0,
 -       0,   150,   152,   130,     0,   116,   118,   119,   120,   121,
 -     122,   123,   124,   125,   126,   127,   128,   129,     0,   209,
 -       0,   206,   207,   285,     0,   282,   283,   320,     0,   317,
 -     318,   262,     0,   259,   260,   163,   164,   165,   166,   167,
 -       0,   156,   158,   159,   160,   161,   162,   417,     0,   174,
 -       0,   171,   172,     0,     0,     0,     0,     0,     0,     0,
 -     189,   191,   192,   193,   194,   195,   196,   442,   444,     0,
 -     438,   440,   441,     0,    47,     0,   424,   348,     0,   345,
 -     346,   368,     0,   365,   366,   413,     0,    63,     0,     0,
 -     502,    97,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,     0,     0,   113,   115,     0,   204,     0,   289,
 -     280,     0,   324,   315,     0,     0,   257,     0,     0,   155,
 -       0,   416,     0,   169,     0,     0,     0,     0,     0,     0,
 -       0,     0,   188,     0,     0,     0,   437,   447,    49,     0,
 -      48,   434,     0,   343,     0,   372,   363,     0,     0,   412,
 -       0,   504,     0,     0,     0,     0,   143,   146,   147,   148,
 -     149,     0,     0,   117,     0,   208,     0,   284,     0,   319,
 -     278,   277,   269,   270,   272,   266,   267,   268,   275,     0,
 -     264,   271,   273,   274,   276,   261,   157,   418,     0,   173,
 -     197,   198,   199,   200,   201,   202,   190,     0,     0,   439,
 -      46,     0,     0,   347,     0,   367,     0,     0,   133,   134,
 -     135,   136,   132,   138,   140,   142,   151,   153,   210,   286,
 -     321,     0,   263,   175,   443,   445,    50,   349,   369,   414,
 -     510,     0,   508,   265,     0,     0,   507,   522,     0,   520,
 -     518,   514,     0,   512,   516,   517,   515,   509,     0,     0,
 -       0,     0,   511,     0,   519,     0,   513,     0,   521,   526,
 -       0,   524,     0,     0,   523,   534,     0,     0,     0,     0,
 -     528,   530,   531,   532,   533,   525,     0,     0,     0,     0,
 -       0,   527,     0,   536,   537,   538,   529,   535
++       0,     0,   115,   117,     0,   206,     0,   294,   283,     0,
++     329,   320,     0,     0,   260,     0,     0,   157,     0,   421,
++       0,   171,     0,     0,     0,     0,     0,     0,     0,     0,
++     190,     0,     0,     0,   442,   452,    51,     0,    50,   439,
++       0,   348,     0,   377,   368,     0,     0,   417,     0,   509,
++       0,     0,     0,     0,   145,   148,   149,   150,   151,     0,
++       0,   119,     0,   210,     0,   289,     0,   324,   281,   280,
++     272,   273,   275,   269,   270,   271,   278,     0,   267,   274,
++     276,   277,   279,   264,   159,   423,     0,   175,   199,   200,
++     201,   202,   203,   204,   192,     0,     0,   444,    48,     0,
++       0,   352,     0,   372,     0,     0,   135,   136,   137,   138,
++     134,   140,   142,   144,   153,   155,   212,   291,   326,     0,
++     266,   177,   448,   450,    52,   354,   374,   419,   515,     0,
++     513,   268,     0,     0,   512,   527,     0,   525,   523,   519,
++       0,   517,   521,   522,   520,   514,     0,     0,     0,     0,
++     516,     0,   524,     0,   518,     0,   526,   531,     0,   529,
++       0,     0,   528,   539,     0,     0,     0,     0,   533,   535,
++     536,   537,   538,   530,     0,     0,     0,     0,     0,   532,
++       0,   541,   542,   543,   534,   540
    };
  
    const short int
    Dhcp4Parser::yypgoto_[] =
    {
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,   -45,  -496,    78,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,   -56,  -496,  -496,  -496,   -62,
-     -496,  -496,  -496,   227,  -496,  -496,  -496,  -496,    30,   222,
-      -54,   -43,   -42,  -496,  -496,   -41,  -496,  -496,    37,   218,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,    38,  -144,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,   -69,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -154,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -157,  -496,  -496,
-     -496,  -151,   181,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -163,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -135,  -496,  -496,  -496,  -131,   223,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -495,
-     -496,  -496,  -496,  -496,  -496,  -496,   512,  -496,  -496,  -496,
-     -496,  -496,  -133,  -496,  -496,  -496,  -130,  -496,   193,  -496,
-      -52,  -496,  -496,  -496,  -496,  -496,   -50,  -496,  -496,  -496,
-     -496,  -496,   -53,  -496,  -496,  -496,  -129,  -496,  -496,  -496,
-     -125,  -496,   195,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -149,  -496,  -496,  -496,  -143,   238,
-     -496,  -496,   -64,  -496,  -496,  -496,  -496,  -496,  -141,  -496,
-     -496,  -496,  -136,  -496,   234,   -48,  -496,  -325,  -496,  -315,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,    70,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -124,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,    79,   194,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,
-     -496,  -496,  -496,  -496,  -496,  -496,  -496,  -496,   -78,  -496,
-     -496,  -496,  -201,  -496,  -496,  -216,  -496,  -496,  -496,  -496,
-     -496,  -496,  -227,  -496,  -496,  -243,  -496,  -496,  -496,  -496,
-     -496
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,   -38,  -678,    93,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,    92,  -678,  -678,  -678,   -58,  -678,
 -    -678,  -678,   255,  -678,  -678,  -678,  -678,    63,   256,   -60,
 -     -59,   -44,  -678,  -678,   -40,  -678,  -678,    71,   254,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,    73,  -116,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,   -54,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -130,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -133,  -678,  -678,  -678,
 -    -128,   210,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -129,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -677,  -678,  -678,  -678,
 -    -110,  -678,  -678,  -678,  -105,   257,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -675,  -678,  -678,  -678,  -494,  -678,
 -    -672,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -114,
 -    -678,  -678,  -217,  -678,  -678,  -678,  -678,  -106,  -678,  -678,
 -    -678,  -103,  -678,   230,  -678,   -52,  -678,  -678,  -678,  -678,
 -    -678,   -42,  -678,  -678,  -678,  -678,  -678,   -47,  -678,  -678,
 -    -678,  -102,  -678,  -678,  -678,  -101,  -678,   232,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -135,
 -    -678,  -678,  -678,  -127,   266,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -119,  -678,  -678,  -678,  -115,  -678,   263,
 -     -39,  -678,  -317,  -678,  -315,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -671,  -678,  -678,  -678,  -670,  -678,  -678,  -678,
 -    -678,  -678,    94,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -100,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,   105,
 -     233,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,  -678,
 -    -678,  -678,  -678,   -56,  -678,  -678,  -678,  -199,  -678,  -678,
 -    -214,  -678,  -678,  -678,  -678,  -678,  -678,  -225,  -678,  -678,
 -    -241,  -678,  -678,  -678,  -678,  -678
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,   -49,  -688,    90,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,    89,  -688,  -688,  -688,   -62,
++    -688,  -688,  -688,   300,  -688,  -688,  -688,  -688,    53,   253,
++     -52,   -47,   -44,  -688,  -688,   -41,  -688,  -688,    69,   250,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,    78,  -115,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,   -69,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -128,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -126,  -688,  -688,
++    -688,  -123,   218,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -135,  -688,  -688,  -688,  -688,  -688,  -688,  -687,  -688,  -688,
++    -688,  -108,  -688,  -688,  -688,  -105,   251,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -685,  -688,  -688,  -688,  -504,
++    -688,  -675,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -113,  -688,  -688,  -216,   543,  -688,  -688,  -688,  -688,  -688,
++    -103,  -688,  -688,  -688,   -97,  -688,   237,  -688,   -40,  -688,
++    -688,  -688,  -688,  -688,   -39,  -688,  -688,  -688,  -688,  -688,
++     -51,  -688,  -688,  -688,   -98,  -688,  -688,  -688,   -95,  -688,
++     236,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -119,  -688,  -688,  -688,  -116,   273,  -688,  -688,
++     -64,  -688,  -688,  -688,  -688,  -688,  -118,  -688,  -688,  -688,
++    -117,  -688,   263,   -45,  -688,  -328,  -688,  -322,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -670,  -688,  -688,  -688,  -669,
++    -688,  -688,  -688,  -688,  -688,    96,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -102,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,   105,   234,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,  -688,
++    -688,  -688,  -688,  -688,  -688,  -688,   -53,  -688,  -688,  -688,
++    -198,  -688,  -688,  -213,  -688,  -688,  -688,  -688,  -688,  -688,
++    -224,  -688,  -688,  -240,  -688,  -688,  -688,  -688,  -688
    };
  
    const short int
    Dhcp4Parser::yydefgoto_[] =
    {
 -      -1,    12,    13,    14,    15,    16,    17,    18,    19,    20,
 -      21,    22,    23,    32,    33,    34,    57,   542,    72,    73,
 -      35,    56,    69,    70,   519,   664,   729,   730,   109,    37,
 -      58,    81,    82,    83,   291,    39,    59,   110,   111,   112,
 -     113,   114,   115,   116,   117,   118,   299,   136,   137,    41,
 -      60,   138,   322,   139,   323,   522,   140,   119,   303,   120,
 -     304,   594,   595,   596,   682,   802,   597,   683,   598,   684,
 -     599,   685,   600,   219,   360,   602,   603,   604,   605,   606,
 -     691,   607,   692,   121,   313,   630,   631,   632,   633,   634,
 -     635,   636,   122,   315,   640,   641,   642,   712,    53,    66,
 -     251,   252,   253,   373,   254,   374,   123,   316,   649,   650,
 -     651,   652,   653,   654,   655,   656,   124,   309,   610,   611,
 -     612,   696,    43,    61,   160,   161,   162,   332,   163,   328,
 -     164,   329,   165,   330,   166,   333,   167,   334,   168,   338,
 -     169,   337,   536,   170,   171,   125,   312,   622,   623,   624,
 -     705,   769,   770,   126,   310,   614,   615,   616,   699,    49,
 -      64,   220,   221,   222,   223,   224,   225,   226,   359,   227,
 -     363,   228,   362,   229,   230,   364,   231,   127,   311,   618,
 -     619,   620,   702,    51,    65,   239,   240,   241,   242,   243,
 -     368,   244,   245,   246,   247,   173,   331,   668,   669,   670,
 -     732,    45,    62,   181,   182,   183,   343,   184,   344,   174,
 -     339,   672,   673,   674,   735,    47,    63,   197,   198,   199,
 -     128,   302,   201,   347,   202,   348,   203,   356,   204,   350,
 -     205,   351,   206,   353,   207,   352,   208,   355,   209,   354,
 -     210,   349,   176,   340,   676,   738,   129,   314,   638,   327,
 -     435,   436,   437,   438,   439,   523,   130,   131,   318,   659,
 -     660,   661,   723,   662,   724,   132,   319,    55,    67,   270,
 -     271,   272,   273,   378,   274,   379,   275,   276,   381,   277,
 -     278,   279,   384,   566,   280,   385,   281,   282,   283,   284,
 -     389,   573,   285,   390,    84,   293,    85,   294,    86,   295,
 -      87,   292,   578,   579,   580,   678,   821,   822,   824,   832,
 -     833,   834,   835,   840,   836,   838,   850,   851,   852,   859,
 -     860,   861,   866,   862,   863,   864
 +      -1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-       22,    23,    24,    25,    34,    35,    36,    61,   534,    77,
-       78,    37,    60,    74,    75,   522,   663,   725,   726,   113,
-       39,    62,    86,    87,    88,   296,    41,    63,   114,   115,
-      116,   117,   118,   119,   120,   121,   122,   304,   139,   140,
-       43,    64,   141,   326,   142,   327,   525,   143,   123,   308,
-      124,   309,   597,   598,   599,   681,   782,   600,   682,   601,
-      683,   602,   684,   603,   224,   365,   605,   606,   607,   608,
-      609,   690,   610,   691,   125,   317,   629,   630,   631,   632,
-      633,   634,   635,   126,   319,   639,   640,   641,   708,    57,
-       71,   256,   257,   258,   378,   259,   379,   127,   320,   648,
-      649,   650,   651,   652,   653,   654,   655,   128,   314,   613,
-      614,   615,   695,    45,    65,   164,   165,   166,   337,   167,
-      332,   168,   333,   169,   334,   170,   338,   171,   339,   172,
-      343,   173,   342,   541,   174,   175,   129,   315,    51,    68,
-      617,   618,   619,   698,    53,    69,   225,   226,   227,   228,
-      229,   230,   231,   364,   232,   368,   233,   367,   234,   235,
-      369,   236,   130,   316,   621,   622,   623,   701,    55,    70,
-      244,   245,   246,   247,   248,   373,   249,   250,   251,   252,
-      177,   335,   667,   668,   669,   728,    47,    66,   185,   186,
-      187,   348,   178,   336,   179,   344,   671,   672,   673,   731,
-       49,    67,   201,   202,   203,   131,   307,   205,   351,   206,
-      352,   207,   360,   208,   354,   209,   355,   210,   357,   211,
-      356,   212,   359,   213,   358,   214,   353,   181,   345,   675,
-      734,   132,   318,   637,   331,   439,   440,   441,   442,   443,
-      526,   133,   134,   322,   658,   659,   660,   719,   661,   720,
-      135,   323,    59,    72,   275,   276,   277,   278,   383,   279,
-      384,   280,   281,   386,   282,   283,   284,   389,   569,   285,
-      390,   286,   287,   288,   289,   394,   576,   290,   395,    89,
-      298,    90,   299,    91,   300,    92,   297,   581,   582,   583,
-      677,   799,   800,   801,   809,   810,   811,   812,   817,   813,
-      815,   827,   828,   829,   836,   837,   838,   843,   839,   840,
-      841
++      22,    23,    24,    25,    34,    35,    36,    61,   539,    77,
++      78,    37,    60,    74,    75,   527,   672,   737,   738,   114,
++      39,    62,    86,    87,    88,   298,    41,    63,   115,   116,
++     117,   118,   119,   120,   121,   122,   123,   306,   141,   142,
++      43,    64,   143,   329,   144,   330,   530,   145,   124,   310,
++     125,   311,   602,   603,   604,   690,   810,   605,   691,   606,
++     692,   607,   693,   608,   226,   368,   610,   611,   612,   613,
++     614,   699,   615,   700,   126,   320,   638,   639,   640,   641,
++     642,   643,   644,   127,   322,   648,   649,   650,   720,    57,
++      71,   258,   259,   260,   381,   261,   382,   128,   323,   657,
++     658,   659,   660,   661,   662,   663,   664,   129,   316,   618,
++     619,   620,   704,    45,    65,   166,   167,   168,   340,   169,
++     335,   170,   336,   171,   337,   172,   341,   173,   342,   174,
++     346,   175,   345,   546,   176,   177,   130,   319,   630,   631,
++     632,   713,   777,   778,   131,   317,    51,    68,   622,   623,
++     624,   707,    53,    69,   227,   228,   229,   230,   231,   232,
++     233,   367,   234,   371,   235,   370,   236,   237,   372,   238,
++     132,   318,   626,   627,   628,   710,    55,    70,   246,   247,
++     248,   249,   250,   376,   251,   252,   253,   254,   179,   338,
++     676,   677,   678,   740,    47,    66,   187,   188,   189,   351,
++     180,   339,   181,   347,   680,   681,   682,   743,    49,    67,
++     203,   204,   205,   133,   309,   207,   354,   208,   355,   209,
++     363,   210,   357,   211,   358,   212,   360,   213,   359,   214,
++     362,   215,   361,   216,   356,   183,   348,   684,   746,   134,
++     321,   646,   334,   443,   444,   445,   446,   447,   531,   135,
++     136,   325,   667,   668,   669,   731,   670,   732,   137,   326,
++      59,    72,   277,   278,   279,   280,   386,   281,   387,   282,
++     283,   389,   284,   285,   286,   392,   574,   287,   393,   288,
++     289,   290,   291,   397,   581,   292,   398,    89,   300,    90,
++     301,    91,   302,    92,   299,   586,   587,   588,   686,   829,
++     830,   832,   840,   841,   842,   843,   848,   844,   846,   858,
++     859,   860,   867,   868,   869,   874,   870,   871,   872
    };
  
    const unsigned short int
    Dhcp4Parser::yytable_[] =
    {
-       85,   241,   188,   159,   183,   199,   437,   223,   240,   255,
-      274,   160,   176,   184,   200,    73,   438,   180,   242,   204,
-      243,   636,   161,   162,   163,    27,   144,    28,    79,    29,
-      302,    26,   144,   253,   254,   303,   567,    95,    96,   704,
-       38,   585,   705,    96,   189,   190,   586,   587,   588,   589,
-      590,   591,   592,   593,   594,   595,   324,   105,    99,   100,
-      101,   325,    40,   145,   146,   147,   217,   105,   182,   149,
-      329,   346,   105,   217,    76,   330,   347,   148,    42,   149,
-      150,   151,   152,   153,   154,   155,   216,   253,   254,   349,
-       44,    84,   156,   157,   350,    93,   432,    46,   156,   380,
-      158,    94,    95,    96,   381,   832,    97,    98,   833,   834,
-      835,   217,    48,   218,   219,   396,   104,   220,   221,   222,
-      397,   217,    50,    99,   100,   101,   102,   103,    96,   189,
-      190,   104,   105,   568,   523,   524,    80,   217,   237,   218,
-      219,   238,   239,   324,   678,    81,    82,    83,   676,   679,
-       52,    84,    54,   329,   106,   107,    56,   105,   680,    84,
-       84,    84,    30,    31,    32,    33,    84,   108,   656,   657,
-      109,   571,   572,   573,   574,   136,   137,   110,   111,   138,
-      191,   112,    58,   291,   192,   193,   194,   195,   196,   197,
-      706,   198,   804,   707,   805,   806,   624,   625,   626,   627,
-      292,   628,   575,   437,    84,   642,   643,   644,   645,   646,
-      647,   757,   692,   438,    84,   692,   717,   693,   721,   396,
-      694,   718,   346,   722,   723,   293,    84,   788,   380,   349,
-       84,   818,   847,   791,   795,   802,   819,   848,   803,   295,
-       85,   294,   778,   779,   780,   781,   830,   398,   399,   831,
-      301,    84,   538,   539,   540,   305,   306,   310,   311,   312,
-      313,   321,   434,   328,   340,   341,   361,   362,   400,   433,
-      363,   366,   370,   371,   372,   408,   374,   375,   435,   377,
-      409,   382,   376,   436,   159,   188,   385,   183,   387,   388,
-      391,   392,   160,   176,   393,   401,   184,   402,   180,   403,
-      199,   404,   405,   161,   162,   163,   407,   410,   241,   200,
-      223,   411,   412,   413,   204,   240,   414,   415,   417,   416,
-      418,   419,   420,   421,   422,   242,   423,   243,   425,   424,
-      426,   428,   429,   430,   274,   260,   261,   262,   263,   264,
-      265,   266,   267,   268,   269,   270,   271,   272,   273,   444,
-      445,   446,   447,   448,   449,   450,   451,   452,   505,   506,
-      507,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-       10,    11,    12,   454,   455,   453,   456,   457,   459,    84,
-      461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
-      472,   473,   474,   475,   476,   477,   480,   484,   485,   488,
-      489,   491,   494,   495,   499,   500,   502,   548,   478,   512,
-      503,   481,   504,   508,   482,   487,   510,   511,   490,   513,
-      514,   492,   493,   515,   516,   496,   497,   517,   498,   527,
-      509,   518,   519,   520,   521,   528,   529,    28,   530,   532,
-      563,   604,   604,   531,   543,   544,   535,   536,   596,   596,
-      612,   537,   542,   545,   546,   547,   616,   578,   274,   434,
-      620,   638,   664,   549,   666,   550,   433,   551,   570,   670,
-      674,   552,   553,   554,   555,   435,   556,   557,   558,   559,
-      436,   560,   561,   562,   564,   565,   566,   580,   685,   686,
-      687,   688,   689,   711,   697,   577,   696,   700,   699,   702,
-      703,   709,   710,   724,   712,   713,   714,   715,   716,   727,
-      730,   729,   732,   733,   742,   736,   735,   738,   739,   740,
-      741,   747,   748,   767,   768,   771,   533,   770,   776,   406,
-      777,   789,   816,   579,   790,   796,   798,   820,   822,   826,
-      824,   844,   845,   846,   849,   584,   427,   431,   749,   611,
-      756,   744,   743,   759,   766,   746,   745,   758,   850,   760,
-      761,   486,   751,   762,   750,   479,   763,   753,   752,   458,
-      764,   765,   483,   783,   755,   784,   754,   785,   786,   787,
-      215,   773,   792,   793,   794,   772,   797,   460,   821,   825,
-      501,   851,   775,   852,   854,   774,   471,   769,   665,   662,
-      737,   814,   823,   842,   853,     0,     0,     0,     0,     0,
 -      80,   156,   157,   155,   179,   195,   218,   235,   250,   269,
 -     433,   236,   434,   237,   172,   180,   196,   158,    68,   637,
 -     141,   159,   175,   238,   200,    25,    74,    26,   766,    27,
 -     767,    90,    91,   768,   773,   774,   297,    88,   141,    36,
 -     212,   298,   320,    89,    90,    91,   325,   321,    92,    93,
 -     564,   326,    94,    95,    96,   341,    24,   142,   143,   144,
 -     342,   100,   533,   534,   535,    94,    95,    96,    97,    98,
 -     248,   249,   145,    99,   100,   146,   147,   148,   149,   150,
 -     151,   345,   708,    38,   101,   709,   346,   152,   153,    91,
 -     185,   186,   248,   249,    40,   154,    71,   102,   103,   212,
 -     232,   213,   214,   233,   234,   152,   375,    90,    91,    42,
 -     104,   376,   827,   105,   828,   829,    44,   391,   100,   212,
 -     106,   107,   392,    46,   108,    91,   185,   186,    94,    95,
 -      96,    48,    98,    79,   766,    75,   767,   100,   212,   768,
 -     773,   774,   211,   428,    76,    77,    78,   100,   565,    79,
 -     710,    50,   147,   711,   100,    79,   151,    52,    79,   177,
 -     178,   103,    28,    29,    30,    31,   286,   212,    79,   213,
 -     214,   154,   320,   215,   216,   217,   855,   677,   187,   856,
 -     857,   858,   188,   189,   190,   191,   192,   193,   582,   194,
 -     520,   521,    79,   583,   584,   585,   586,   587,   588,   589,
 -     590,   591,   592,   568,   569,   570,   571,    54,   433,   679,
 -     434,   287,    79,   212,   680,   288,   777,     1,     2,     3,
 -       4,     5,     6,     7,     8,     9,    10,    11,   289,   325,
 -     290,    79,   296,   572,   681,   625,   626,   627,   628,    80,
 -     629,    79,   643,   644,   645,   646,   647,   648,    79,   393,
 -     394,   693,   693,   721,   725,   357,   694,   695,   722,   726,
 -      79,   391,   341,   811,   358,   375,   727,   808,   812,   429,
 -     813,   345,   841,   430,   870,   825,   817,   842,   826,   871,
 -     431,   156,   157,   155,   300,   133,   134,   179,   432,   135,
 -     798,   799,   800,   801,   172,   301,   853,   158,   180,   854,
 -     195,   159,   175,   657,   658,   305,    79,   306,   307,   218,
 -     308,   196,   317,   324,   235,   335,   336,   361,   236,   200,
 -     237,   365,   366,   367,   371,   369,   370,   372,   395,   377,
 -     238,   380,   382,   269,   255,   256,   257,   258,   259,   260,
 -     261,   262,   263,   264,   265,   266,   267,   268,   383,   386,
 -     387,   388,   396,   397,   398,   399,   400,   402,   403,   404,
 -     501,   502,   503,   405,   406,   407,   408,   409,   410,   412,
 -     413,   414,   411,   415,   416,   417,   418,    79,   419,   420,
 -     421,   422,   424,   425,   426,   440,   441,   442,   443,   444,
 -     445,   446,   449,   450,   451,   447,   452,   454,   448,   455,
 -     457,   458,   459,   460,   461,   462,   463,   464,   465,   466,
 -     468,   469,   471,   470,   472,   473,   476,   480,   481,   474,
 -     477,   478,   483,   484,   485,   486,   487,   488,   489,   490,
 -     491,   492,   493,   494,   495,   496,   498,   505,   526,   525,
 -     499,   500,   504,   560,   506,   507,   508,   509,   593,   593,
 -     510,   511,   601,   601,   512,   513,   514,   518,   529,   269,
 -     575,   515,   516,   517,   538,   524,   697,   429,   527,   539,
 -      26,   430,   528,   530,   531,   532,   537,   540,   431,   543,
 -     544,   546,   547,   548,   549,   550,   432,   609,   613,   617,
 -     621,   639,   665,   667,   671,   686,   551,   552,   553,   554,
 -     555,   675,   687,   688,   556,   557,   558,   689,   567,   690,
 -     559,   698,   700,   701,   704,   561,   820,   562,   703,   706,
 -     707,   713,   563,   714,   733,   715,   716,   717,   718,   577,
 -     719,   720,   734,   574,   736,   737,   797,   740,   739,   742,
 -     743,   744,   745,   751,   752,   787,   788,   791,   541,   790,
 -     796,   545,   401,   809,   839,   810,   818,   728,   731,   843,
 -     746,   845,   576,   847,   867,   868,   747,   748,   749,   849,
 -     750,   780,   781,   869,   872,   581,   423,   753,   776,   427,
 -     608,   779,   782,   783,   778,   482,   784,   785,   755,   803,
 -     804,   754,   786,   775,   823,   757,   756,   475,   453,   793,
 -     805,   758,   759,   806,   479,   792,   807,   814,   815,   816,
 -     819,   456,   844,   848,   877,   873,   874,   875,   795,   666,
 -     794,   467,   663,   741,   497,   789,   837,   846,   865,   876,
 -       0,     0,     0,     0,     0,   593,   156,   157,   155,   601,
 -       0,   218,     0,     0,   235,   761,   762,   760,   236,   172,
 -     237,   765,   158,     0,   250,     0,   159,   175,   771,     0,
 -     238,   763,     0,     0,     0,   764,   772,     0,     0,     0,
 -       0,     0,     0,     0,   179,     0,     0,   195,     0,     0,
 -       0,     0,     0,     0,     0,   180,     0,     0,   196,     0,
 -       0,     0,     0,     0,     0,     0,   200,     0,     0,     0,
++      85,   243,   190,   161,   185,   201,   441,   225,   242,   257,
++     276,    73,   442,   162,   178,   186,   202,   645,   163,    79,
++     182,   164,   206,    27,   165,    28,   774,    29,   775,   146,
++     244,   245,   146,   716,   105,   572,   717,   304,   776,    26,
++      95,    96,   305,   781,   782,    38,   184,   151,   327,   332,
++      96,   191,   192,   328,   333,   349,   255,   256,   255,   256,
++     350,    99,   100,   101,   352,    40,   147,   148,   149,   353,
++     105,    76,   219,   239,   220,   221,   240,   241,    42,   105,
++      44,   150,    46,   151,   152,   153,   154,   155,   156,   157,
++     383,    96,   191,   192,    93,   384,   158,   159,   104,   158,
++      94,    95,    96,   193,   160,    97,    98,   194,   195,   196,
++     197,   198,   199,   219,   200,   218,    84,   543,   544,   545,
++     105,   219,    99,   100,   101,   102,   103,    48,    80,    84,
++     104,   105,   774,   573,   775,   528,   529,    81,    82,    83,
++     219,   106,   220,   221,   776,   436,   222,   223,   224,   781,
++     782,   399,    84,    50,   107,   108,   400,   806,   807,   808,
++     809,    30,    31,    32,    33,    84,    84,   109,    95,    96,
++     110,   327,   665,   666,    84,   687,   685,   111,   112,   863,
++     688,   113,   864,   865,   866,   835,    52,   836,   837,    99,
++     100,   101,    54,   103,   576,   577,   578,   579,   105,   219,
++      56,   633,   634,   635,   636,   441,   637,    84,   138,   139,
++      58,   442,   140,   153,   785,    84,   332,   157,   701,   701,
++     293,   689,   108,   702,   703,   580,    84,   718,   729,   294,
++     719,   295,   160,   730,    84,   651,   652,   653,   654,   655,
++     656,   833,    85,   590,   834,   401,   402,   296,   591,   592,
++     593,   594,   595,   596,   597,   598,   599,   600,   733,   399,
++     297,   349,   819,   734,   735,   438,   816,   820,   219,   383,
++     352,   849,   437,   878,   821,   825,   850,   861,   879,   303,
++     862,   307,   308,   439,   312,   313,   314,   161,   190,   440,
++     185,   315,   324,    84,   331,   343,   344,   162,   178,   365,
++     375,   186,   163,   201,   182,   164,   364,   366,   165,   369,
++     373,   243,   374,   225,   202,   377,   378,   379,   242,   380,
++     206,   262,   263,   264,   265,   266,   267,   268,   269,   270,
++     271,   272,   273,   274,   275,   385,   388,   276,   390,   391,
++     244,   245,     1,     2,     3,     4,     5,     6,     7,     8,
++       9,    10,    11,    12,   394,   395,   396,   509,   510,   511,
++     403,   404,    84,   405,   406,    84,   407,   408,   410,   411,
++     413,   414,   415,   416,   412,   417,   418,   419,   420,   421,
++     422,   423,   424,   425,   426,   427,   428,   429,   430,   432,
++     433,   434,   448,   449,   450,   451,   452,   453,   454,   455,
++     457,   458,   459,   460,   456,   461,   463,   465,   466,   467,
++     468,   469,   470,   471,   472,   473,   474,   476,   477,   479,
++     478,   480,   481,   484,   488,   482,   489,   492,   493,   485,
++     486,   491,   495,   494,   498,   499,   503,   496,   497,   504,
++     568,   500,   506,   507,   508,   609,   609,   501,   502,   512,
++     513,   514,   601,   601,   515,   516,   517,   583,   518,   519,
++     520,   521,   522,   276,   438,   523,   524,   525,   526,   532,
++     533,   437,   534,   535,   537,    28,   536,   548,   549,   540,
++     541,   542,   439,   547,   550,   551,   552,   554,   440,   555,
++     556,   557,   558,   617,   621,   625,   559,   560,   561,   562,
++     629,   563,   647,   673,   564,   675,   705,   585,   565,   679,
++     575,   694,   566,   567,   569,   570,   571,   683,   695,   696,
++     697,   698,   706,   709,   708,   582,   712,   711,   714,   715,
++     721,   722,   805,   723,   724,   725,   726,   727,   728,   742,
++     745,   741,   538,   736,   744,   748,   750,   747,   751,   752,
++     753,   759,   760,   795,   796,   799,   553,   798,   804,   739,
++     584,   817,   847,   818,   826,   754,   828,   851,   853,   857,
++     756,   755,   811,   757,   855,   875,   876,   758,   877,   880,
++     431,   589,   435,   788,   789,   790,   761,   791,   784,   792,
++     793,   812,   813,   616,   794,   814,   787,   786,   763,   762,
++     462,   490,   783,   831,   409,   815,   765,   822,   823,   824,
++     764,   217,   483,   827,   767,   766,   487,   852,   856,   885,
++     881,   882,   883,   801,   800,   464,   802,   803,   475,   674,
++     671,   797,   609,   505,   749,   845,   854,   873,   884,   601,
++       0,   243,   161,     0,   773,   225,     0,     0,   242,     0,
++       0,   768,   162,   178,     0,     0,     0,   163,   257,   182,
++     164,   769,   779,   165,     0,     0,   770,     0,   780,   771,
++     244,   245,   772,     0,     0,     0,   190,     0,   185,     0,
++       0,   201,     0,     0,     0,     0,     0,     0,     0,   186,
++       0,     0,   202,     0,     0,     0,     0,     0,   206,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,   604,     0,     0,     0,     0,     0,     0,
-      596,     0,   241,   159,     0,     0,   223,     0,     0,   240,
-        0,   160,   176,     0,     0,     0,   255,   180,     0,   242,
-        0,   243,   161,   162,   163,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,   188,     0,   183,     0,     0,   199,
-        0,     0,     0,     0,     0,   184,     0,     0,   200,     0,
-        0,     0,     0,   204,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,   808,     0,     0,     0,     0,     0,     0,   807,
-        0,     0,     0,     0,     0,     0,     0,     0,     0,   808,
-        0,     0,     0,     0,     0,     0,   807
 -       0,   761,   762,   760,     0,     0,     0,   765,     0,     0,
 -       0,     0,     0,     0,   771,     0,   830,   763,     0,     0,
 -     831,   764,   772,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,     0,   830,     0,     0,     0,   831
++     773,     0,     0,     0,     0,     0,     0,   768,     0,     0,
++       0,     0,     0,   839,     0,     0,     0,   769,   779,     0,
++     838,     0,   770,     0,   780,   771,     0,     0,   772,     0,
++     839,     0,     0,     0,     0,     0,     0,   838
    };
  
    const short int
    Dhcp4Parser::yycheck_[] =
    {
-       62,    70,    66,    65,    66,    67,   331,    69,    70,    71,
-       72,    65,    65,    66,    67,    60,   331,    65,    70,    67,
-       70,   516,    65,    65,    65,     5,     7,     7,    10,     9,
-        3,     0,     7,    84,    85,     8,    15,    18,    19,     3,
-        7,    24,     6,    19,    20,    21,    29,    30,    31,    32,
-       33,    34,    35,    36,    37,    38,     3,    48,    39,    40,
-       41,     8,     7,    44,    45,    46,    49,    48,    59,    60,
-        3,     3,    48,    49,   142,     8,     8,    58,     7,    60,
-       61,    62,    63,    64,    65,    66,    24,    84,    85,     3,
-        7,   142,    73,    74,     8,    11,    72,     7,    73,     3,
-       81,    17,    18,    19,     8,   121,    22,    23,   124,   125,
-      126,    49,     7,    51,    52,     3,    47,    55,    56,    57,
-        8,    49,     7,    39,    40,    41,    42,    43,    19,    20,
-       21,    47,    48,   112,    14,    15,   118,    49,    50,    51,
-       52,    53,    54,     3,     3,   127,   128,   129,     8,     8,
-        7,   142,     7,     3,    70,    71,     7,    48,     8,   142,
-      142,   142,   142,   143,   144,   145,   142,    83,    95,    96,
-       86,   114,   115,   116,   117,    12,    13,    93,    94,    16,
-       71,    97,     7,     6,    75,    76,    77,    78,    79,    80,
-        3,    82,   120,     6,   122,   123,    75,    76,    77,    78,
-        3,    80,   145,   528,   142,    87,    88,    89,    90,    91,
-       92,   706,     3,   528,   142,     3,     3,     8,     3,     3,
-        8,     8,     3,     8,     8,     4,   142,     8,     3,     3,
-      142,     3,     3,     8,     8,     3,     8,     8,     6,     3,
-      302,     8,    25,    26,    27,    28,     3,   292,   293,     6,
-        4,   142,    67,    68,    69,     4,     4,     4,     4,     4,
-        4,     4,   331,     4,     4,     4,     8,     3,   142,   331,
-        8,     4,     4,     8,     3,   145,     4,     4,   331,     3,
-      145,     4,     8,   331,   346,   349,     4,   349,     4,     4,
-        4,     4,   346,   346,     4,     4,   349,     4,   346,     4,
-      362,     4,     4,   346,   346,   346,     4,     4,   377,   362,
-      372,     4,     4,   143,   362,   377,   143,   143,     4,   143,
-        4,     4,     4,     4,     4,   377,     4,   377,     4,   143,
-        4,     4,     4,   145,   396,    98,    99,   100,   101,   102,
-      103,   104,   105,   106,   107,   108,   109,   110,   111,     4,
-        4,     4,     4,     4,     4,     4,     4,   143,   403,   404,
-      405,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-      139,   140,   141,     4,     4,   145,     4,     4,     4,   142,
 -      58,    61,    61,    61,    62,    63,    64,    65,    66,    67,
 -     327,    65,   327,    65,    61,    62,    63,    61,    56,   513,
 -       7,    61,    61,    65,    63,     5,    10,     7,   705,     9,
 -     705,    18,    19,   705,   705,   705,     3,    11,     7,     7,
 -      49,     8,     3,    17,    18,    19,     3,     8,    22,    23,
 -      15,     8,    39,    40,    41,     3,     0,    44,    45,    46,
 -       8,    48,    68,    69,    70,    39,    40,    41,    42,    43,
 -      85,    86,    59,    47,    48,    62,    63,    64,    65,    66,
 -      67,     3,     3,     7,    58,     6,     8,    74,    75,    19,
 -      20,    21,    85,    86,     7,    82,   142,    71,    72,    49,
 -      50,    51,    52,    53,    54,    74,     3,    18,    19,     7,
 -      84,     8,   121,    87,   123,   124,     7,     3,    48,    49,
 -      94,    95,     8,     7,    98,    19,    20,    21,    39,    40,
 -      41,     7,    43,   142,   811,   119,   811,    48,    49,   811,
 -     811,   811,    24,    73,   128,   129,   130,    48,   113,   142,
 -       3,     7,    63,     6,    48,   142,    67,     7,   142,    60,
 -      61,    72,   142,   143,   144,   145,     6,    49,   142,    51,
 -      52,    82,     3,    55,    56,    57,   122,     8,    72,   125,
 -     126,   127,    76,    77,    78,    79,    80,    81,    24,    83,
 -      14,    15,   142,    29,    30,    31,    32,    33,    34,    35,
 -      36,    37,    38,   115,   116,   117,   118,     7,   525,     3,
 -     525,     3,   142,    49,     8,     4,   710,   131,   132,   133,
 -     134,   135,   136,   137,   138,   139,   140,   141,     8,     3,
 -       3,   142,     4,   145,     8,    76,    77,    78,    79,   297,
 -      81,   142,    88,    89,    90,    91,    92,    93,   142,   287,
 -     288,     3,     3,     3,     3,     8,     8,     8,     8,     8,
 -     142,     3,     3,     3,     3,     3,     8,     8,     8,   327,
 -       8,     3,     3,   327,     3,     3,     8,     8,     6,     8,
 -     327,   341,   341,   341,     4,    12,    13,   345,   327,    16,
 -      25,    26,    27,    28,   341,     4,     3,   341,   345,     6,
 -     358,   341,   341,    96,    97,     4,   142,     4,     4,   367,
 -       4,   358,     4,     4,   372,     4,     4,     4,   372,   358,
 -     372,     4,     8,     3,     8,     4,     4,     3,   142,     4,
 -     372,     4,     4,   391,    99,   100,   101,   102,   103,   104,
 -     105,   106,   107,   108,   109,   110,   111,   112,     4,     4,
 -       4,     4,     4,     4,     4,     4,     4,     4,   145,   145,
 -     398,   399,   400,     4,     4,     4,   143,   143,   143,     4,
 -       4,     4,   143,     4,     4,     4,     4,   142,     4,   143,
 -       4,     4,     4,     4,   145,     4,     4,     4,     4,     4,
 -       4,     4,     4,     4,     4,   143,     4,     4,   145,     4,
++      62,    70,    66,    65,    66,    67,   334,    69,    70,    71,
++      72,    60,   334,    65,    65,    66,    67,   521,    65,    10,
++      65,    65,    67,     5,    65,     7,   713,     9,   713,     7,
++      70,    70,     7,     3,    48,    15,     6,     3,   713,     0,
++      18,    19,     8,   713,   713,     7,    60,    61,     3,     3,
++      19,    20,    21,     8,     8,     3,    85,    86,    85,    86,
++       8,    39,    40,    41,     3,     7,    44,    45,    46,     8,
++      48,   143,    49,    50,    51,    52,    53,    54,     7,    48,
++       7,    59,     7,    61,    62,    63,    64,    65,    66,    67,
++       3,    19,    20,    21,    11,     8,    74,    75,    47,    74,
++      17,    18,    19,    72,    82,    22,    23,    76,    77,    78,
++      79,    80,    81,    49,    83,    24,   143,    68,    69,    70,
++      48,    49,    39,    40,    41,    42,    43,     7,   119,   143,
++      47,    48,   819,   113,   819,    14,    15,   128,   129,   130,
++      49,    58,    51,    52,   819,    73,    55,    56,    57,   819,
++     819,     3,   143,     7,    71,    72,     8,    25,    26,    27,
++      28,   143,   144,   145,   146,   143,   143,    84,    18,    19,
++      87,     3,    96,    97,   143,     3,     8,    94,    95,   122,
++       8,    98,   125,   126,   127,   121,     7,   123,   124,    39,
++      40,    41,     7,    43,   115,   116,   117,   118,    48,    49,
++       7,    76,    77,    78,    79,   533,    81,   143,    12,    13,
++       7,   533,    16,    63,   718,   143,     3,    67,     3,     3,
++       6,     8,    72,     8,     8,   146,   143,     3,     3,     3,
++       6,     4,    82,     8,   143,    88,    89,    90,    91,    92,
++      93,     3,   304,    24,     6,   294,   295,     8,    29,    30,
++      31,    32,    33,    34,    35,    36,    37,    38,     3,     3,
++       3,     3,     3,     8,     8,   334,     8,     8,    49,     3,
++       3,     3,   334,     3,     8,     8,     8,     3,     8,     4,
++       6,     4,     4,   334,     4,     4,     4,   349,   352,   334,
++     352,     4,     4,   143,     4,     4,     4,   349,   349,     3,
++       3,   352,   349,   365,   349,   349,     8,     8,   349,     4,
++       4,   380,     8,   375,   365,     4,     4,     8,   380,     3,
++     365,    99,   100,   101,   102,   103,   104,   105,   106,   107,
++     108,   109,   110,   111,   112,     4,     4,   399,     4,     4,
++     380,   380,   131,   132,   133,   134,   135,   136,   137,   138,
++     139,   140,   141,   142,     4,     4,     4,   406,   407,   408,
++     143,     4,   143,     4,     4,   143,     4,     4,     4,   146,
++       4,     4,     4,   144,   146,   144,   144,   144,     4,     4,
++       4,     4,     4,     4,     4,     4,   144,     4,     4,     4,
++       4,   146,     4,     4,     4,     4,     4,     4,     4,     4,
++     146,     4,     4,     4,   144,     4,     4,     4,     4,     4,
         4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-        4,     4,   143,     4,     4,     4,     4,     4,     4,     4,
-        4,     4,     4,     4,     4,     4,     4,   463,   145,     5,
-        7,   145,     7,     7,   145,   145,     7,     7,   143,     5,
-        5,   143,   143,     5,     5,   145,   145,     5,   145,     8,
-      142,     7,     7,     7,     5,     3,   142,     7,   142,     5,
-      485,   510,   511,   142,     5,     7,   142,   142,   510,   511,
-        7,   142,   142,   142,   142,   142,     7,   502,   520,   528,
-        7,     7,     4,   142,     7,   142,   528,   142,   113,     7,
-       82,   142,   142,   142,   142,   528,   142,   142,   142,   142,
-      528,   142,   142,   142,   142,   142,   142,   119,     4,     4,
-        4,     4,     4,     4,     3,   142,     6,     3,     6,     6,
-        3,     6,     3,   142,     4,     4,     4,     4,     4,   142,
-        3,     6,     6,     3,   143,     4,     8,     4,     4,     4,
-        4,     4,     4,     4,     4,     3,   448,     6,     4,   302,
-        5,     8,     4,   503,     8,     8,     7,     4,     4,     7,
-        5,     4,     4,     4,     4,   508,   324,   329,   692,   511,
-      704,   143,   145,   710,   717,   143,   145,   708,   145,   143,
-      143,   380,   697,   143,   695,   372,   143,   700,   698,   346,
-      143,   143,   377,   142,   703,   142,   701,   142,   142,   142,
-       68,   730,   142,   142,   142,   728,   142,   349,   143,   142,
-      396,   143,   733,   143,   142,   731,   362,   721,   528,   520,
-      678,   802,   818,   830,   847,    -1,    -1,    -1,    -1,    -1,
 -       4,     4,     4,   143,     4,     4,     4,     4,     4,   145,
 -     145,   145,   145,     4,     4,   143,     4,   143,   143,     4,
 -       4,   145,   145,   145,     4,     4,     4,   142,   142,     3,
 -       7,     7,     7,   481,     7,     7,     5,     5,   506,   507,
 -       5,     5,   506,   507,     5,     5,     5,     5,     5,   517,
 -     498,     7,     7,     7,     5,     8,     6,   525,   142,     7,
 -       7,   525,   142,   142,   142,   142,   142,   142,   525,   142,
 -     142,   142,   142,   142,   142,   142,   525,     7,     7,     7,
 -       7,     7,     4,     7,     7,     4,   142,   142,   142,   142,
 -     142,    83,     4,     4,   142,   142,   142,     4,   114,     4,
 -     142,     3,     6,     3,     3,   142,     7,   142,     6,     6,
 -       3,     6,   142,     3,     6,     4,     4,     4,     4,   120,
 -       4,     4,     3,   142,     6,     3,     5,     4,     8,     4,
 -       4,     4,     4,     4,     4,     4,     4,     3,   455,     6,
 -       4,   459,   297,     8,     4,     8,     8,   142,   142,     4,
 -     143,     4,   499,     5,     4,     4,   145,   143,   145,     7,
 -     143,   143,   143,     4,     4,   504,   320,   693,   708,   325,
 -     507,   714,   143,   143,   712,   375,   143,   143,   698,   142,
 -     142,   696,   721,   707,   811,   701,   699,   367,   341,   734,
 -     142,   702,   704,   142,   372,   732,   142,   142,   142,   142,
 -     142,   345,   143,   142,   142,   145,   143,   143,   737,   525,
 -     735,   358,   517,   679,   391,   725,   825,   841,   853,   870,
 -      -1,    -1,    -1,    -1,    -1,   693,   696,   696,   696,   693,
 -      -1,   699,    -1,    -1,   702,   705,   705,   705,   702,   696,
 -     702,   705,   696,    -1,   712,    -1,   696,   696,   705,    -1,
 -     702,   705,    -1,    -1,    -1,   705,   705,    -1,    -1,    -1,
 -      -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    -1,    -1,
 -      -1,    -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    -1,
 -      -1,    -1,    -1,    -1,    -1,    -1,   735,    -1,    -1,    -1,
++     144,     4,     4,     4,     4,   146,     4,     4,     4,   146,
++     146,   146,     4,   144,     4,     4,     4,   144,   144,     4,
++     489,   146,     4,     7,     7,   514,   515,   146,   146,     7,
++     143,     7,   514,   515,     7,     5,     5,   506,     5,     5,
++       5,     5,     5,   525,   533,     7,     7,     7,     5,     8,
++       3,   533,   143,   143,     5,     7,   143,     5,     7,   143,
++     143,   143,   533,   143,   143,   143,   143,   143,   533,   143,
++     143,   143,   143,     7,     7,     7,   143,   143,   143,   143,
++       7,   143,     7,     4,   143,     7,     6,   120,   143,     7,
++     114,     4,   143,   143,   143,   143,   143,    83,     4,     4,
++       4,     4,     3,     3,     6,   143,     3,     6,     6,     3,
++       6,     3,     5,     4,     4,     4,     4,     4,     4,     3,
++       3,     6,   452,   143,     6,     4,     4,     8,     4,     4,
++       4,     4,     4,     4,     4,     3,   467,     6,     4,   143,
++     507,     8,     4,     8,     8,   144,     7,     4,     4,     7,
++     144,   146,   143,   146,     5,     4,     4,   144,     4,     4,
++     327,   512,   332,   144,   144,   144,   701,   144,   716,   144,
++     144,   143,   143,   515,   729,   143,   722,   720,   706,   704,
++     349,   383,   715,   819,   304,   143,   709,   143,   143,   143,
++     707,    68,   375,   143,   712,   710,   380,   144,   143,   143,
++     146,   144,   144,   742,   740,   352,   743,   745,   365,   533,
++     525,   733,   701,   399,   687,   833,   849,   861,   878,   701,
++      -1,   710,   704,    -1,   713,   707,    -1,    -1,   710,    -1,
++      -1,   713,   704,   704,    -1,    -1,    -1,   704,   720,   704,
++     704,   713,   713,   704,    -1,    -1,   713,    -1,   713,   713,
++     710,   710,   713,    -1,    -1,    -1,   740,    -1,   740,    -1,
++      -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   740,
++      -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,   743,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,   692,    -1,    -1,    -1,    -1,    -1,    -1,
-      692,    -1,   701,   695,    -1,    -1,   698,    -1,    -1,   701,
-       -1,   695,   695,    -1,    -1,    -1,   708,   695,    -1,   701,
-       -1,   701,   695,   695,   695,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,   728,    -1,   728,    -1,    -1,   731,
-       -1,    -1,    -1,    -1,    -1,   728,    -1,    -1,   731,    -1,
-       -1,    -1,    -1,   731,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,    -1,   801,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   818,
-       -1,    -1,    -1,    -1,    -1,    -1,   818
 -      -1,   811,   811,   811,    -1,    -1,    -1,   811,    -1,    -1,
 -      -1,    -1,    -1,    -1,   811,    -1,   824,   811,    -1,    -1,
 -     824,   811,   811,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 -      -1,    -1,    -1,   841,    -1,    -1,    -1,   841
++     819,    -1,    -1,    -1,    -1,    -1,    -1,   819,    -1,    -1,
++      -1,    -1,    -1,   832,    -1,    -1,    -1,   819,   819,    -1,
++     832,    -1,   819,    -1,   819,   819,    -1,    -1,   819,    -1,
++     849,    -1,    -1,    -1,    -1,    -1,    -1,   849
    };
  
    const unsigned short int
    Dhcp4Parser::yystos_[] =
    {
-        0,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-      139,   140,   141,   147,   148,   149,   150,   151,   152,   153,
-      154,   155,   156,   157,   158,   159,     0,     5,     7,     9,
-      142,   143,   144,   145,   160,   161,   162,   167,     7,   176,
-        7,   182,     7,   196,     7,   269,     7,   342,     7,   356,
-        7,   294,     7,   300,     7,   324,     7,   245,     7,   408,
-      168,   163,   177,   183,   197,   270,   343,   357,   295,   301,
-      325,   246,   409,   160,   169,   170,   142,   165,   166,    10,
-      118,   127,   128,   129,   142,   175,   178,   179,   180,   435,
-      437,   439,   441,    11,    17,    18,    19,    22,    23,    39,
-       40,    41,    42,    43,    47,    48,    70,    71,    83,    86,
-       93,    94,    97,   175,   184,   185,   186,   187,   188,   189,
-      190,   191,   192,   204,   206,   230,   239,   253,   263,   292,
-      318,   361,   387,   397,   398,   406,    12,    13,    16,   194,
-      195,   198,   200,   203,     7,    44,    45,    46,    58,    60,
-       61,    62,    63,    64,    65,    66,    73,    74,    81,   175,
-      186,   187,   188,   191,   271,   272,   273,   275,   277,   279,
-      281,   283,   285,   287,   290,   291,   318,   336,   348,   350,
-      361,   383,    59,   175,   318,   344,   345,   346,   348,    20,
-       21,    71,    75,    76,    77,    78,    79,    80,    82,   175,
-      318,   358,   359,   360,   361,   363,   365,   367,   369,   371,
-      373,   375,   377,   379,   381,   292,    24,    49,    51,    52,
-       55,    56,    57,   175,   220,   302,   303,   304,   305,   306,
-      307,   308,   310,   312,   314,   315,   317,    50,    53,    54,
-      175,   220,   306,   312,   326,   327,   328,   329,   330,   332,
-      333,   334,   335,    84,    85,   175,   247,   248,   249,   251,
-       98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-      108,   109,   110,   111,   175,   410,   411,   412,   413,   415,
-      417,   418,   420,   421,   422,   425,   427,   428,   429,   430,
-      433,     6,     3,     4,     8,     3,   181,   442,   436,   438,
-      440,     4,     3,     8,   193,     4,     4,   362,   205,   207,
-        4,     4,     4,     4,   264,   293,   319,   231,   388,   240,
-      254,     4,   399,   407,     3,     8,   199,   201,     4,     3,
-        8,   390,   276,   278,   280,   337,   349,   274,   282,   284,
-        4,     4,   288,   286,   351,   384,     3,     8,   347,     3,
-        8,   364,   366,   382,   370,   372,   376,   374,   380,   378,
-      368,     8,     3,     8,   309,   221,     4,   313,   311,   316,
-        4,     8,     3,   331,     4,     4,     8,     3,   250,   252,
-        3,     8,     4,   414,   416,     4,   419,     4,     4,   423,
-      426,     4,     4,     4,   431,   434,     3,     8,   160,   160,
-      142,     4,     4,     4,     4,     4,   179,     4,   145,   145,
-        4,     4,     4,   143,   143,   143,   143,     4,     4,     4,
-        4,     4,     4,     4,   143,     4,     4,   185,     4,     4,
-      145,   195,    72,   175,   220,   318,   361,   363,   365,   391,
-      392,   393,   394,   395,     4,     4,     4,     4,     4,     4,
-        4,     4,   143,   145,     4,     4,     4,     4,   272,     4,
-      345,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-        4,   360,     4,     4,   143,     4,     4,     4,   145,   304,
-        4,   145,   145,   328,     4,     4,   248,   145,     4,     4,
-      143,     4,   143,   143,     4,     4,   145,   145,   145,     4,
-        4,   411,     4,     7,     7,   160,   160,   160,     7,   142,
-        7,     7,     5,     5,     5,     5,     5,     5,     7,     7,
-        7,     5,   171,    14,    15,   202,   396,     8,     3,   142,
-      142,   142,     5,   162,   164,   142,   142,   142,    67,    68,
-       69,   289,   142,     5,     7,   142,   142,   142,   171,   142,
-      142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
-      142,   142,   142,   160,   142,   142,   142,    15,   112,   424,
-      113,   114,   115,   116,   117,   145,   432,   142,   160,   184,
-      119,   443,   444,   445,   194,    24,    29,    30,    31,    32,
-       33,    34,    35,    36,    37,    38,   175,   208,   209,   210,
-      213,   215,   217,   219,   220,   222,   223,   224,   225,   226,
-      228,   208,     7,   265,   266,   267,     7,   296,   297,   298,
-        7,   320,   321,   322,    75,    76,    77,    78,    80,   232,
-      233,   234,   235,   236,   237,   238,   285,   389,     7,   241,
-      242,   243,    87,    88,    89,    90,    91,    92,   255,   256,
-      257,   258,   259,   260,   261,   262,    95,    96,   400,   401,
-      402,   404,   410,   172,     4,   393,     7,   338,   339,   340,
-        7,   352,   353,   354,    82,   385,     8,   446,     3,     8,
-        8,   211,   214,   216,   218,     4,     4,     4,     4,     4,
-      227,   229,     3,     8,     8,   268,     6,     3,   299,     6,
-        3,   323,     6,     3,     3,     6,     3,     6,   244,     6,
-        3,     4,     4,     4,     4,     4,     4,     3,     8,   403,
-      405,     3,     8,     8,   142,   173,   174,   142,   341,     6,
-        3,   355,     6,     3,   386,     8,     4,   444,     4,     4,
-        4,     4,   143,   145,   143,   145,   143,     4,     4,   209,
-      271,   267,   302,   298,   326,   322,   233,   285,   247,   243,
-      143,   143,   143,   143,   143,   143,   256,     4,     4,   401,
-        6,     3,   344,   340,   358,   354,     4,     5,    25,    26,
-       27,    28,   212,   142,   142,   142,   142,   142,     8,     8,
-        8,     8,   142,   142,   142,     8,     8,   142,     7,   447,
-      448,   449,     3,     6,   120,   122,   123,   175,   220,   450,
-      451,   452,   453,   455,   448,   456,     4,   454,     3,     8,
-        4,   143,     4,   451,     5,   142,     7,   457,   458,   459,
-        3,     6,   121,   124,   125,   126,   460,   461,   462,   464,
-      465,   466,   458,   463,     4,     4,     4,     3,     8,     4,
-      145,   143,   143,   461,   142
+        0,   131,   132,   133,   134,   135,   136,   137,   138,   139,
 -     140,   141,   147,   148,   149,   150,   151,   152,   153,   154,
 -     155,   156,   157,   158,     0,     5,     7,     9,   142,   143,
 -     144,   145,   159,   160,   161,   166,     7,   175,     7,   181,
 -       7,   195,     7,   268,     7,   347,     7,   361,     7,   305,
 -       7,   329,     7,   244,     7,   413,   167,   162,   176,   182,
 -     196,   269,   348,   362,   306,   330,   245,   414,   159,   168,
 -     169,   142,   164,   165,    10,   119,   128,   129,   130,   142,
 -     174,   177,   178,   179,   440,   442,   444,   446,    11,    17,
 -      18,    19,    22,    23,    39,    40,    41,    42,    43,    47,
 -      48,    58,    71,    72,    84,    87,    94,    95,    98,   174,
 -     183,   184,   185,   186,   187,   188,   189,   190,   191,   203,
 -     205,   229,   238,   252,   262,   291,   299,   323,   366,   392,
 -     402,   403,   411,    12,    13,    16,   193,   194,   197,   199,
 -     202,     7,    44,    45,    46,    59,    62,    63,    64,    65,
 -      66,    67,    74,    75,    82,   174,   185,   186,   187,   190,
 -     270,   271,   272,   274,   276,   278,   280,   282,   284,   286,
 -     289,   290,   323,   341,   355,   366,   388,    60,    61,   174,
 -     323,   349,   350,   351,   353,    20,    21,    72,    76,    77,
 -      78,    79,    80,    81,    83,   174,   323,   363,   364,   365,
 -     366,   368,   370,   372,   374,   376,   378,   380,   382,   384,
 -     386,    24,    49,    51,    52,    55,    56,    57,   174,   219,
 -     307,   308,   309,   310,   311,   312,   313,   315,   317,   319,
 -     320,   322,    50,    53,    54,   174,   219,   311,   317,   331,
 -     332,   333,   334,   335,   337,   338,   339,   340,    85,    86,
 -     174,   246,   247,   248,   250,    99,   100,   101,   102,   103,
 -     104,   105,   106,   107,   108,   109,   110,   111,   112,   174,
 -     415,   416,   417,   418,   420,   422,   423,   425,   426,   427,
 -     430,   432,   433,   434,   435,   438,     6,     3,     4,     8,
 -       3,   180,   447,   441,   443,   445,     4,     3,     8,   192,
 -       4,     4,   367,   204,   206,     4,     4,     4,     4,   263,
 -     300,   324,   292,   230,   393,   239,   253,     4,   404,   412,
 -       3,     8,   198,   200,     4,     3,     8,   395,   275,   277,
 -     279,   342,   273,   281,   283,     4,     4,   287,   285,   356,
 -     389,     3,     8,   352,   354,     3,     8,   369,   371,   387,
 -     375,   377,   381,   379,   385,   383,   373,     8,     3,   314,
 -     220,     4,   318,   316,   321,     4,     8,     3,   336,     4,
 -       4,     8,     3,   249,   251,     3,     8,     4,   419,   421,
 -       4,   424,     4,     4,   428,   431,     4,     4,     4,   436,
 -     439,     3,     8,   159,   159,   142,     4,     4,     4,     4,
 -       4,   178,     4,   145,   145,     4,     4,     4,   143,   143,
 -     143,   143,     4,     4,     4,     4,     4,     4,     4,     4,
 -     143,     4,     4,   184,     4,     4,   145,   194,    73,   174,
 -     219,   323,   366,   368,   370,   396,   397,   398,   399,   400,
 -       4,     4,     4,     4,     4,     4,     4,   143,   145,     4,
 -       4,     4,     4,   271,     4,     4,   350,     4,     4,     4,
 -       4,     4,     4,     4,     4,     4,     4,   365,     4,     4,
 -     143,     4,     4,     4,   145,   309,     4,   145,   145,   333,
 -       4,     4,   247,   145,     4,     4,   143,     4,   143,   143,
 -       4,     4,   145,   145,   145,     4,     4,   416,     4,     7,
 -       7,   159,   159,   159,     7,   142,     7,     7,     5,     5,
 -       5,     5,     5,     5,     5,     7,     7,     7,     5,   170,
 -      14,    15,   201,   401,     8,     3,   142,   142,   142,     5,
 -     142,   142,   142,    68,    69,    70,   288,   142,     5,     7,
 -     142,   161,   163,   142,   142,   170,   142,   142,   142,   142,
 -     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
 -     159,   142,   142,   142,    15,   113,   429,   114,   115,   116,
 -     117,   118,   145,   437,   142,   159,   183,   120,   448,   449,
 -     450,   193,    24,    29,    30,    31,    32,    33,    34,    35,
 -      36,    37,    38,   174,   207,   208,   209,   212,   214,   216,
 -     218,   219,   221,   222,   223,   224,   225,   227,   207,     7,
 -     264,   265,   266,     7,   301,   302,   303,     7,   325,   326,
 -     327,     7,   293,   294,   295,    76,    77,    78,    79,    81,
 -     231,   232,   233,   234,   235,   236,   237,   284,   394,     7,
 -     240,   241,   242,    88,    89,    90,    91,    92,    93,   254,
 -     255,   256,   257,   258,   259,   260,   261,    96,    97,   405,
 -     406,   407,   409,   415,   171,     4,   398,     7,   343,   344,
 -     345,     7,   357,   358,   359,    83,   390,     8,   451,     3,
 -       8,     8,   210,   213,   215,   217,     4,     4,     4,     4,
 -       4,   226,   228,     3,     8,     8,   267,     6,     3,   304,
 -       6,     3,   328,     6,     3,   296,     6,     3,     3,     6,
 -       3,     6,   243,     6,     3,     4,     4,     4,     4,     4,
 -       4,     3,     8,   408,   410,     3,     8,     8,   142,   172,
 -     173,   142,   346,     6,     3,   360,     6,     3,   391,     8,
 -       4,   449,     4,     4,     4,     4,   143,   145,   143,   145,
 -     143,     4,     4,   208,   270,   266,   307,   303,   331,   327,
 -     174,   185,   186,   187,   190,   219,   262,   280,   286,   297,
 -     298,   323,   366,   388,   392,   295,   232,   284,   246,   242,
 -     143,   143,   143,   143,   143,   143,   255,     4,     4,   406,
 -       6,     3,   349,   345,   363,   359,     4,     5,    25,    26,
 -      27,    28,   211,   142,   142,   142,   142,   142,     8,     8,
 -       8,     3,     8,     8,   142,   142,   142,     8,     8,   142,
 -       7,   452,   453,   298,   454,     3,     6,   121,   123,   124,
 -     174,   219,   455,   456,   457,   458,   460,   453,   461,     4,
 -     459,     3,     8,     4,   143,     4,   456,     5,   142,     7,
 -     462,   463,   464,     3,     6,   122,   125,   126,   127,   465,
 -     466,   467,   469,   470,   471,   463,   468,     4,     4,     4,
 -       3,     8,     4,   145,   143,   143,   466,   142
++     140,   141,   142,   148,   149,   150,   151,   152,   153,   154,
++     155,   156,   157,   158,   159,   160,     0,     5,     7,     9,
++     143,   144,   145,   146,   161,   162,   163,   168,     7,   177,
++       7,   183,     7,   197,     7,   270,     7,   351,     7,   365,
++       7,   303,     7,   309,     7,   333,     7,   246,     7,   417,
++     169,   164,   178,   184,   198,   271,   352,   366,   304,   310,
++     334,   247,   418,   161,   170,   171,   143,   166,   167,    10,
++     119,   128,   129,   130,   143,   176,   179,   180,   181,   444,
++     446,   448,   450,    11,    17,    18,    19,    22,    23,    39,
++      40,    41,    42,    43,    47,    48,    58,    71,    72,    84,
++      87,    94,    95,    98,   176,   185,   186,   187,   188,   189,
++     190,   191,   192,   193,   205,   207,   231,   240,   254,   264,
++     293,   301,   327,   370,   396,   406,   407,   415,    12,    13,
++      16,   195,   196,   199,   201,   204,     7,    44,    45,    46,
++      59,    61,    62,    63,    64,    65,    66,    67,    74,    75,
++      82,   176,   187,   188,   189,   192,   272,   273,   274,   276,
++     278,   280,   282,   284,   286,   288,   291,   292,   327,   345,
++     357,   359,   370,   392,    60,   176,   327,   353,   354,   355,
++     357,    20,    21,    72,    76,    77,    78,    79,    80,    81,
++      83,   176,   327,   367,   368,   369,   370,   372,   374,   376,
++     378,   380,   382,   384,   386,   388,   390,   301,    24,    49,
++      51,    52,    55,    56,    57,   176,   221,   311,   312,   313,
++     314,   315,   316,   317,   319,   321,   323,   324,   326,    50,
++      53,    54,   176,   221,   315,   321,   335,   336,   337,   338,
++     339,   341,   342,   343,   344,    85,    86,   176,   248,   249,
++     250,   252,    99,   100,   101,   102,   103,   104,   105,   106,
++     107,   108,   109,   110,   111,   112,   176,   419,   420,   421,
++     422,   424,   426,   427,   429,   430,   431,   434,   436,   437,
++     438,   439,   442,     6,     3,     4,     8,     3,   182,   451,
++     445,   447,   449,     4,     3,     8,   194,     4,     4,   371,
++     206,   208,     4,     4,     4,     4,   265,   302,   328,   294,
++     232,   397,   241,   255,     4,   408,   416,     3,     8,   200,
++     202,     4,     3,     8,   399,   277,   279,   281,   346,   358,
++     275,   283,   285,     4,     4,   289,   287,   360,   393,     3,
++       8,   356,     3,     8,   373,   375,   391,   379,   381,   385,
++     383,   389,   387,   377,     8,     3,     8,   318,   222,     4,
++     322,   320,   325,     4,     8,     3,   340,     4,     4,     8,
++       3,   251,   253,     3,     8,     4,   423,   425,     4,   428,
++       4,     4,   432,   435,     4,     4,     4,   440,   443,     3,
++       8,   161,   161,   143,     4,     4,     4,     4,     4,   180,
++       4,   146,   146,     4,     4,     4,   144,   144,   144,   144,
++       4,     4,     4,     4,     4,     4,     4,     4,   144,     4,
++       4,   186,     4,     4,   146,   196,    73,   176,   221,   327,
++     370,   372,   374,   400,   401,   402,   403,   404,     4,     4,
++       4,     4,     4,     4,     4,     4,   144,   146,     4,     4,
++       4,     4,   273,     4,   354,     4,     4,     4,     4,     4,
++       4,     4,     4,     4,     4,   369,     4,     4,   144,     4,
++       4,     4,   146,   313,     4,   146,   146,   337,     4,     4,
++     249,   146,     4,     4,   144,     4,   144,   144,     4,     4,
++     146,   146,   146,     4,     4,   420,     4,     7,     7,   161,
++     161,   161,     7,   143,     7,     7,     5,     5,     5,     5,
++       5,     5,     5,     7,     7,     7,     5,   172,    14,    15,
++     203,   405,     8,     3,   143,   143,   143,     5,   163,   165,
++     143,   143,   143,    68,    69,    70,   290,   143,     5,     7,
++     143,   143,   143,   172,   143,   143,   143,   143,   143,   143,
++     143,   143,   143,   143,   143,   143,   143,   143,   161,   143,
++     143,   143,    15,   113,   433,   114,   115,   116,   117,   118,
++     146,   441,   143,   161,   185,   120,   452,   453,   454,   195,
++      24,    29,    30,    31,    32,    33,    34,    35,    36,    37,
++      38,   176,   209,   210,   211,   214,   216,   218,   220,   221,
++     223,   224,   225,   226,   227,   229,   209,     7,   266,   267,
++     268,     7,   305,   306,   307,     7,   329,   330,   331,     7,
++     295,   296,   297,    76,    77,    78,    79,    81,   233,   234,
++     235,   236,   237,   238,   239,   286,   398,     7,   242,   243,
++     244,    88,    89,    90,    91,    92,    93,   256,   257,   258,
++     259,   260,   261,   262,   263,    96,    97,   409,   410,   411,
++     413,   419,   173,     4,   402,     7,   347,   348,   349,     7,
++     361,   362,   363,    83,   394,     8,   455,     3,     8,     8,
++     212,   215,   217,   219,     4,     4,     4,     4,     4,   228,
++     230,     3,     8,     8,   269,     6,     3,   308,     6,     3,
++     332,     6,     3,   298,     6,     3,     3,     6,     3,     6,
++     245,     6,     3,     4,     4,     4,     4,     4,     4,     3,
++       8,   412,   414,     3,     8,     8,   143,   174,   175,   143,
++     350,     6,     3,   364,     6,     3,   395,     8,     4,   453,
++       4,     4,     4,     4,   144,   146,   144,   146,   144,     4,
++       4,   210,   272,   268,   311,   307,   335,   331,   176,   187,
++     188,   189,   192,   221,   264,   282,   288,   299,   300,   327,
++     370,   392,   396,   297,   234,   286,   248,   244,   144,   144,
++     144,   144,   144,   144,   257,     4,     4,   410,     6,     3,
++     353,   349,   367,   363,     4,     5,    25,    26,    27,    28,
++     213,   143,   143,   143,   143,   143,     8,     8,     8,     3,
++       8,     8,   143,   143,   143,     8,     8,   143,     7,   456,
++     457,   300,   458,     3,     6,   121,   123,   124,   176,   221,
++     459,   460,   461,   462,   464,   457,   465,     4,   463,     3,
++       8,     4,   144,     4,   460,     5,   143,     7,   466,   467,
++     468,     3,     6,   122,   125,   126,   127,   469,   470,   471,
++     473,   474,   475,   467,   472,     4,     4,     4,     3,     8,
++       4,   146,   144,   144,   470,   143
    };
  
    const unsigned short int
    Dhcp4Parser::yyr1_[] =
    {
--       0,   146,   148,   147,   149,   147,   150,   147,   151,   147,
--     152,   147,   153,   147,   154,   147,   155,   147,   156,   147,
-      157,   147,   158,   147,   159,   147,   160,   160,   160,   160,
-      160,   160,   160,   161,   163,   162,   164,   165,   165,   166,
-      166,   168,   167,   169,   169,   170,   170,   172,   171,   173,
-      173,   174,   174,   175,   177,   176,   178,   178,   179,   179,
-      179,   179,   179,   179,   181,   180,   183,   182,   184,   184,
-      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-      185,   186,   187,   188,   189,   190,   191,   193,   192,   194,
-      194,   195,   195,   195,   197,   196,   199,   198,   201,   200,
-      202,   202,   203,   205,   204,   207,   206,   208,   208,   209,
-      209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
-      209,   209,   211,   210,   212,   212,   212,   212,   214,   213,
-      216,   215,   218,   217,   219,   221,   220,   222,   223,   224,
-      225,   227,   226,   229,   228,   231,   230,   232,   232,   233,
-      233,   233,   233,   233,   234,   235,   236,   237,   238,   240,
-      239,   241,   241,   242,   242,   244,   243,   246,   245,   247,
-      247,   247,   248,   248,   250,   249,   252,   251,   254,   253,
-      255,   255,   256,   256,   256,   256,   256,   256,   257,   258,
-      259,   260,   261,   262,   264,   263,   265,   265,   266,   266,
-      268,   267,   270,   269,   271,   271,   272,   272,   272,   272,
-      272,   272,   272,   272,   272,   272,   272,   272,   272,   272,
-      272,   272,   272,   272,   272,   272,   272,   274,   273,   276,
-      275,   278,   277,   280,   279,   282,   281,   284,   283,   286,
-      285,   288,   287,   289,   289,   289,   290,   291,   293,   292,
-      295,   294,   296,   296,   297,   297,   299,   298,   301,   300,
-      302,   302,   303,   303,   304,   304,   304,   304,   304,   304,
-      304,   304,   305,   306,   307,   309,   308,   311,   310,   313,
-      312,   314,   316,   315,   317,   319,   318,   320,   320,   321,
-      321,   323,   322,   325,   324,   326,   326,   327,   327,   328,
-      328,   328,   328,   328,   328,   328,   329,   331,   330,   332,
-      333,   334,   335,   337,   336,   338,   338,   339,   339,   341,
-      340,   343,   342,   344,   344,   345,   345,   345,   345,   347,
-      346,   349,   348,   351,   350,   352,   352,   353,   353,   355,
-      354,   357,   356,   358,   358,   359,   359,   360,   360,   360,
-      360,   360,   360,   360,   360,   360,   360,   360,   360,   360,
-      362,   361,   364,   363,   366,   365,   368,   367,   370,   369,
-      372,   371,   374,   373,   376,   375,   378,   377,   380,   379,
-      382,   381,   384,   383,   386,   385,   388,   387,   389,   389,
-      390,   285,   391,   391,   392,   392,   393,   393,   393,   393,
-      393,   393,   393,   394,   396,   395,   397,   399,   398,   400,
-      400,   401,   401,   403,   402,   405,   404,   407,   406,   409,
-      408,   410,   410,   411,   411,   411,   411,   411,   411,   411,
-      411,   411,   411,   411,   411,   411,   411,   411,   412,   414,
-      413,   416,   415,   417,   419,   418,   420,   421,   423,   422,
-      424,   424,   426,   425,   427,   428,   429,   431,   430,   432,
-      432,   432,   432,   432,   434,   433,   436,   435,   438,   437,
-      440,   439,   442,   441,   443,   443,   444,   446,   445,   447,
-      447,   449,   448,   450,   450,   451,   451,   451,   451,   451,
-      452,   454,   453,   456,   455,   457,   457,   459,   458,   460,
-      460,   461,   461,   461,   461,   463,   462,   464,   465,   466
 -     157,   147,   158,   147,   159,   159,   159,   159,   159,   159,
 -     159,   160,   162,   161,   163,   164,   164,   165,   165,   167,
 -     166,   168,   168,   169,   169,   171,   170,   172,   172,   173,
 -     173,   174,   176,   175,   177,   177,   178,   178,   178,   178,
 -     178,   178,   180,   179,   182,   181,   183,   183,   184,   184,
 -     184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
 -     184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
 -     185,   186,   187,   188,   189,   190,   192,   191,   193,   193,
 -     194,   194,   194,   196,   195,   198,   197,   200,   199,   201,
 -     201,   202,   204,   203,   206,   205,   207,   207,   208,   208,
 -     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
 -     208,   210,   209,   211,   211,   211,   211,   213,   212,   215,
 -     214,   217,   216,   218,   220,   219,   221,   222,   223,   224,
 -     226,   225,   228,   227,   230,   229,   231,   231,   232,   232,
 -     232,   232,   232,   233,   234,   235,   236,   237,   239,   238,
 -     240,   240,   241,   241,   243,   242,   245,   244,   246,   246,
 -     246,   247,   247,   249,   248,   251,   250,   253,   252,   254,
 -     254,   255,   255,   255,   255,   255,   255,   256,   257,   258,
 -     259,   260,   261,   263,   262,   264,   264,   265,   265,   267,
 -     266,   269,   268,   270,   270,   271,   271,   271,   271,   271,
 -     271,   271,   271,   271,   271,   271,   271,   271,   271,   271,
 -     271,   271,   271,   271,   271,   273,   272,   275,   274,   277,
 -     276,   279,   278,   281,   280,   283,   282,   285,   284,   287,
 -     286,   288,   288,   288,   289,   290,   292,   291,   293,   293,
 -     294,   294,   296,   295,   297,   297,   298,   298,   298,   298,
 -     298,   298,   298,   298,   298,   298,   298,   298,   298,   300,
 -     299,   301,   301,   302,   302,   304,   303,   306,   305,   307,
 -     307,   308,   308,   309,   309,   309,   309,   309,   309,   309,
 -     309,   310,   311,   312,   314,   313,   316,   315,   318,   317,
 -     319,   321,   320,   322,   324,   323,   325,   325,   326,   326,
 -     328,   327,   330,   329,   331,   331,   332,   332,   333,   333,
 -     333,   333,   333,   333,   333,   334,   336,   335,   337,   338,
 -     339,   340,   342,   341,   343,   343,   344,   344,   346,   345,
 -     348,   347,   349,   349,   350,   350,   350,   350,   352,   351,
 -     354,   353,   356,   355,   357,   357,   358,   358,   360,   359,
 -     362,   361,   363,   363,   364,   364,   365,   365,   365,   365,
 -     365,   365,   365,   365,   365,   365,   365,   365,   365,   367,
 -     366,   369,   368,   371,   370,   373,   372,   375,   374,   377,
 -     376,   379,   378,   381,   380,   383,   382,   385,   384,   387,
 -     386,   389,   388,   391,   390,   393,   392,   394,   394,   395,
 -     284,   396,   396,   397,   397,   398,   398,   398,   398,   398,
 -     398,   398,   399,   401,   400,   402,   404,   403,   405,   405,
 -     406,   406,   408,   407,   410,   409,   412,   411,   414,   413,
 -     415,   415,   416,   416,   416,   416,   416,   416,   416,   416,
 -     416,   416,   416,   416,   416,   416,   416,   417,   419,   418,
 -     421,   420,   422,   424,   423,   425,   426,   428,   427,   429,
 -     429,   431,   430,   432,   433,   434,   436,   435,   437,   437,
 -     437,   437,   437,   439,   438,   441,   440,   443,   442,   445,
 -     444,   447,   446,   448,   448,   449,   451,   450,   452,   452,
 -     454,   453,   455,   455,   456,   456,   456,   456,   456,   457,
 -     459,   458,   461,   460,   462,   462,   464,   463,   465,   465,
 -     466,   466,   466,   466,   468,   467,   469,   470,   471
++       0,   147,   149,   148,   150,   148,   151,   148,   152,   148,
++     153,   148,   154,   148,   155,   148,   156,   148,   157,   148,
++     158,   148,   159,   148,   160,   148,   161,   161,   161,   161,
++     161,   161,   161,   162,   164,   163,   165,   166,   166,   167,
++     167,   169,   168,   170,   170,   171,   171,   173,   172,   174,
++     174,   175,   175,   176,   178,   177,   179,   179,   180,   180,
++     180,   180,   180,   180,   182,   181,   184,   183,   185,   185,
++     186,   186,   186,   186,   186,   186,   186,   186,   186,   186,
++     186,   186,   186,   186,   186,   186,   186,   186,   186,   186,
++     186,   186,   187,   188,   189,   190,   191,   192,   194,   193,
++     195,   195,   196,   196,   196,   198,   197,   200,   199,   202,
++     201,   203,   203,   204,   206,   205,   208,   207,   209,   209,
++     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
++     210,   210,   210,   212,   211,   213,   213,   213,   213,   215,
++     214,   217,   216,   219,   218,   220,   222,   221,   223,   224,
++     225,   226,   228,   227,   230,   229,   232,   231,   233,   233,
++     234,   234,   234,   234,   234,   235,   236,   237,   238,   239,
++     241,   240,   242,   242,   243,   243,   245,   244,   247,   246,
++     248,   248,   248,   249,   249,   251,   250,   253,   252,   255,
++     254,   256,   256,   257,   257,   257,   257,   257,   257,   258,
++     259,   260,   261,   262,   263,   265,   264,   266,   266,   267,
++     267,   269,   268,   271,   270,   272,   272,   273,   273,   273,
++     273,   273,   273,   273,   273,   273,   273,   273,   273,   273,
++     273,   273,   273,   273,   273,   273,   273,   273,   275,   274,
++     277,   276,   279,   278,   281,   280,   283,   282,   285,   284,
++     287,   286,   289,   288,   290,   290,   290,   291,   292,   294,
++     293,   295,   295,   296,   296,   298,   297,   299,   299,   300,
++     300,   300,   300,   300,   300,   300,   300,   300,   300,   300,
++     300,   300,   302,   301,   304,   303,   305,   305,   306,   306,
++     308,   307,   310,   309,   311,   311,   312,   312,   313,   313,
++     313,   313,   313,   313,   313,   313,   314,   315,   316,   318,
++     317,   320,   319,   322,   321,   323,   325,   324,   326,   328,
++     327,   329,   329,   330,   330,   332,   331,   334,   333,   335,
++     335,   336,   336,   337,   337,   337,   337,   337,   337,   337,
++     338,   340,   339,   341,   342,   343,   344,   346,   345,   347,
++     347,   348,   348,   350,   349,   352,   351,   353,   353,   354,
++     354,   354,   354,   356,   355,   358,   357,   360,   359,   361,
++     361,   362,   362,   364,   363,   366,   365,   367,   367,   368,
++     368,   369,   369,   369,   369,   369,   369,   369,   369,   369,
++     369,   369,   369,   369,   371,   370,   373,   372,   375,   374,
++     377,   376,   379,   378,   381,   380,   383,   382,   385,   384,
++     387,   386,   389,   388,   391,   390,   393,   392,   395,   394,
++     397,   396,   398,   398,   399,   286,   400,   400,   401,   401,
++     402,   402,   402,   402,   402,   402,   402,   403,   405,   404,
++     406,   408,   407,   409,   409,   410,   410,   412,   411,   414,
++     413,   416,   415,   418,   417,   419,   419,   420,   420,   420,
++     420,   420,   420,   420,   420,   420,   420,   420,   420,   420,
++     420,   420,   421,   423,   422,   425,   424,   426,   428,   427,
++     429,   430,   432,   431,   433,   433,   435,   434,   436,   437,
++     438,   440,   439,   441,   441,   441,   441,   441,   443,   442,
++     445,   444,   447,   446,   449,   448,   451,   450,   452,   452,
++     453,   455,   454,   456,   456,   458,   457,   459,   459,   460,
++     460,   460,   460,   460,   461,   463,   462,   465,   464,   466,
++     466,   468,   467,   469,   469,   470,   470,   470,   470,   472,
++     471,   473,   474,   475
    };
  
    const unsigned char
    {
         0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
         0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
 -       0,     3,     0,     3,     1,     1,     1,     1,     1,     1,
 -       1,     1,     0,     4,     1,     0,     1,     3,     5,     0,
 -       4,     0,     1,     1,     3,     0,     4,     0,     1,     1,
 -       3,     2,     0,     4,     1,     3,     1,     1,     1,     1,
 -       1,     1,     0,     6,     0,     4,     1,     3,     1,     1,
 +       0,     3,     0,     3,     0,     3,     1,     1,     1,     1,
 +       1,     1,     1,     1,     0,     4,     1,     0,     1,     3,
 +       5,     0,     4,     0,     1,     1,     3,     0,     4,     0,
 +       1,     1,     3,     2,     0,     4,     1,     3,     1,     1,
 +       1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
 +       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-        1,     3,     3,     3,     3,     3,     3,     0,     6,     1,
-        3,     1,     1,     1,     0,     4,     0,     4,     0,     4,
-        1,     1,     3,     0,     6,     0,     6,     1,     3,     1,
++       1,     1,     3,     3,     3,     3,     3,     3,     0,     6,
++       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
++       4,     1,     1,     3,     0,     6,     0,     6,     1,     3,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-        1,     1,     0,     4,     1,     1,     1,     1,     0,     4,
-        0,     4,     0,     4,     3,     0,     4,     3,     3,     3,
-        3,     0,     4,     0,     4,     0,     6,     1,     3,     1,
-        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-        6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
-        3,     1,     1,     1,     0,     4,     0,     4,     0,     6,
-        1,     3,     1,     1,     1,     1,     1,     1,     3,     3,
-        3,     3,     3,     3,     0,     6,     0,     1,     1,     3,
-        0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
 -       3,     3,     3,     3,     3,     3,     0,     6,     1,     3,
 -       1,     1,     1,     0,     4,     0,     4,     0,     4,     1,
 -       1,     3,     0,     6,     0,     6,     1,     3,     1,     1,
++       1,     1,     1,     0,     4,     1,     1,     1,     1,     0,
++       4,     0,     4,     0,     4,     3,     0,     4,     3,     3,
++       3,     3,     0,     4,     0,     4,     0,     6,     1,     3,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-        1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-        4,     0,     4,     1,     1,     1,     3,     3,     0,     6,
-        0,     4,     0,     1,     1,     3,     0,     4,     0,     4,
-        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-        1,     1,     1,     3,     1,     0,     4,     0,     4,     0,
-        4,     1,     0,     4,     3,     0,     6,     0,     1,     1,
-        3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
-        1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
-        1,     3,     3,     0,     6,     0,     1,     1,     3,     0,
-        4,     0,     4,     1,     3,     1,     1,     1,     1,     0,
-        4,     0,     4,     0,     6,     0,     1,     1,     3,     0,
-        4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
 -       1,     0,     4,     1,     1,     1,     1,     0,     4,     0,
 -       4,     0,     4,     3,     0,     4,     3,     3,     3,     3,
 -       0,     4,     0,     4,     0,     6,     1,     3,     1,     1,
 -       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
 -       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
 -       1,     1,     1,     0,     4,     0,     4,     0,     6,     1,
 -       3,     1,     1,     1,     1,     1,     1,     3,     3,     3,
 -       3,     3,     3,     0,     6,     0,     1,     1,     3,     0,
 -       4,     0,     4,     1,     3,     1,     1,     1,     1,     1,
++       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
++       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
++       6,     1,     3,     1,     1,     1,     1,     1,     1,     3,
++       3,     3,     3,     3,     3,     0,     6,     0,     1,     1,
++       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 -       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
 -       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
 -       4,     1,     1,     1,     3,     3,     0,     6,     0,     1,
 -       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
 -       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
++       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
 +       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-        0,     4,     0,     6,     0,     4,     0,     6,     1,     3,
-        0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
-        1,     1,     1,     1,     0,     4,     3,     0,     6,     1,
-        3,     1,     1,     0,     4,     0,     4,     0,     6,     0,
-        4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-        1,     1,     1,     1,     1,     1,     1,     1,     3,     0,
-        4,     0,     4,     3,     0,     4,     3,     3,     0,     4,
-        1,     1,     0,     4,     3,     3,     3,     0,     4,     1,
++       0,     4,     0,     4,     1,     1,     1,     3,     3,     0,
++       6,     0,     1,     1,     3,     0,     4,     1,     3,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     0,     6,     0,     4,     0,     1,     1,     3,
++       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     3,     1,     0,
++       4,     0,     4,     0,     4,     1,     0,     4,     3,     0,
+        6,     0,     1,     1,     3,     0,     4,     0,     4,     0,
+        1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
 -       1,     1,     3,     1,     0,     4,     0,     4,     0,     4,
 -       1,     0,     4,     3,     0,     6,     0,     1,     1,     3,
 -       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
 -       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
 -       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
 -       0,     4,     1,     3,     1,     1,     1,     1,     0,     4,
 -       0,     4,     0,     6,     0,     1,     1,     3,     0,     4,
 -       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
 -       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
 -       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
 -       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
 -       4,     0,     6,     0,     4,     0,     6,     1,     3,     0,
 -       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
 -       1,     1,     1,     0,     4,     3,     0,     6,     1,     3,
 -       1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
 -       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
 -       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
 -       0,     4,     3,     0,     4,     3,     3,     0,     4,     1,
 -       1,     0,     4,     3,     3,     3,     0,     4,     1,     1,
 -       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
 -       4,     0,     6,     1,     3,     1,     0,     6,     1,     3,
 -       0,     4,     1,     3,     1,     1,     1,     1,     1,     3,
 -       0,     4,     0,     6,     1,     3,     0,     4,     1,     3,
 -       1,     1,     1,     1,     0,     4,     3,     3,     3
++       1,     0,     4,     1,     1,     3,     3,     0,     6,     0,
++       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
++       1,     1,     1,     0,     4,     0,     4,     0,     6,     0,
++       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
++       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 +       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
-        0,     4,     0,     6,     1,     3,     1,     0,     6,     1,
-        3,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-        3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
-        3,     1,     1,     1,     1,     0,     4,     3,     3,     3
++       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
++       0,     4,     0,     4,     0,     4,     0,     6,     0,     4,
++       0,     6,     1,     3,     0,     4,     0,     1,     1,     3,
++       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
++       3,     0,     6,     1,     3,     1,     1,     0,     4,     0,
++       4,     0,     6,     0,     4,     1,     3,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     3,     0,     4,     0,     4,     3,     0,     4,
++       3,     3,     0,     4,     1,     1,     0,     4,     3,     3,
++       3,     0,     4,     1,     1,     1,     1,     1,     0,     4,
++       0,     4,     0,     4,     0,     4,     0,     6,     1,     3,
++       1,     0,     6,     1,     3,     0,     4,     1,     3,     1,
++       1,     1,     1,     1,     3,     0,     4,     0,     6,     1,
++       3,     0,     4,     1,     3,     1,     1,     1,     1,     0,
++       4,     3,     3,     3
    };
  
  
    "\"subnet4\"", "\"4o6-interface\"", "\"4o6-interface-id\"",
    "\"4o6-subnet\"", "\"option-def\"", "\"option-data\"", "\"name\"",
    "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"",
-   "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"",
-   "\"pool\"", "\"user-context\"", "\"subnet\"", "\"interface\"",
-   "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
-   "\"disabled\"", "\"out-of-pool\"", "\"all\"",
-   "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
-   "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
-   "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"flex-id\"",
-   "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", "\"library\"",
-   "\"parameters\"", "\"expired-leases-processing\"",
-   "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
-   "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
-   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"",
-   "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
-   "\"socket-name\"", "\"dhcp-ddns\"", "\"enable-updates\"",
-   "\"qualifying-suffix\"", "\"server-ip\"", "\"server-port\"",
-   "\"sender-ip\"", "\"sender-port\"", "\"max-queue-size\"",
-   "\"ncr-protocol\"", "\"ncr-format\"", "\"always-include-fqdn\"",
-   "\"override-no-update\"", "\"override-client-update\"",
-   "\"replace-client-name\"", "\"generated-prefix\"", "\"tcp\"", "\"JSON\"",
-   "\"when-present\"", "\"never\"", "\"always\"", "\"when-not-present\"",
-   "\"Logging\"", "\"loggers\"", "\"output_options\"", "\"output\"",
-   "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
-   "\"maxver\"", "\"Dhcp6\"", "\"DhcpDdns\"", "\"Control-agent\"",
-   "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4", "SUB_INTERFACES4",
-   "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", "SUB_OPTION_DEFS",
-   "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY",
-   "SUB_DHCP_DDNS", "\"constant string\"", "\"integer\"",
-   "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
-   "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
-   "value", "sub_json", "map2", "$@13", "map_value", "map_content",
-   "not_empty_map", "list_generic", "$@14", "list_content",
-   "not_empty_list", "list_strings", "$@15", "list_strings_content",
-   "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@16",
-   "global_objects", "global_object", "dhcp4_object", "$@17", "sub_dhcp4",
-   "$@18", "global_params", "global_param", "valid_lifetime", "renew_timer",
+   "\"record-types\"", "\"encapsulate\"", "\"array\"",
+   "\"shared-networks\"", "\"pools\"", "\"pool\"", "\"user-context\"",
+   "\"subnet\"", "\"interface\"", "\"interface-id\"", "\"id\"",
+   "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
+   "\"out-of-pool\"", "\"all\"", "\"host-reservation-identifiers\"",
+   "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"",
+   "\"duid\"", "\"hw-address\"", "\"circuit-id\"", "\"client-id\"",
+   "\"hostname\"", "\"flex-id\"", "\"relay\"", "\"ip-address\"",
+   "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
+   "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"",
+   "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"",
+   "\"max-reclaim-leases\"", "\"max-reclaim-time\"",
+   "\"unwarned-reclaim-cycles\"", "\"dhcp4o6-port\"", "\"control-socket\"",
+   "\"socket-type\"", "\"socket-name\"", "\"dhcp-ddns\"",
+   "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
+   "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
+   "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
+   "\"always-include-fqdn\"", "\"override-no-update\"",
+   "\"override-client-update\"", "\"replace-client-name\"",
+   "\"generated-prefix\"", "\"tcp\"", "\"JSON\"", "\"when-present\"",
+   "\"never\"", "\"always\"", "\"when-not-present\"", "\"Logging\"",
+   "\"loggers\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
+   "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp6\"",
+   "\"DhcpDdns\"", "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4",
+   "SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4",
 -  "SUB_RESERVATION", "SUB_OPTION_DEF", "SUB_OPTION_DATA",
 -  "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "\"constant string\"",
 -  "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
 -  "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
 -  "$@11", "value", "sub_json", "map2", "$@12", "map_value", "map_content",
 -  "not_empty_map", "list_generic", "$@13", "list_content",
 -  "not_empty_list", "list_strings", "$@14", "list_strings_content",
 -  "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@15",
 -  "global_objects", "global_object", "dhcp4_object", "$@16", "sub_dhcp4",
 -  "$@17", "global_params", "global_param", "valid_lifetime", "renew_timer",
++  "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
++  "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS",
++  "\"constant string\"", "\"integer\"", "\"floating point\"",
++  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
++  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "value", "sub_json",
++  "map2", "$@13", "map_value", "map_content", "not_empty_map",
++  "list_generic", "$@14", "list_content", "not_empty_list", "list_strings",
++  "$@15", "list_strings_content", "not_empty_list_strings",
++  "unknown_map_entry", "syntax_map", "$@16", "global_objects",
++  "global_object", "dhcp4_object", "$@17", "sub_dhcp4", "$@18",
++  "global_params", "global_param", "valid_lifetime", "renew_timer",
    "rebind_timer", "decline_probation_period", "echo_client_id",
 -  "match_client_id", "interfaces_config", "$@18",
 +  "match_client_id", "interfaces_config", "$@19",
    "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
 -  "$@19", "interfaces_list", "$@20", "dhcp_socket_type", "$@21",
 -  "socket_type", "re_detect", "lease_database", "$@22", "hosts_database",
 -  "$@23", "database_map_params", "database_map_param", "database_type",
 -  "$@24", "db_type", "user", "$@25", "password", "$@26", "host", "$@27",
 -  "port", "name", "$@28", "persist", "lfc_interval", "readonly",
 -  "connect_timeout", "contact_points", "$@29", "keyspace", "$@30",
 -  "host_reservation_identifiers", "$@31",
 +  "$@20", "interfaces_list", "$@21", "dhcp_socket_type", "$@22",
 +  "socket_type", "re_detect", "lease_database", "$@23", "hosts_database",
 +  "$@24", "database_map_params", "database_map_param", "database_type",
 +  "$@25", "db_type", "user", "$@26", "password", "$@27", "host", "$@28",
 +  "port", "name", "$@29", "persist", "lfc_interval", "readonly",
 +  "connect_timeout", "contact_points", "$@30", "keyspace", "$@31",
 +  "host_reservation_identifiers", "$@32",
    "host_reservation_identifiers_list", "host_reservation_identifier",
    "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
 -  "hooks_libraries", "$@32", "hooks_libraries_list",
 -  "not_empty_hooks_libraries_list", "hooks_library", "$@33",
 -  "sub_hooks_library", "$@34", "hooks_params", "hooks_param", "library",
 -  "$@35", "parameters", "$@36", "expired_leases_processing", "$@37",
 +  "hooks_libraries", "$@33", "hooks_libraries_list",
 +  "not_empty_hooks_libraries_list", "hooks_library", "$@34",
 +  "sub_hooks_library", "$@35", "hooks_params", "hooks_param", "library",
 +  "$@36", "parameters", "$@37", "expired_leases_processing", "$@38",
    "expired_leases_params", "expired_leases_param",
    "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
    "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
 -  "unwarned_reclaim_cycles", "subnet4_list", "$@38",
 -  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@39",
 -  "sub_subnet4", "$@40", "subnet4_params", "subnet4_param", "subnet",
 -  "$@41", "subnet_4o6_interface", "$@42", "subnet_4o6_interface_id",
 -  "$@43", "subnet_4o6_subnet", "$@44", "interface", "$@45", "interface_id",
 -  "$@46", "client_class", "$@47", "reservation_mode", "$@48", "hr_mode",
 -  "id", "rapid_commit", "shared_networks", "$@49",
 +  "unwarned_reclaim_cycles", "subnet4_list", "$@39",
 +  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@40",
 +  "sub_subnet4", "$@41", "subnet4_params", "subnet4_param", "subnet",
 +  "$@42", "subnet_4o6_interface", "$@43", "subnet_4o6_interface_id",
 +  "$@44", "subnet_4o6_subnet", "$@45", "interface", "$@46", "interface_id",
 +  "$@47", "client_class", "$@48", "reservation_mode", "$@49", "hr_mode",
-   "id", "rapid_commit", "option_def_list", "$@50", "sub_option_def_list",
-   "$@51", "option_def_list_content", "not_empty_option_def_list",
-   "option_def_entry", "$@52", "sub_option_def", "$@53",
++  "id", "rapid_commit", "shared_networks", "$@50",
+   "shared_networks_content", "shared_networks_list", "shared_network",
 -  "$@50", "shared_network_params", "shared_network_param",
 -  "option_def_list", "$@51", "option_def_list_content",
 -  "not_empty_option_def_list", "option_def_entry", "$@52",
 -  "sub_option_def", "$@53", "option_def_params",
 -  "not_empty_option_def_params", "option_def_param", "option_def_name",
 -  "code", "option_def_code", "option_def_type", "$@54",
 -  "option_def_record_types", "$@55", "space", "$@56", "option_def_space",
 -  "option_def_encapsulate", "$@57", "option_def_array", "option_data_list",
 -  "$@58", "option_data_list_content", "not_empty_option_data_list",
 -  "option_data_entry", "$@59", "sub_option_data", "$@60",
++  "$@51", "shared_network_params", "shared_network_param",
++  "option_def_list", "$@52", "sub_option_def_list", "$@53",
++  "option_def_list_content", "not_empty_option_def_list",
++  "option_def_entry", "$@54", "sub_option_def", "$@55",
 +  "option_def_params", "not_empty_option_def_params", "option_def_param",
-   "option_def_name", "code", "option_def_code", "option_def_type", "$@54",
-   "option_def_record_types", "$@55", "space", "$@56", "option_def_space",
-   "option_def_encapsulate", "$@57", "option_def_array", "option_data_list",
-   "$@58", "option_data_list_content", "not_empty_option_data_list",
-   "option_data_entry", "$@59", "sub_option_data", "$@60",
++  "option_def_name", "code", "option_def_code", "option_def_type", "$@56",
++  "option_def_record_types", "$@57", "space", "$@58", "option_def_space",
++  "option_def_encapsulate", "$@59", "option_def_array", "option_data_list",
++  "$@60", "option_data_list_content", "not_empty_option_data_list",
++  "option_data_entry", "$@61", "sub_option_data", "$@62",
    "option_data_params", "not_empty_option_data_params",
--  "option_data_param", "option_data_name", "option_data_data", "$@61",
++  "option_data_param", "option_data_name", "option_data_data", "$@63",
    "option_data_code", "option_data_space", "option_data_csv_format",
--  "option_data_always_send", "pools_list", "$@62", "pools_list_content",
--  "not_empty_pools_list", "pool_list_entry", "$@63", "sub_pool4", "$@64",
--  "pool_params", "pool_param", "pool_entry", "$@65", "user_context",
--  "$@66", "reservations", "$@67", "reservations_list",
--  "not_empty_reservations_list", "reservation", "$@68", "sub_reservation",
--  "$@69", "reservation_params", "not_empty_reservation_params",
--  "reservation_param", "next_server", "$@70", "server_hostname", "$@71",
--  "boot_file_name", "$@72", "ip_address", "$@73", "duid", "$@74",
--  "hw_address", "$@75", "client_id_value", "$@76", "circuit_id_value",
--  "$@77", "flex_id_value", "$@78", "hostname", "$@79",
--  "reservation_client_classes", "$@80", "relay", "$@81", "relay_map",
--  "$@82", "client_classes", "$@83", "client_classes_list", "$@84",
++  "option_data_always_send", "pools_list", "$@64", "pools_list_content",
++  "not_empty_pools_list", "pool_list_entry", "$@65", "sub_pool4", "$@66",
++  "pool_params", "pool_param", "pool_entry", "$@67", "user_context",
++  "$@68", "reservations", "$@69", "reservations_list",
++  "not_empty_reservations_list", "reservation", "$@70", "sub_reservation",
++  "$@71", "reservation_params", "not_empty_reservation_params",
++  "reservation_param", "next_server", "$@72", "server_hostname", "$@73",
++  "boot_file_name", "$@74", "ip_address", "$@75", "duid", "$@76",
++  "hw_address", "$@77", "client_id_value", "$@78", "circuit_id_value",
++  "$@79", "flex_id_value", "$@80", "hostname", "$@81",
++  "reservation_client_classes", "$@82", "relay", "$@83", "relay_map",
++  "$@84", "client_classes", "$@85", "client_classes_list", "$@86",
    "client_class_params", "not_empty_client_class_params",
--  "client_class_param", "client_class_name", "client_class_test", "$@85",
--  "dhcp4o6_port", "control_socket", "$@86", "control_socket_params",
--  "control_socket_param", "control_socket_type", "$@87",
--  "control_socket_name", "$@88", "dhcp_ddns", "$@89", "sub_dhcp_ddns",
--  "$@90", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
--  "qualifying_suffix", "$@91", "server_ip", "$@92", "server_port",
--  "sender_ip", "$@93", "sender_port", "max_queue_size", "ncr_protocol",
--  "$@94", "ncr_protocol_value", "ncr_format", "$@95",
++  "client_class_param", "client_class_name", "client_class_test", "$@87",
++  "dhcp4o6_port", "control_socket", "$@88", "control_socket_params",
++  "control_socket_param", "control_socket_type", "$@89",
++  "control_socket_name", "$@90", "dhcp_ddns", "$@91", "sub_dhcp_ddns",
++  "$@92", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
++  "qualifying_suffix", "$@93", "server_ip", "$@94", "server_port",
++  "sender_ip", "$@95", "sender_port", "max_queue_size", "ncr_protocol",
++  "$@96", "ncr_protocol_value", "ncr_format", "$@97",
    "always_include_fqdn", "override_no_update", "override_client_update",
--  "replace_client_name", "$@96", "replace_client_name_value",
--  "generated_prefix", "$@97", "dhcp6_json_object", "$@98",
--  "dhcpddns_json_object", "$@99", "control_agent_json_object", "$@100",
--  "logging_object", "$@101", "logging_params", "logging_param", "loggers",
--  "$@102", "loggers_entries", "logger_entry", "$@103", "logger_params",
--  "logger_param", "debuglevel", "severity", "$@104", "output_options_list",
--  "$@105", "output_options_list_content", "output_entry", "$@106",
--  "output_params_list", "output_params", "output", "$@107", "flush",
++  "replace_client_name", "$@98", "replace_client_name_value",
++  "generated_prefix", "$@99", "dhcp6_json_object", "$@100",
++  "dhcpddns_json_object", "$@101", "control_agent_json_object", "$@102",
++  "logging_object", "$@103", "logging_params", "logging_param", "loggers",
++  "$@104", "loggers_entries", "logger_entry", "$@105", "logger_params",
++  "logger_param", "debuglevel", "severity", "$@106", "output_options_list",
++  "$@107", "output_options_list_content", "output_entry", "$@108",
++  "output_params_list", "output_params", "output", "$@109", "flush",
    "maxsize", "maxver", YY_NULLPTR
    };
  
    const unsigned short int
    Dhcp4Parser::yyrline_[] =
    {
-        0,   227,   227,   227,   228,   228,   229,   229,   230,   230,
-      231,   231,   232,   232,   233,   233,   234,   234,   235,   235,
-      236,   236,   237,   237,   238,   238,   246,   247,   248,   249,
-      250,   251,   252,   255,   260,   260,   271,   274,   275,   278,
-      282,   289,   289,   296,   297,   300,   304,   311,   311,   318,
-      319,   322,   326,   337,   347,   347,   363,   364,   368,   369,
-      370,   371,   372,   373,   376,   376,   391,   391,   400,   401,
 -       0,   228,   228,   228,   229,   229,   230,   230,   231,   231,
 -     232,   232,   233,   233,   234,   234,   235,   235,   236,   236,
 -     237,   237,   238,   238,   246,   247,   248,   249,   250,   251,
 -     252,   255,   260,   260,   271,   274,   275,   278,   282,   289,
 -     289,   296,   297,   300,   304,   311,   311,   318,   319,   322,
 -     326,   337,   347,   347,   360,   361,   365,   366,   367,   368,
 -     369,   370,   373,   373,   390,   390,   398,   399,   404,   405,
--     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
--     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-      426,   429,   434,   439,   444,   449,   454,   460,   460,   471,
-      472,   475,   476,   477,   480,   480,   489,   489,   499,   499,
-      506,   507,   510,   516,   516,   528,   528,   540,   541,   544,
-      545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
-      555,   556,   559,   559,   566,   567,   568,   569,   572,   572,
-      580,   580,   588,   588,   596,   601,   601,   609,   614,   619,
-      624,   629,   629,   637,   637,   646,   646,   656,   657,   660,
-      661,   662,   663,   664,   667,   672,   677,   682,   687,   692,
-      692,   702,   703,   706,   707,   710,   710,   720,   720,   730,
-      731,   732,   735,   736,   739,   739,   747,   747,   755,   755,
-      766,   767,   770,   771,   772,   773,   774,   775,   778,   783,
-      788,   793,   798,   803,   811,   811,   824,   825,   828,   829,
-      836,   836,   862,   862,   873,   874,   878,   879,   880,   881,
-      882,   883,   884,   885,   886,   887,   888,   889,   890,   891,
-      892,   893,   894,   895,   896,   897,   898,   901,   901,   909,
-      909,   917,   917,   925,   925,   933,   933,   941,   941,   949,
-      949,   957,   957,   964,   965,   966,   969,   974,   983,   983,
-      996,   996,  1005,  1006,  1009,  1010,  1015,  1015,  1030,  1030,
-     1044,  1045,  1048,  1049,  1052,  1053,  1054,  1055,  1056,  1057,
-     1058,  1059,  1062,  1064,  1069,  1071,  1071,  1079,  1079,  1087,
-     1087,  1095,  1097,  1097,  1105,  1114,  1114,  1126,  1127,  1132,
-     1133,  1138,  1138,  1150,  1150,  1162,  1163,  1168,  1169,  1174,
-     1175,  1176,  1177,  1178,  1179,  1180,  1183,  1185,  1185,  1193,
-     1195,  1197,  1202,  1210,  1210,  1222,  1223,  1226,  1227,  1230,
-     1230,  1240,  1240,  1250,  1251,  1254,  1255,  1256,  1257,  1260,
-     1260,  1268,  1268,  1278,  1278,  1288,  1289,  1292,  1293,  1296,
-     1296,  1305,  1305,  1314,  1315,  1318,  1319,  1323,  1324,  1325,
-     1326,  1327,  1328,  1329,  1330,  1331,  1332,  1333,  1334,  1335,
-     1338,  1338,  1346,  1346,  1354,  1354,  1362,  1362,  1370,  1370,
-     1378,  1378,  1386,  1386,  1394,  1394,  1402,  1402,  1410,  1410,
-     1418,  1418,  1431,  1431,  1441,  1441,  1452,  1452,  1462,  1463,
-     1466,  1466,  1476,  1477,  1480,  1481,  1484,  1485,  1486,  1487,
-     1488,  1489,  1490,  1493,  1495,  1495,  1507,  1514,  1514,  1524,
-     1525,  1528,  1529,  1532,  1532,  1540,  1540,  1550,  1550,  1562,
-     1562,  1572,  1573,  1576,  1577,  1578,  1579,  1580,  1581,  1582,
-     1583,  1584,  1585,  1586,  1587,  1588,  1589,  1590,  1593,  1598,
-     1598,  1606,  1606,  1614,  1619,  1619,  1627,  1632,  1637,  1637,
-     1645,  1646,  1649,  1649,  1657,  1662,  1667,  1672,  1672,  1680,
-     1683,  1686,  1689,  1692,  1698,  1698,  1708,  1708,  1715,  1715,
-     1722,  1722,  1734,  1734,  1747,  1748,  1752,  1756,  1756,  1768,
-     1769,  1773,  1773,  1781,  1782,  1785,  1786,  1787,  1788,  1789,
-     1792,  1797,  1797,  1805,  1805,  1815,  1816,  1819,  1819,  1827,
-     1828,  1831,  1832,  1833,  1834,  1837,  1837,  1845,  1850,  1855
 -     428,   433,   438,   443,   448,   453,   459,   459,   469,   470,
 -     473,   474,   475,   478,   478,   486,   486,   496,   496,   503,
 -     504,   507,   513,   513,   523,   523,   533,   534,   537,   538,
 -     539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
 -     549,   552,   552,   559,   560,   561,   562,   565,   565,   573,
 -     573,   581,   581,   589,   594,   594,   602,   607,   612,   617,
 -     622,   622,   630,   630,   639,   639,   649,   650,   653,   654,
 -     655,   656,   657,   660,   665,   670,   675,   680,   685,   685,
 -     695,   696,   699,   700,   703,   703,   711,   711,   719,   720,
 -     721,   724,   725,   728,   728,   736,   736,   744,   744,   754,
 -     755,   758,   759,   760,   761,   762,   763,   766,   771,   776,
 -     781,   786,   791,   799,   799,   812,   813,   816,   817,   824,
 -     824,   847,   847,   856,   857,   861,   862,   863,   864,   865,
 -     866,   867,   868,   869,   870,   871,   872,   873,   874,   875,
 -     876,   877,   878,   879,   880,   883,   883,   891,   891,   899,
 -     899,   907,   907,   915,   915,   923,   923,   931,   931,   939,
 -     939,   946,   947,   948,   951,   956,   963,   963,   974,   975,
 -     979,   980,   983,   983,   991,   992,   995,   996,   997,   998,
 -     999,  1000,  1001,  1002,  1003,  1004,  1005,  1006,  1007,  1014,
 -    1014,  1026,  1027,  1030,  1031,  1036,  1036,  1047,  1047,  1057,
 -    1058,  1061,  1062,  1065,  1066,  1067,  1068,  1069,  1070,  1071,
 -    1072,  1075,  1077,  1082,  1084,  1084,  1092,  1092,  1100,  1100,
 -    1108,  1110,  1110,  1118,  1127,  1127,  1139,  1140,  1145,  1146,
 -    1151,  1151,  1162,  1162,  1173,  1174,  1179,  1180,  1185,  1186,
 -    1187,  1188,  1189,  1190,  1191,  1194,  1196,  1196,  1204,  1206,
 -    1208,  1213,  1221,  1221,  1233,  1234,  1237,  1238,  1241,  1241,
 -    1249,  1249,  1257,  1258,  1261,  1262,  1263,  1264,  1267,  1267,
 -    1275,  1275,  1285,  1285,  1295,  1296,  1299,  1300,  1303,  1303,
 -    1311,  1311,  1319,  1320,  1323,  1324,  1328,  1329,  1330,  1331,
 -    1332,  1333,  1334,  1335,  1336,  1337,  1338,  1339,  1340,  1343,
 -    1343,  1351,  1351,  1359,  1359,  1367,  1367,  1375,  1375,  1383,
 -    1383,  1391,  1391,  1399,  1399,  1407,  1407,  1415,  1415,  1423,
 -    1423,  1436,  1436,  1446,  1446,  1457,  1457,  1467,  1468,  1471,
 -    1471,  1479,  1480,  1483,  1484,  1487,  1488,  1489,  1490,  1491,
 -    1492,  1493,  1496,  1498,  1498,  1510,  1517,  1517,  1527,  1528,
 -    1531,  1532,  1535,  1535,  1543,  1543,  1553,  1553,  1563,  1563,
 -    1571,  1572,  1575,  1576,  1577,  1578,  1579,  1580,  1581,  1582,
 -    1583,  1584,  1585,  1586,  1587,  1588,  1589,  1592,  1597,  1597,
 -    1605,  1605,  1613,  1618,  1618,  1626,  1631,  1636,  1636,  1644,
 -    1645,  1648,  1648,  1656,  1661,  1666,  1671,  1671,  1679,  1682,
 -    1685,  1688,  1691,  1697,  1697,  1707,  1707,  1714,  1714,  1721,
 -    1721,  1733,  1733,  1746,  1747,  1751,  1755,  1755,  1767,  1768,
 -    1772,  1772,  1780,  1781,  1784,  1785,  1786,  1787,  1788,  1791,
 -    1796,  1796,  1804,  1804,  1814,  1815,  1818,  1818,  1826,  1827,
 -    1830,  1831,  1832,  1833,  1836,  1836,  1844,  1849,  1854
++       0,   229,   229,   229,   230,   230,   231,   231,   232,   232,
++     233,   233,   234,   234,   235,   235,   236,   236,   237,   237,
++     238,   238,   239,   239,   240,   240,   248,   249,   250,   251,
++     252,   253,   254,   257,   262,   262,   273,   276,   277,   280,
++     284,   291,   291,   298,   299,   302,   306,   313,   313,   320,
++     321,   324,   328,   339,   349,   349,   365,   366,   370,   371,
++     372,   373,   374,   375,   378,   378,   393,   393,   402,   403,
++     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
++     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
++     428,   429,   432,   437,   442,   447,   452,   457,   463,   463,
++     474,   475,   478,   479,   480,   483,   483,   492,   492,   502,
++     502,   509,   510,   513,   519,   519,   531,   531,   543,   544,
++     547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
++     557,   558,   559,   562,   562,   569,   570,   571,   572,   575,
++     575,   583,   583,   591,   591,   599,   604,   604,   612,   617,
++     622,   627,   632,   632,   640,   640,   649,   649,   659,   660,
++     663,   664,   665,   666,   667,   670,   675,   680,   685,   690,
++     695,   695,   705,   706,   709,   710,   713,   713,   723,   723,
++     733,   734,   735,   738,   739,   742,   742,   750,   750,   758,
++     758,   769,   770,   773,   774,   775,   776,   777,   778,   781,
++     786,   791,   796,   801,   806,   814,   814,   827,   828,   831,
++     832,   839,   839,   865,   865,   876,   877,   881,   882,   883,
++     884,   885,   886,   887,   888,   889,   890,   891,   892,   893,
++     894,   895,   896,   897,   898,   899,   900,   901,   904,   904,
++     912,   912,   920,   920,   928,   928,   936,   936,   944,   944,
++     952,   952,   960,   960,   967,   968,   969,   972,   977,   984,
++     984,   995,   996,  1000,  1001,  1004,  1004,  1012,  1013,  1016,
++    1017,  1018,  1019,  1020,  1021,  1022,  1023,  1024,  1025,  1026,
++    1027,  1028,  1035,  1035,  1048,  1048,  1057,  1058,  1061,  1062,
++    1067,  1067,  1082,  1082,  1096,  1097,  1100,  1101,  1104,  1105,
++    1106,  1107,  1108,  1109,  1110,  1111,  1114,  1116,  1121,  1123,
++    1123,  1131,  1131,  1139,  1139,  1147,  1149,  1149,  1157,  1166,
++    1166,  1178,  1179,  1184,  1185,  1190,  1190,  1202,  1202,  1214,
++    1215,  1220,  1221,  1226,  1227,  1228,  1229,  1230,  1231,  1232,
++    1235,  1237,  1237,  1245,  1247,  1249,  1254,  1262,  1262,  1274,
++    1275,  1278,  1279,  1282,  1282,  1292,  1292,  1302,  1303,  1306,
++    1307,  1308,  1309,  1312,  1312,  1320,  1320,  1330,  1330,  1340,
++    1341,  1344,  1345,  1348,  1348,  1357,  1357,  1366,  1367,  1370,
++    1371,  1375,  1376,  1377,  1378,  1379,  1380,  1381,  1382,  1383,
++    1384,  1385,  1386,  1387,  1390,  1390,  1398,  1398,  1406,  1406,
++    1414,  1414,  1422,  1422,  1430,  1430,  1438,  1438,  1446,  1446,
++    1454,  1454,  1462,  1462,  1470,  1470,  1483,  1483,  1493,  1493,
++    1504,  1504,  1514,  1515,  1518,  1518,  1528,  1529,  1532,  1533,
++    1536,  1537,  1538,  1539,  1540,  1541,  1542,  1545,  1547,  1547,
++    1559,  1566,  1566,  1576,  1577,  1580,  1581,  1584,  1584,  1592,
++    1592,  1602,  1602,  1614,  1614,  1624,  1625,  1628,  1629,  1630,
++    1631,  1632,  1633,  1634,  1635,  1636,  1637,  1638,  1639,  1640,
++    1641,  1642,  1645,  1650,  1650,  1658,  1658,  1666,  1671,  1671,
++    1679,  1684,  1689,  1689,  1697,  1698,  1701,  1701,  1709,  1714,
++    1719,  1724,  1724,  1732,  1735,  1738,  1741,  1744,  1750,  1750,
++    1760,  1760,  1767,  1767,  1774,  1774,  1786,  1786,  1799,  1800,
++    1804,  1808,  1808,  1820,  1821,  1825,  1825,  1833,  1834,  1837,
++    1838,  1839,  1840,  1841,  1844,  1849,  1849,  1857,  1857,  1867,
++    1868,  1871,  1871,  1879,  1880,  1883,  1884,  1885,  1886,  1889,
++    1889,  1897,  1902,  1907
    };
  
    // Print the state stack on the debug stream.
  
  #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
  } } // isc::dhcp
- #line 4254 "dhcp4_parser.cc" // lalr1.cc:1167
- #line 1860 "dhcp4_parser.yy" // lalr1.cc:1168
 -#line 4250 "dhcp4_parser.cc" // lalr1.cc:1167
 -#line 1859 "dhcp4_parser.yy" // lalr1.cc:1168
++#line 4320 "dhcp4_parser.cc" // lalr1.cc:1167
++#line 1912 "dhcp4_parser.yy" // lalr1.cc:1168
  
  
  void
index 57ab384b74328b5aca005668ba12d19d2fef92b4,773b9157c91503f273dec48bec2a7e4ad3f4745e..7c0b3aac89181bf0a4821b76d651e011da4da121
@@@ -402,94 -402,94 +402,95 @@@ namespace isc { namespace dhcp 
          TOKEN_RECORD_TYPES = 310,
          TOKEN_ENCAPSULATE = 311,
          TOKEN_ARRAY = 312,
-         TOKEN_POOLS = 313,
-         TOKEN_POOL = 314,
-         TOKEN_USER_CONTEXT = 315,
-         TOKEN_SUBNET = 316,
-         TOKEN_INTERFACE = 317,
-         TOKEN_INTERFACE_ID = 318,
-         TOKEN_ID = 319,
-         TOKEN_RAPID_COMMIT = 320,
-         TOKEN_RESERVATION_MODE = 321,
-         TOKEN_DISABLED = 322,
-         TOKEN_OUT_OF_POOL = 323,
-         TOKEN_ALL = 324,
-         TOKEN_HOST_RESERVATION_IDENTIFIERS = 325,
-         TOKEN_CLIENT_CLASSES = 326,
-         TOKEN_TEST = 327,
-         TOKEN_CLIENT_CLASS = 328,
-         TOKEN_RESERVATIONS = 329,
-         TOKEN_DUID = 330,
-         TOKEN_HW_ADDRESS = 331,
-         TOKEN_CIRCUIT_ID = 332,
-         TOKEN_CLIENT_ID = 333,
-         TOKEN_HOSTNAME = 334,
-         TOKEN_FLEX_ID = 335,
-         TOKEN_RELAY = 336,
-         TOKEN_IP_ADDRESS = 337,
-         TOKEN_HOOKS_LIBRARIES = 338,
-         TOKEN_LIBRARY = 339,
-         TOKEN_PARAMETERS = 340,
-         TOKEN_EXPIRED_LEASES_PROCESSING = 341,
-         TOKEN_RECLAIM_TIMER_WAIT_TIME = 342,
-         TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 343,
-         TOKEN_HOLD_RECLAIMED_TIME = 344,
-         TOKEN_MAX_RECLAIM_LEASES = 345,
-         TOKEN_MAX_RECLAIM_TIME = 346,
-         TOKEN_UNWARNED_RECLAIM_CYCLES = 347,
-         TOKEN_DHCP4O6_PORT = 348,
-         TOKEN_CONTROL_SOCKET = 349,
-         TOKEN_SOCKET_TYPE = 350,
-         TOKEN_SOCKET_NAME = 351,
-         TOKEN_DHCP_DDNS = 352,
-         TOKEN_ENABLE_UPDATES = 353,
-         TOKEN_QUALIFYING_SUFFIX = 354,
-         TOKEN_SERVER_IP = 355,
-         TOKEN_SERVER_PORT = 356,
-         TOKEN_SENDER_IP = 357,
-         TOKEN_SENDER_PORT = 358,
-         TOKEN_MAX_QUEUE_SIZE = 359,
-         TOKEN_NCR_PROTOCOL = 360,
-         TOKEN_NCR_FORMAT = 361,
-         TOKEN_ALWAYS_INCLUDE_FQDN = 362,
-         TOKEN_OVERRIDE_NO_UPDATE = 363,
-         TOKEN_OVERRIDE_CLIENT_UPDATE = 364,
-         TOKEN_REPLACE_CLIENT_NAME = 365,
-         TOKEN_GENERATED_PREFIX = 366,
-         TOKEN_TCP = 367,
-         TOKEN_JSON = 368,
-         TOKEN_WHEN_PRESENT = 369,
-         TOKEN_NEVER = 370,
-         TOKEN_ALWAYS = 371,
-         TOKEN_WHEN_NOT_PRESENT = 372,
-         TOKEN_LOGGING = 373,
-         TOKEN_LOGGERS = 374,
-         TOKEN_OUTPUT_OPTIONS = 375,
-         TOKEN_OUTPUT = 376,
-         TOKEN_DEBUGLEVEL = 377,
-         TOKEN_SEVERITY = 378,
-         TOKEN_FLUSH = 379,
-         TOKEN_MAXSIZE = 380,
-         TOKEN_MAXVER = 381,
-         TOKEN_DHCP6 = 382,
-         TOKEN_DHCPDDNS = 383,
-         TOKEN_CONTROL_AGENT = 384,
-         TOKEN_TOPLEVEL_JSON = 385,
-         TOKEN_TOPLEVEL_DHCP4 = 386,
-         TOKEN_SUB_DHCP4 = 387,
-         TOKEN_SUB_INTERFACES4 = 388,
-         TOKEN_SUB_SUBNET4 = 389,
-         TOKEN_SUB_POOL4 = 390,
-         TOKEN_SUB_RESERVATION = 391,
-         TOKEN_SUB_OPTION_DEFS = 392,
-         TOKEN_SUB_OPTION_DEF = 393,
-         TOKEN_SUB_OPTION_DATA = 394,
-         TOKEN_SUB_HOOKS_LIBRARY = 395,
-         TOKEN_SUB_DHCP_DDNS = 396,
-         TOKEN_STRING = 397,
-         TOKEN_INTEGER = 398,
-         TOKEN_FLOAT = 399,
-         TOKEN_BOOLEAN = 400
+         TOKEN_SHARED_NETWORKS = 313,
+         TOKEN_POOLS = 314,
+         TOKEN_POOL = 315,
+         TOKEN_USER_CONTEXT = 316,
+         TOKEN_SUBNET = 317,
+         TOKEN_INTERFACE = 318,
+         TOKEN_INTERFACE_ID = 319,
+         TOKEN_ID = 320,
+         TOKEN_RAPID_COMMIT = 321,
+         TOKEN_RESERVATION_MODE = 322,
+         TOKEN_DISABLED = 323,
+         TOKEN_OUT_OF_POOL = 324,
+         TOKEN_ALL = 325,
+         TOKEN_HOST_RESERVATION_IDENTIFIERS = 326,
+         TOKEN_CLIENT_CLASSES = 327,
+         TOKEN_TEST = 328,
+         TOKEN_CLIENT_CLASS = 329,
+         TOKEN_RESERVATIONS = 330,
+         TOKEN_DUID = 331,
+         TOKEN_HW_ADDRESS = 332,
+         TOKEN_CIRCUIT_ID = 333,
+         TOKEN_CLIENT_ID = 334,
+         TOKEN_HOSTNAME = 335,
+         TOKEN_FLEX_ID = 336,
+         TOKEN_RELAY = 337,
+         TOKEN_IP_ADDRESS = 338,
+         TOKEN_HOOKS_LIBRARIES = 339,
+         TOKEN_LIBRARY = 340,
+         TOKEN_PARAMETERS = 341,
+         TOKEN_EXPIRED_LEASES_PROCESSING = 342,
+         TOKEN_RECLAIM_TIMER_WAIT_TIME = 343,
+         TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 344,
+         TOKEN_HOLD_RECLAIMED_TIME = 345,
+         TOKEN_MAX_RECLAIM_LEASES = 346,
+         TOKEN_MAX_RECLAIM_TIME = 347,
+         TOKEN_UNWARNED_RECLAIM_CYCLES = 348,
+         TOKEN_DHCP4O6_PORT = 349,
+         TOKEN_CONTROL_SOCKET = 350,
+         TOKEN_SOCKET_TYPE = 351,
+         TOKEN_SOCKET_NAME = 352,
+         TOKEN_DHCP_DDNS = 353,
+         TOKEN_ENABLE_UPDATES = 354,
+         TOKEN_QUALIFYING_SUFFIX = 355,
+         TOKEN_SERVER_IP = 356,
+         TOKEN_SERVER_PORT = 357,
+         TOKEN_SENDER_IP = 358,
+         TOKEN_SENDER_PORT = 359,
+         TOKEN_MAX_QUEUE_SIZE = 360,
+         TOKEN_NCR_PROTOCOL = 361,
+         TOKEN_NCR_FORMAT = 362,
+         TOKEN_ALWAYS_INCLUDE_FQDN = 363,
+         TOKEN_OVERRIDE_NO_UPDATE = 364,
+         TOKEN_OVERRIDE_CLIENT_UPDATE = 365,
+         TOKEN_REPLACE_CLIENT_NAME = 366,
+         TOKEN_GENERATED_PREFIX = 367,
+         TOKEN_TCP = 368,
+         TOKEN_JSON = 369,
+         TOKEN_WHEN_PRESENT = 370,
+         TOKEN_NEVER = 371,
+         TOKEN_ALWAYS = 372,
+         TOKEN_WHEN_NOT_PRESENT = 373,
+         TOKEN_LOGGING = 374,
+         TOKEN_LOGGERS = 375,
+         TOKEN_OUTPUT_OPTIONS = 376,
+         TOKEN_OUTPUT = 377,
+         TOKEN_DEBUGLEVEL = 378,
+         TOKEN_SEVERITY = 379,
+         TOKEN_FLUSH = 380,
+         TOKEN_MAXSIZE = 381,
+         TOKEN_MAXVER = 382,
+         TOKEN_DHCP6 = 383,
+         TOKEN_DHCPDDNS = 384,
+         TOKEN_CONTROL_AGENT = 385,
+         TOKEN_TOPLEVEL_JSON = 386,
+         TOKEN_TOPLEVEL_DHCP4 = 387,
+         TOKEN_SUB_DHCP4 = 388,
+         TOKEN_SUB_INTERFACES4 = 389,
+         TOKEN_SUB_SUBNET4 = 390,
+         TOKEN_SUB_POOL4 = 391,
+         TOKEN_SUB_RESERVATION = 392,
 -        TOKEN_SUB_OPTION_DEF = 393,
 -        TOKEN_SUB_OPTION_DATA = 394,
 -        TOKEN_SUB_HOOKS_LIBRARY = 395,
 -        TOKEN_SUB_DHCP_DDNS = 396,
 -        TOKEN_STRING = 397,
 -        TOKEN_INTEGER = 398,
 -        TOKEN_FLOAT = 399,
 -        TOKEN_BOOLEAN = 400
++        TOKEN_SUB_OPTION_DEFS = 393,
++        TOKEN_SUB_OPTION_DEF = 394,
++        TOKEN_SUB_OPTION_DATA = 395,
++        TOKEN_SUB_HOOKS_LIBRARY = 396,
++        TOKEN_SUB_DHCP_DDNS = 397,
++        TOKEN_STRING = 398,
++        TOKEN_INTEGER = 399,
++        TOKEN_FLOAT = 400,
++        TOKEN_BOOLEAN = 401
        };
      };
  
      enum
      {
        yyeof_ = 0,
-       yylast_ = 756,     ///< Last index in yytable_.
-       yynnts_ = 321,  ///< Number of nonterminal symbols.
+       yylast_ = 787,     ///< Last index in yytable_.
 -      yynnts_ = 326,  ///< Number of nonterminal symbols.
 -      yyfinal_ = 24, ///< Termination state number.
++      yynnts_ = 329,  ///< Number of nonterminal symbols.
 +      yyfinal_ = 26, ///< Termination state number.
        yyterror_ = 1,
        yyerrcode_ = 256,
--      yyntokens_ = 146  ///< Number of tokens.
++      yyntokens_ = 147  ///< Number of tokens.
      };
  
  
       115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
       125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
       135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
--     145
++     145,   146
      };
--    const unsigned int user_token_number_max_ = 400;
++    const unsigned int user_token_number_max_ = 401;
      const token_number_type undef_token_ = 2;
  
      if (static_cast<int>(t) <= yyeof_)
    {
        switch (other.type_get ())
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.copy< ElementPtr > (other.value);
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.copy< bool > (other.value);
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.copy< double > (other.value);
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.copy< int64_t > (other.value);
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.copy< std::string > (other.value);
          break;
  
      (void) v;
        switch (this->type_get ())
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.copy< ElementPtr > (v);
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.copy< bool > (v);
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.copy< double > (v);
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.copy< int64_t > (v);
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.copy< std::string > (v);
          break;
  
      // Type destructor.
      switch (yytype)
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.template destroy< ElementPtr > ();
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.template destroy< bool > ();
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.template destroy< double > ();
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.template destroy< int64_t > ();
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.template destroy< std::string > ();
          break;
  
      super_type::move(s);
        switch (this->type_get ())
      {
-       case 160: // value
-       case 164: // map_value
-       case 202: // socket_type
-       case 212: // db_type
-       case 289: // hr_mode
-       case 424: // ncr_protocol_value
-       case 432: // replace_client_name_value
 -      case 159: // value
 -      case 163: // map_value
 -      case 201: // socket_type
 -      case 211: // db_type
 -      case 288: // hr_mode
 -      case 429: // ncr_protocol_value
 -      case 437: // replace_client_name_value
++      case 161: // value
++      case 165: // map_value
++      case 203: // socket_type
++      case 213: // db_type
++      case 290: // hr_mode
++      case 433: // ncr_protocol_value
++      case 441: // replace_client_name_value
          value.move< ElementPtr > (s.value);
          break;
  
--      case 145: // "boolean"
++      case 146: // "boolean"
          value.move< bool > (s.value);
          break;
  
--      case 144: // "floating point"
++      case 145: // "floating point"
          value.move< double > (s.value);
          break;
  
--      case 143: // "integer"
++      case 144: // "integer"
          value.move< int64_t > (s.value);
          break;
  
--      case 142: // "constant string"
++      case 143: // "constant string"
          value.move< std::string > (s.value);
          break;
  
       365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
       375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
       385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
--     395,   396,   397,   398,   399,   400
++     395,   396,   397,   398,   399,   400,   401
      };
      return static_cast<token_type> (yytoken_number_[type]);
    }
  
  #line 14 "dhcp4_parser.yy" // lalr1.cc:377
  } } // isc::dhcp
--#line 2647 "dhcp4_parser.h" // lalr1.cc:377
++#line 2658 "dhcp4_parser.h" // lalr1.cc:377
  
  
  
Simple merge
Simple merge
Simple merge
index 4cb1aa64ccae7b68e138d40fbd67d9e698ca12b1,49667b87dfb6424ede830b64f67844a2a8043775..510fbc0997ed424c1605835a18e18f8a3847b6ec
@@@ -1552,28 -1336,28 +1336,28 @@@ static yyconst flex_int16_t yy_chk[1701
  static yy_state_type yy_last_accepting_state;
  static char *yy_last_accepting_cpos;
  
- extern int yy_flex_debug;
- int yy_flex_debug = 1;
+ extern int parser6__flex_debug;
+ int parser6__flex_debug = 1;
  
- static const flex_int16_t yy_rule_linenum[160] =
+ static yyconst flex_int16_t yy_rule_linenum[161] =
      {   0,
-       139,  141,  143,  148,  149,  154,  155,  156,  168,  171,
-       176,  183,  192,  201,  210,  219,  228,  237,  246,  255,
-       264,  273,  282,  291,  300,  309,  319,  329,  339,  349,
-       359,  369,  379,  389,  399,  408,  417,  426,  435,  444,
-       453,  462,  474,  483,  492,  501,  510,  520,  530,  540,
-       550,  561,  571,  581,  591,  601,  611,  621,  631,  641,
-       650,  659,  668,  683,  698,  707,  716,  725,  734,  743,
-       752,  761,  770,  779,  788,  799,  808,  817,  826,  835,
-       844,  853,  862,  871,  880,  889,  899,  908,  917,  926,
-       935,  944,  953,  962,  971,  980,  990,  999, 1008, 1018,
 -      136,  138,  140,  145,  146,  151,  152,  153,  165,  168,
 -      173,  180,  189,  198,  207,  216,  225,  234,  243,  252,
 -      261,  270,  279,  288,  297,  306,  316,  326,  336,  346,
 -      356,  366,  376,  386,  396,  405,  414,  423,  432,  441,
 -      450,  459,  471,  480,  489,  498,  507,  517,  527,  537,
 -      547,  558,  568,  578,  588,  598,  609,  620,  631,  642,
 -      651,  661,  670,  679,  695,  711,  720,  729,  738,  747,
 -      756,  765,  774,  783,  792,  801,  811,  820,  830,  840,
 -      849,  859,  869,  878,  887,  896,  905,  915,  924,  933,
 -      942,  951,  960,  969,  978,  987,  996, 1006, 1015, 1024,
--
-      1028, 1038, 1047, 1056, 1065, 1076, 1086, 1095, 1105, 1115,
-      1124, 1133, 1142, 1151, 1160, 1169, 1179, 1188, 1197, 1206,
-      1215, 1224, 1233, 1242, 1251, 1260, 1269, 1278, 1287, 1296,
-      1305, 1314, 1323, 1332, 1341, 1350, 1359, 1368, 1377, 1386,
-      1395, 1405, 1503, 1508, 1513, 1518, 1519, 1520, 1521, 1522,
-      1523, 1525, 1543, 1556, 1561, 1565, 1567, 1569, 1571
 -     1034, 1044, 1054, 1063, 1072, 1081, 1092, 1102, 1111, 1121,
 -     1131, 1140, 1149, 1158, 1167, 1177, 1186, 1196, 1205, 1214,
 -     1223, 1232, 1241, 1250, 1259, 1268, 1277, 1286, 1295, 1304,
 -     1313, 1322, 1331, 1340, 1349, 1358, 1367, 1376, 1385, 1394,
 -     1403, 1412, 1422, 1520, 1525, 1530, 1535, 1536, 1537, 1538,
 -     1539, 1540, 1542, 1560, 1573, 1578, 1582, 1584, 1586, 1588
++      140,  142,  144,  149,  150,  155,  156,  157,  169,  172,
++      177,  184,  193,  202,  211,  220,  229,  238,  247,  256,
++      265,  274,  283,  292,  301,  310,  320,  330,  340,  350,
++      360,  370,  380,  390,  400,  409,  418,  427,  436,  445,
++      454,  463,  475,  484,  493,  502,  511,  521,  531,  541,
++      551,  562,  572,  582,  592,  602,  613,  624,  635,  646,
++      655,  665,  674,  683,  699,  715,  724,  733,  742,  751,
++      760,  769,  778,  787,  796,  805,  816,  825,  835,  845,
++      854,  864,  874,  883,  892,  901,  910,  920,  929,  938,
++      947,  956,  965,  974,  983,  992, 1001, 1011, 1020, 1029,
++
++     1039, 1049, 1059, 1068, 1077, 1086, 1097, 1107, 1116, 1126,
++     1136, 1145, 1154, 1163, 1172, 1182, 1191, 1201, 1210, 1219,
++     1228, 1237, 1246, 1255, 1264, 1273, 1282, 1291, 1300, 1309,
++     1318, 1327, 1336, 1345, 1354, 1363, 1372, 1381, 1390, 1399,
++     1408, 1417, 1427, 1525, 1530, 1535, 1540, 1541, 1542, 1543,
++     1544, 1545, 1547, 1565, 1578, 1583, 1587, 1589, 1591, 1593
      } ;
  
  /* The intent behind this definition is that it'll catch
@@@ -1975,7 -1760,7 +1764,7 @@@ YY_DEC
      }
  
  
- #line 1978 "dhcp6_lexer.cc"
 -#line 1764 "dhcp6_lexer.cc"
++#line 1768 "dhcp6_lexer.cc"
  
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@@ -2053,17 -1838,17 +1842,17 @@@ do_action:   /* This label is used only t
  
  case 1:
  YY_RULE_SETUP
- #line 139 "dhcp6_lexer.ll"
 -#line 136 "dhcp6_lexer.ll"
++#line 140 "dhcp6_lexer.ll"
  ;
        YY_BREAK
  case 2:
  YY_RULE_SETUP
- #line 141 "dhcp6_lexer.ll"
 -#line 138 "dhcp6_lexer.ll"
++#line 142 "dhcp6_lexer.ll"
  ;
        YY_BREAK
  case 3:
  YY_RULE_SETUP
- #line 143 "dhcp6_lexer.ll"
 -#line 140 "dhcp6_lexer.ll"
++#line 144 "dhcp6_lexer.ll"
  {
    BEGIN(COMMENT);
    comment_start_line = driver.loc_.end.line;;
        YY_BREAK
  case 4:
  YY_RULE_SETUP
- #line 148 "dhcp6_lexer.ll"
 -#line 145 "dhcp6_lexer.ll"
++#line 149 "dhcp6_lexer.ll"
  BEGIN(INITIAL);
        YY_BREAK
  case 5:
  YY_RULE_SETUP
- #line 149 "dhcp6_lexer.ll"
 -#line 146 "dhcp6_lexer.ll"
++#line 150 "dhcp6_lexer.ll"
  ;
        YY_BREAK
  case YY_STATE_EOF(COMMENT):
- #line 150 "dhcp6_lexer.ll"
 -#line 147 "dhcp6_lexer.ll"
++#line 151 "dhcp6_lexer.ll"
  {
      isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line);
  }
        YY_BREAK
  case 6:
  YY_RULE_SETUP
- #line 154 "dhcp6_lexer.ll"
 -#line 151 "dhcp6_lexer.ll"
++#line 155 "dhcp6_lexer.ll"
  BEGIN(DIR_ENTER);
        YY_BREAK
  case 7:
  YY_RULE_SETUP
- #line 155 "dhcp6_lexer.ll"
 -#line 152 "dhcp6_lexer.ll"
++#line 156 "dhcp6_lexer.ll"
  BEGIN(DIR_INCLUDE);
        YY_BREAK
  case 8:
  YY_RULE_SETUP
- #line 156 "dhcp6_lexer.ll"
 -#line 153 "dhcp6_lexer.ll"
++#line 157 "dhcp6_lexer.ll"
  {
      /* Include directive. */
  
  case YY_STATE_EOF(DIR_ENTER):
  case YY_STATE_EOF(DIR_INCLUDE):
  case YY_STATE_EOF(DIR_EXIT):
- #line 165 "dhcp6_lexer.ll"
 -#line 162 "dhcp6_lexer.ll"
++#line 166 "dhcp6_lexer.ll"
  {
      isc_throw(Dhcp6ParseError, "Directive not closed.");
  }
        YY_BREAK
  case 9:
  YY_RULE_SETUP
- #line 168 "dhcp6_lexer.ll"
 -#line 165 "dhcp6_lexer.ll"
++#line 169 "dhcp6_lexer.ll"
  BEGIN(INITIAL);
        YY_BREAK
  case 10:
  YY_RULE_SETUP
- #line 171 "dhcp6_lexer.ll"
 -#line 168 "dhcp6_lexer.ll"
++#line 172 "dhcp6_lexer.ll"
  {
      /* Ok, we found a with space. Let's ignore it and update loc variable. */
      driver.loc_.step();
  case 11:
  /* rule 11 can match eol */
  YY_RULE_SETUP
- #line 176 "dhcp6_lexer.ll"
 -#line 173 "dhcp6_lexer.ll"
++#line 177 "dhcp6_lexer.ll"
  {
      /* Newline found. Let's update the location and continue. */
-     driver.loc_.lines(yyleng);
+     driver.loc_.lines(parser6_leng);
      driver.loc_.step();
  }
        YY_BREAK
  case 12:
  YY_RULE_SETUP
- #line 183 "dhcp6_lexer.ll"
 -#line 180 "dhcp6_lexer.ll"
++#line 184 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 13:
  YY_RULE_SETUP
- #line 192 "dhcp6_lexer.ll"
 -#line 189 "dhcp6_lexer.ll"
++#line 193 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 14:
  YY_RULE_SETUP
- #line 201 "dhcp6_lexer.ll"
 -#line 198 "dhcp6_lexer.ll"
++#line 202 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 15:
  YY_RULE_SETUP
- #line 210 "dhcp6_lexer.ll"
 -#line 207 "dhcp6_lexer.ll"
++#line 211 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 16:
  YY_RULE_SETUP
- #line 219 "dhcp6_lexer.ll"
 -#line 216 "dhcp6_lexer.ll"
++#line 220 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 17:
  YY_RULE_SETUP
- #line 228 "dhcp6_lexer.ll"
 -#line 225 "dhcp6_lexer.ll"
++#line 229 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 18:
  YY_RULE_SETUP
- #line 237 "dhcp6_lexer.ll"
 -#line 234 "dhcp6_lexer.ll"
++#line 238 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 19:
  YY_RULE_SETUP
- #line 246 "dhcp6_lexer.ll"
 -#line 243 "dhcp6_lexer.ll"
++#line 247 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 20:
  YY_RULE_SETUP
- #line 255 "dhcp6_lexer.ll"
 -#line 252 "dhcp6_lexer.ll"
++#line 256 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 21:
  YY_RULE_SETUP
- #line 264 "dhcp6_lexer.ll"
 -#line 261 "dhcp6_lexer.ll"
++#line 265 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 22:
  YY_RULE_SETUP
- #line 273 "dhcp6_lexer.ll"
 -#line 270 "dhcp6_lexer.ll"
++#line 274 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 23:
  YY_RULE_SETUP
- #line 282 "dhcp6_lexer.ll"
 -#line 279 "dhcp6_lexer.ll"
++#line 283 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 24:
  YY_RULE_SETUP
- #line 291 "dhcp6_lexer.ll"
 -#line 288 "dhcp6_lexer.ll"
++#line 292 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 25:
  YY_RULE_SETUP
- #line 300 "dhcp6_lexer.ll"
 -#line 297 "dhcp6_lexer.ll"
++#line 301 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP_DDNS:
        YY_BREAK
  case 26:
  YY_RULE_SETUP
- #line 309 "dhcp6_lexer.ll"
 -#line 306 "dhcp6_lexer.ll"
++#line 310 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
        YY_BREAK
  case 27:
  YY_RULE_SETUP
- #line 319 "dhcp6_lexer.ll"
 -#line 316 "dhcp6_lexer.ll"
++#line 320 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
        YY_BREAK
  case 28:
  YY_RULE_SETUP
- #line 329 "dhcp6_lexer.ll"
 -#line 326 "dhcp6_lexer.ll"
++#line 330 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) {
        YY_BREAK
  case 29:
  YY_RULE_SETUP
- #line 339 "dhcp6_lexer.ll"
 -#line 336 "dhcp6_lexer.ll"
++#line 340 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 30:
  YY_RULE_SETUP
- #line 349 "dhcp6_lexer.ll"
 -#line 346 "dhcp6_lexer.ll"
++#line 350 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 31:
  YY_RULE_SETUP
- #line 359 "dhcp6_lexer.ll"
 -#line 356 "dhcp6_lexer.ll"
++#line 360 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 32:
  YY_RULE_SETUP
- #line 369 "dhcp6_lexer.ll"
 -#line 366 "dhcp6_lexer.ll"
++#line 370 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 33:
  YY_RULE_SETUP
- #line 379 "dhcp6_lexer.ll"
 -#line 376 "dhcp6_lexer.ll"
++#line 380 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 34:
  YY_RULE_SETUP
- #line 389 "dhcp6_lexer.ll"
 -#line 386 "dhcp6_lexer.ll"
++#line 390 "dhcp6_lexer.ll"
  {
      /* dhcp-ddns value keywords are case insensitive */
      if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
        YY_BREAK
  case 35:
  YY_RULE_SETUP
- #line 399 "dhcp6_lexer.ll"
 -#line 396 "dhcp6_lexer.ll"
++#line 400 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONFIG:
        YY_BREAK
  case 36:
  YY_RULE_SETUP
- #line 408 "dhcp6_lexer.ll"
 -#line 405 "dhcp6_lexer.ll"
++#line 409 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 37:
  YY_RULE_SETUP
- #line 417 "dhcp6_lexer.ll"
 -#line 414 "dhcp6_lexer.ll"
++#line 418 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
        YY_BREAK
  case 38:
  YY_RULE_SETUP
- #line 426 "dhcp6_lexer.ll"
 -#line 423 "dhcp6_lexer.ll"
++#line 427 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
        YY_BREAK
  case 39:
  YY_RULE_SETUP
- #line 435 "dhcp6_lexer.ll"
 -#line 432 "dhcp6_lexer.ll"
++#line 436 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 40:
  YY_RULE_SETUP
- #line 444 "dhcp6_lexer.ll"
 -#line 441 "dhcp6_lexer.ll"
++#line 445 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 41:
  YY_RULE_SETUP
- #line 453 "dhcp6_lexer.ll"
 -#line 450 "dhcp6_lexer.ll"
++#line 454 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::HOSTS_DATABASE:
        YY_BREAK
  case 42:
  YY_RULE_SETUP
- #line 462 "dhcp6_lexer.ll"
 -#line 459 "dhcp6_lexer.ll"
++#line 463 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 43:
  YY_RULE_SETUP
- #line 474 "dhcp6_lexer.ll"
 -#line 471 "dhcp6_lexer.ll"
++#line 475 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DATABASE_TYPE:
        YY_BREAK
  case 44:
  YY_RULE_SETUP
- #line 483 "dhcp6_lexer.ll"
 -#line 480 "dhcp6_lexer.ll"
++#line 484 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DATABASE_TYPE:
        YY_BREAK
  case 45:
  YY_RULE_SETUP
- #line 492 "dhcp6_lexer.ll"
 -#line 489 "dhcp6_lexer.ll"
++#line 493 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DATABASE_TYPE:
        YY_BREAK
  case 46:
  YY_RULE_SETUP
- #line 501 "dhcp6_lexer.ll"
 -#line 498 "dhcp6_lexer.ll"
++#line 502 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DATABASE_TYPE:
        YY_BREAK
  case 47:
  YY_RULE_SETUP
- #line 510 "dhcp6_lexer.ll"
 -#line 507 "dhcp6_lexer.ll"
++#line 511 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 48:
  YY_RULE_SETUP
- #line 520 "dhcp6_lexer.ll"
 -#line 517 "dhcp6_lexer.ll"
++#line 521 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 49:
  YY_RULE_SETUP
- #line 530 "dhcp6_lexer.ll"
 -#line 527 "dhcp6_lexer.ll"
++#line 531 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 50:
  YY_RULE_SETUP
- #line 540 "dhcp6_lexer.ll"
 -#line 537 "dhcp6_lexer.ll"
++#line 541 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 51:
  YY_RULE_SETUP
- #line 550 "dhcp6_lexer.ll"
 -#line 547 "dhcp6_lexer.ll"
++#line 551 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 52:
  YY_RULE_SETUP
- #line 561 "dhcp6_lexer.ll"
 -#line 558 "dhcp6_lexer.ll"
++#line 562 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 53:
  YY_RULE_SETUP
- #line 571 "dhcp6_lexer.ll"
 -#line 568 "dhcp6_lexer.ll"
++#line 572 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 54:
  YY_RULE_SETUP
- #line 581 "dhcp6_lexer.ll"
 -#line 578 "dhcp6_lexer.ll"
++#line 582 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 55:
  YY_RULE_SETUP
- #line 591 "dhcp6_lexer.ll"
 -#line 588 "dhcp6_lexer.ll"
++#line 592 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
        YY_BREAK
  case 56:
  YY_RULE_SETUP
- #line 601 "dhcp6_lexer.ll"
 -#line 598 "dhcp6_lexer.ll"
++#line 602 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 57:
  YY_RULE_SETUP
- #line 611 "dhcp6_lexer.ll"
 -#line 609 "dhcp6_lexer.ll"
++#line 613 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 58:
  YY_RULE_SETUP
- #line 621 "dhcp6_lexer.ll"
 -#line 620 "dhcp6_lexer.ll"
++#line 624 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 59:
  YY_RULE_SETUP
--#line 631 "dhcp6_lexer.ll"
++#line 635 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 60:
  YY_RULE_SETUP
- #line 641 "dhcp6_lexer.ll"
 -#line 642 "dhcp6_lexer.ll"
++#line 646 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 61:
  YY_RULE_SETUP
- #line 650 "dhcp6_lexer.ll"
 -#line 651 "dhcp6_lexer.ll"
++#line 655 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
        YY_BREAK
  case 62:
  YY_RULE_SETUP
- #line 659 "dhcp6_lexer.ll"
 -#line 661 "dhcp6_lexer.ll"
++#line 665 "dhcp6_lexer.ll"
+ {
+     switch (driver.ctx_) {
+     case Parser6Context::DHCP6:
+         return Dhcp6Parser::make_SHARED_NETWORKS(driver.loc_);
+     default:
+         return Dhcp6Parser::make_STRING("shared-networks", driver.loc_);
+     }
+ }
+       YY_BREAK
+ case 63:
+ YY_RULE_SETUP
 -#line 670 "dhcp6_lexer.ll"
++#line 674 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 63:
+ case 64:
  YY_RULE_SETUP
- #line 668 "dhcp6_lexer.ll"
 -#line 679 "dhcp6_lexer.ll"
++#line 683 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 64:
+ case 65:
  YY_RULE_SETUP
- #line 683 "dhcp6_lexer.ll"
 -#line 695 "dhcp6_lexer.ll"
++#line 699 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LEASE_DATABASE:
      }
  }
        YY_BREAK
- case 65:
+ case 66:
  YY_RULE_SETUP
- #line 698 "dhcp6_lexer.ll"
 -#line 711 "dhcp6_lexer.ll"
++#line 715 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 66:
+ case 67:
  YY_RULE_SETUP
- #line 707 "dhcp6_lexer.ll"
 -#line 720 "dhcp6_lexer.ll"
++#line 724 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 67:
+ case 68:
  YY_RULE_SETUP
- #line 716 "dhcp6_lexer.ll"
 -#line 729 "dhcp6_lexer.ll"
++#line 733 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 68:
+ case 69:
  YY_RULE_SETUP
- #line 725 "dhcp6_lexer.ll"
 -#line 738 "dhcp6_lexer.ll"
++#line 742 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 69:
+ case 70:
  YY_RULE_SETUP
- #line 734 "dhcp6_lexer.ll"
 -#line 747 "dhcp6_lexer.ll"
++#line 751 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::PD_POOLS:
      }
  }
        YY_BREAK
- case 70:
+ case 71:
  YY_RULE_SETUP
- #line 743 "dhcp6_lexer.ll"
 -#line 756 "dhcp6_lexer.ll"
++#line 760 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::PD_POOLS:
      }
  }
        YY_BREAK
- case 71:
+ case 72:
  YY_RULE_SETUP
- #line 752 "dhcp6_lexer.ll"
 -#line 765 "dhcp6_lexer.ll"
++#line 769 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::PD_POOLS:
      }
  }
        YY_BREAK
- case 72:
+ case 73:
  YY_RULE_SETUP
- #line 761 "dhcp6_lexer.ll"
 -#line 774 "dhcp6_lexer.ll"
++#line 778 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::PD_POOLS:
      }
  }
        YY_BREAK
- case 73:
+ case 74:
  YY_RULE_SETUP
- #line 770 "dhcp6_lexer.ll"
 -#line 783 "dhcp6_lexer.ll"
++#line 787 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::PD_POOLS:
      }
  }
        YY_BREAK
- case 74:
+ case 75:
  YY_RULE_SETUP
- #line 779 "dhcp6_lexer.ll"
 -#line 792 "dhcp6_lexer.ll"
++#line 796 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::POOLS:
      }
  }
        YY_BREAK
- case 75:
+ case 76:
  YY_RULE_SETUP
- #line 788 "dhcp6_lexer.ll"
 -#line 801 "dhcp6_lexer.ll"
++#line 805 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::POOLS:
      }
  }
        YY_BREAK
- case 76:
+ case 77:
  YY_RULE_SETUP
- #line 799 "dhcp6_lexer.ll"
 -#line 811 "dhcp6_lexer.ll"
++#line 816 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 77:
+ case 78:
  YY_RULE_SETUP
- #line 808 "dhcp6_lexer.ll"
 -#line 820 "dhcp6_lexer.ll"
++#line 825 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 78:
+ case 79:
  YY_RULE_SETUP
- #line 817 "dhcp6_lexer.ll"
 -#line 830 "dhcp6_lexer.ll"
++#line 835 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 79:
+ case 80:
  YY_RULE_SETUP
- #line 826 "dhcp6_lexer.ll"
 -#line 840 "dhcp6_lexer.ll"
++#line 845 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 80:
+ case 81:
  YY_RULE_SETUP
- #line 835 "dhcp6_lexer.ll"
 -#line 849 "dhcp6_lexer.ll"
++#line 854 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 81:
+ case 82:
  YY_RULE_SETUP
- #line 844 "dhcp6_lexer.ll"
 -#line 859 "dhcp6_lexer.ll"
++#line 864 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 82:
+ case 83:
  YY_RULE_SETUP
- #line 853 "dhcp6_lexer.ll"
 -#line 869 "dhcp6_lexer.ll"
++#line 874 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 83:
+ case 84:
  YY_RULE_SETUP
- #line 862 "dhcp6_lexer.ll"
 -#line 878 "dhcp6_lexer.ll"
++#line 883 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 84:
+ case 85:
  YY_RULE_SETUP
- #line 871 "dhcp6_lexer.ll"
 -#line 887 "dhcp6_lexer.ll"
++#line 892 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 85:
+ case 86:
  YY_RULE_SETUP
- #line 880 "dhcp6_lexer.ll"
 -#line 896 "dhcp6_lexer.ll"
++#line 901 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATION_MODE:
      }
  }
        YY_BREAK
- case 86:
+ case 87:
  YY_RULE_SETUP
- #line 889 "dhcp6_lexer.ll"
 -#line 905 "dhcp6_lexer.ll"
++#line 910 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 87:
+ case 88:
  YY_RULE_SETUP
- #line 899 "dhcp6_lexer.ll"
 -#line 915 "dhcp6_lexer.ll"
++#line 920 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 88:
+ case 89:
  YY_RULE_SETUP
- #line 908 "dhcp6_lexer.ll"
 -#line 924 "dhcp6_lexer.ll"
++#line 929 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 89:
+ case 90:
  YY_RULE_SETUP
- #line 917 "dhcp6_lexer.ll"
 -#line 933 "dhcp6_lexer.ll"
++#line 938 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 90:
+ case 91:
  YY_RULE_SETUP
- #line 926 "dhcp6_lexer.ll"
 -#line 942 "dhcp6_lexer.ll"
++#line 947 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONFIG:
      }
  }
        YY_BREAK
- case 91:
+ case 92:
  YY_RULE_SETUP
- #line 935 "dhcp6_lexer.ll"
 -#line 951 "dhcp6_lexer.ll"
++#line 956 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LOGGING:
      }
  }
        YY_BREAK
- case 92:
+ case 93:
  YY_RULE_SETUP
- #line 944 "dhcp6_lexer.ll"
 -#line 960 "dhcp6_lexer.ll"
++#line 965 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LOGGERS:
      }
  }
        YY_BREAK
- case 93:
+ case 94:
  YY_RULE_SETUP
- #line 953 "dhcp6_lexer.ll"
 -#line 969 "dhcp6_lexer.ll"
++#line 974 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 94:
+ case 95:
  YY_RULE_SETUP
- #line 962 "dhcp6_lexer.ll"
 -#line 978 "dhcp6_lexer.ll"
++#line 983 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 95:
+ case 96:
  YY_RULE_SETUP
- #line 971 "dhcp6_lexer.ll"
 -#line 987 "dhcp6_lexer.ll"
++#line 992 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 96:
+ case 97:
  YY_RULE_SETUP
- #line 980 "dhcp6_lexer.ll"
 -#line 996 "dhcp6_lexer.ll"
++#line 1001 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
      }
  }
        YY_BREAK
- case 97:
+ case 98:
  YY_RULE_SETUP
- #line 990 "dhcp6_lexer.ll"
 -#line 1006 "dhcp6_lexer.ll"
++#line 1011 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LOGGERS:
      }
  }
        YY_BREAK
- case 98:
+ case 99:
  YY_RULE_SETUP
- #line 999 "dhcp6_lexer.ll"
 -#line 1015 "dhcp6_lexer.ll"
++#line 1020 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::LOGGERS:
      }
  }
        YY_BREAK
- case 99:
+ case 100:
  YY_RULE_SETUP
- #line 1008 "dhcp6_lexer.ll"
 -#line 1024 "dhcp6_lexer.ll"
++#line 1029 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 100:
+ case 101:
  YY_RULE_SETUP
- #line 1018 "dhcp6_lexer.ll"
 -#line 1034 "dhcp6_lexer.ll"
++#line 1039 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 101:
+ case 102:
  YY_RULE_SETUP
- #line 1028 "dhcp6_lexer.ll"
 -#line 1044 "dhcp6_lexer.ll"
++#line 1049 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CLIENT_CLASSES:
      }
  }
        YY_BREAK
- case 102:
+ case 103:
  YY_RULE_SETUP
- #line 1038 "dhcp6_lexer.ll"
 -#line 1054 "dhcp6_lexer.ll"
++#line 1059 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 103:
+ case 104:
  YY_RULE_SETUP
- #line 1047 "dhcp6_lexer.ll"
 -#line 1063 "dhcp6_lexer.ll"
++#line 1068 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATIONS:
      }
  }
        YY_BREAK
- case 104:
+ case 105:
  YY_RULE_SETUP
- #line 1056 "dhcp6_lexer.ll"
 -#line 1072 "dhcp6_lexer.ll"
++#line 1077 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATIONS:
      }
  }
        YY_BREAK
- case 105:
+ case 106:
  YY_RULE_SETUP
- #line 1065 "dhcp6_lexer.ll"
 -#line 1081 "dhcp6_lexer.ll"
++#line 1086 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::MAC_SOURCES:
      }
  }
        YY_BREAK
- case 106:
+ case 107:
  YY_RULE_SETUP
- #line 1076 "dhcp6_lexer.ll"
 -#line 1092 "dhcp6_lexer.ll"
++#line 1097 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 107:
+ case 108:
  YY_RULE_SETUP
- #line 1086 "dhcp6_lexer.ll"
 -#line 1102 "dhcp6_lexer.ll"
++#line 1107 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RESERVATIONS:
      }
  }
        YY_BREAK
- case 108:
+ case 109:
  YY_RULE_SETUP
- #line 1095 "dhcp6_lexer.ll"
 -#line 1111 "dhcp6_lexer.ll"
++#line 1116 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
      }
  }
        YY_BREAK
- case 109:
+ case 110:
  YY_RULE_SETUP
- #line 1105 "dhcp6_lexer.ll"
 -#line 1121 "dhcp6_lexer.ll"
++#line 1126 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 110:
+ case 111:
  YY_RULE_SETUP
- #line 1115 "dhcp6_lexer.ll"
 -#line 1131 "dhcp6_lexer.ll"
++#line 1136 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DATA:
      }
  }
        YY_BREAK
- case 111:
+ case 112:
  YY_RULE_SETUP
- #line 1124 "dhcp6_lexer.ll"
 -#line 1140 "dhcp6_lexer.ll"
++#line 1145 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 112:
+ case 113:
  YY_RULE_SETUP
- #line 1133 "dhcp6_lexer.ll"
 -#line 1149 "dhcp6_lexer.ll"
++#line 1154 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 113:
+ case 114:
  YY_RULE_SETUP
- #line 1142 "dhcp6_lexer.ll"
 -#line 1158 "dhcp6_lexer.ll"
++#line 1163 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::OPTION_DEF:
      }
  }
        YY_BREAK
- case 114:
+ case 115:
  YY_RULE_SETUP
- #line 1151 "dhcp6_lexer.ll"
 -#line 1167 "dhcp6_lexer.ll"
++#line 1172 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SUBNET6:
      }
  }
        YY_BREAK
- case 115:
+ case 116:
  YY_RULE_SETUP
- #line 1160 "dhcp6_lexer.ll"
 -#line 1177 "dhcp6_lexer.ll"
++#line 1182 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::RELAY:
      }
  }
        YY_BREAK
- case 116:
+ case 117:
  YY_RULE_SETUP
- #line 1169 "dhcp6_lexer.ll"
 -#line 1186 "dhcp6_lexer.ll"
++#line 1191 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 117:
+ case 118:
  YY_RULE_SETUP
- #line 1179 "dhcp6_lexer.ll"
 -#line 1196 "dhcp6_lexer.ll"
++#line 1201 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
      }
  }
        YY_BREAK
- case 118:
+ case 119:
  YY_RULE_SETUP
- #line 1188 "dhcp6_lexer.ll"
 -#line 1205 "dhcp6_lexer.ll"
++#line 1210 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
      }
  }
        YY_BREAK
- case 119:
+ case 120:
  YY_RULE_SETUP
- #line 1197 "dhcp6_lexer.ll"
 -#line 1214 "dhcp6_lexer.ll"
++#line 1219 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 120:
+ case 121:
  YY_RULE_SETUP
- #line 1206 "dhcp6_lexer.ll"
 -#line 1223 "dhcp6_lexer.ll"
++#line 1228 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DUID_TYPE:
      }
  }
        YY_BREAK
- case 121:
+ case 122:
  YY_RULE_SETUP
- #line 1215 "dhcp6_lexer.ll"
 -#line 1232 "dhcp6_lexer.ll"
++#line 1237 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DUID_TYPE:
      }
  }
        YY_BREAK
- case 122:
+ case 123:
  YY_RULE_SETUP
- #line 1224 "dhcp6_lexer.ll"
 -#line 1241 "dhcp6_lexer.ll"
++#line 1246 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DUID_TYPE:
      }
  }
        YY_BREAK
- case 123:
+ case 124:
  YY_RULE_SETUP
- #line 1233 "dhcp6_lexer.ll"
 -#line 1250 "dhcp6_lexer.ll"
++#line 1255 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SERVER_ID:
      }
  }
        YY_BREAK
- case 124:
+ case 125:
  YY_RULE_SETUP
- #line 1242 "dhcp6_lexer.ll"
 -#line 1259 "dhcp6_lexer.ll"
++#line 1264 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SERVER_ID:
      }
  }
        YY_BREAK
- case 125:
+ case 126:
  YY_RULE_SETUP
- #line 1251 "dhcp6_lexer.ll"
 -#line 1268 "dhcp6_lexer.ll"
++#line 1273 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SERVER_ID:
      }
  }
        YY_BREAK
- case 126:
+ case 127:
  YY_RULE_SETUP
- #line 1260 "dhcp6_lexer.ll"
 -#line 1277 "dhcp6_lexer.ll"
++#line 1282 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::SERVER_ID:
      }
  }
        YY_BREAK
- case 127:
+ case 128:
  YY_RULE_SETUP
- #line 1269 "dhcp6_lexer.ll"
 -#line 1286 "dhcp6_lexer.ll"
++#line 1291 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 128:
+ case 129:
  YY_RULE_SETUP
- #line 1278 "dhcp6_lexer.ll"
 -#line 1295 "dhcp6_lexer.ll"
++#line 1300 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 129:
+ case 130:
  YY_RULE_SETUP
- #line 1287 "dhcp6_lexer.ll"
 -#line 1304 "dhcp6_lexer.ll"
++#line 1309 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 130:
+ case 131:
  YY_RULE_SETUP
- #line 1296 "dhcp6_lexer.ll"
 -#line 1313 "dhcp6_lexer.ll"
++#line 1318 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 131:
+ case 132:
  YY_RULE_SETUP
- #line 1305 "dhcp6_lexer.ll"
 -#line 1322 "dhcp6_lexer.ll"
++#line 1327 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 132:
+ case 133:
  YY_RULE_SETUP
- #line 1314 "dhcp6_lexer.ll"
 -#line 1331 "dhcp6_lexer.ll"
++#line 1336 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 133:
+ case 134:
  YY_RULE_SETUP
- #line 1323 "dhcp6_lexer.ll"
 -#line 1340 "dhcp6_lexer.ll"
++#line 1345 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
      }
  }
        YY_BREAK
- case 134:
+ case 135:
  YY_RULE_SETUP
- #line 1332 "dhcp6_lexer.ll"
 -#line 1349 "dhcp6_lexer.ll"
++#line 1354 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 135:
+ case 136:
  YY_RULE_SETUP
- #line 1341 "dhcp6_lexer.ll"
 -#line 1358 "dhcp6_lexer.ll"
++#line 1363 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 136:
+ case 137:
  YY_RULE_SETUP
- #line 1350 "dhcp6_lexer.ll"
 -#line 1367 "dhcp6_lexer.ll"
++#line 1372 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONTROL_SOCKET:
      }
  }
        YY_BREAK
- case 137:
+ case 138:
  YY_RULE_SETUP
- #line 1359 "dhcp6_lexer.ll"
 -#line 1376 "dhcp6_lexer.ll"
++#line 1381 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONTROL_SOCKET:
      }
  }
        YY_BREAK
- case 138:
+ case 139:
  YY_RULE_SETUP
- #line 1368 "dhcp6_lexer.ll"
 -#line 1385 "dhcp6_lexer.ll"
++#line 1390 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::DHCP6:
      }
  }
        YY_BREAK
- case 139:
+ case 140:
  YY_RULE_SETUP
- #line 1377 "dhcp6_lexer.ll"
 -#line 1394 "dhcp6_lexer.ll"
++#line 1399 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONFIG:
      }
  }
        YY_BREAK
- case 140:
+ case 141:
  YY_RULE_SETUP
- #line 1386 "dhcp6_lexer.ll"
 -#line 1403 "dhcp6_lexer.ll"
++#line 1408 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONFIG:
      }
  }
        YY_BREAK
- case 141:
+ case 142:
  YY_RULE_SETUP
- #line 1395 "dhcp6_lexer.ll"
 -#line 1412 "dhcp6_lexer.ll"
++#line 1417 "dhcp6_lexer.ll"
  {
      switch(driver.ctx_) {
      case isc::dhcp::Parser6Context::CONFIG:
      }
  }
        YY_BREAK
- case 142:
+ case 143:
  YY_RULE_SETUP
- #line 1405 "dhcp6_lexer.ll"
 -#line 1422 "dhcp6_lexer.ll"
++#line 1427 "dhcp6_lexer.ll"
  {
      /* A string has been matched. It contains the actual string and single quotes.
         We need to get those quotes out of the way and just use its content, e.g.
      return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
  }
        YY_BREAK
- case 143:
- /* rule 143 can match eol */
+ case 144:
+ /* rule 144 can match eol */
  YY_RULE_SETUP
- #line 1503 "dhcp6_lexer.ll"
 -#line 1520 "dhcp6_lexer.ll"
++#line 1525 "dhcp6_lexer.ll"
  {
      /* Bad string with a forbidden control character inside */
-     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+     driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
  }
        YY_BREAK
- case 144:
- /* rule 144 can match eol */
+ case 145:
+ /* rule 145 can match eol */
  YY_RULE_SETUP
- #line 1508 "dhcp6_lexer.ll"
 -#line 1525 "dhcp6_lexer.ll"
++#line 1530 "dhcp6_lexer.ll"
  {
      /* Bad string with a bad escape inside */
-     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+     driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
  }
        YY_BREAK
- case 145:
+ case 146:
  YY_RULE_SETUP
- #line 1513 "dhcp6_lexer.ll"
 -#line 1530 "dhcp6_lexer.ll"
++#line 1535 "dhcp6_lexer.ll"
  {
      /* Bad string with an open escape at the end */
-     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+     driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
  }
        YY_BREAK
- case 146:
+ case 147:
  YY_RULE_SETUP
- #line 1518 "dhcp6_lexer.ll"
 -#line 1535 "dhcp6_lexer.ll"
++#line 1540 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
- case 147:
+ case 148:
  YY_RULE_SETUP
- #line 1519 "dhcp6_lexer.ll"
 -#line 1536 "dhcp6_lexer.ll"
++#line 1541 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
- case 148:
+ case 149:
  YY_RULE_SETUP
- #line 1520 "dhcp6_lexer.ll"
 -#line 1537 "dhcp6_lexer.ll"
++#line 1542 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
- case 149:
+ case 150:
  YY_RULE_SETUP
- #line 1521 "dhcp6_lexer.ll"
 -#line 1538 "dhcp6_lexer.ll"
++#line 1543 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
- case 150:
+ case 151:
  YY_RULE_SETUP
- #line 1522 "dhcp6_lexer.ll"
 -#line 1539 "dhcp6_lexer.ll"
++#line 1544 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
- case 151:
+ case 152:
  YY_RULE_SETUP
- #line 1523 "dhcp6_lexer.ll"
 -#line 1540 "dhcp6_lexer.ll"
++#line 1545 "dhcp6_lexer.ll"
  { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
- case 152:
+ case 153:
  YY_RULE_SETUP
- #line 1525 "dhcp6_lexer.ll"
 -#line 1542 "dhcp6_lexer.ll"
++#line 1547 "dhcp6_lexer.ll"
  {
      /* An integer was found. */
-     std::string tmp(yytext);
+     std::string tmp(parser6_text);
      int64_t integer = 0;
      try {
          /* In substring we want to use negative values (e.g. -1).
      return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
  }
        YY_BREAK
- case 153:
+ case 154:
  YY_RULE_SETUP
- #line 1543 "dhcp6_lexer.ll"
 -#line 1560 "dhcp6_lexer.ll"
++#line 1565 "dhcp6_lexer.ll"
  {
      /* A floating point was found. */
-     std::string tmp(yytext);
+     std::string tmp(parser6_text);
      double fp = 0.0;
      try {
          fp = boost::lexical_cast<double>(tmp);
      return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
  }
        YY_BREAK
- case 154:
+ case 155:
  YY_RULE_SETUP
- #line 1556 "dhcp6_lexer.ll"
 -#line 1573 "dhcp6_lexer.ll"
++#line 1578 "dhcp6_lexer.ll"
  {
-     string tmp(yytext);
+     string tmp(parser6_text);
      return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
  }
        YY_BREAK
- case 155:
+ case 156:
  YY_RULE_SETUP
- #line 1561 "dhcp6_lexer.ll"
 -#line 1578 "dhcp6_lexer.ll"
++#line 1583 "dhcp6_lexer.ll"
  {
     return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
  }
        YY_BREAK
- case 156:
+ case 157:
  YY_RULE_SETUP
- #line 1565 "dhcp6_lexer.ll"
 -#line 1582 "dhcp6_lexer.ll"
++#line 1587 "dhcp6_lexer.ll"
  driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
- case 157:
+ case 158:
  YY_RULE_SETUP
- #line 1567 "dhcp6_lexer.ll"
 -#line 1584 "dhcp6_lexer.ll"
++#line 1589 "dhcp6_lexer.ll"
  driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
- case 158:
+ case 159:
  YY_RULE_SETUP
- #line 1569 "dhcp6_lexer.ll"
 -#line 1586 "dhcp6_lexer.ll"
++#line 1591 "dhcp6_lexer.ll"
  driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
- case 159:
+ case 160:
  YY_RULE_SETUP
- #line 1571 "dhcp6_lexer.ll"
- driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
 -#line 1588 "dhcp6_lexer.ll"
++#line 1593 "dhcp6_lexer.ll"
+ driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
  case YY_STATE_EOF(INITIAL):
- #line 1573 "dhcp6_lexer.ll"
 -#line 1590 "dhcp6_lexer.ll"
++#line 1595 "dhcp6_lexer.ll"
  {
      if (driver.states_.empty()) {
          return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
      BEGIN(DIR_EXIT);
  }
        YY_BREAK
- case 160:
+ case 161:
  YY_RULE_SETUP
- #line 1596 "dhcp6_lexer.ll"
 -#line 1613 "dhcp6_lexer.ll"
++#line 1618 "dhcp6_lexer.ll"
  ECHO;
        YY_BREAK
- #line 4010 "dhcp6_lexer.cc"
 -#line 3819 "dhcp6_lexer.cc"
++#line 3824 "dhcp6_lexer.cc"
  
        case YY_END_OF_BUFFER:
                {
@@@ -5112,7 -4918,8 +4923,8 @@@ void parser6_free (void * ptr 
  
  /* %ok-for-header */
  
- #line 1596 "dhcp6_lexer.ll"
 -#line 1613 "dhcp6_lexer.ll"
++#line 1618 "dhcp6_lexer.ll"
  
  
  using namespace isc::dhcp;
Simple merge
index d549b487d1059144ab47f40cffd88380c2e784f6,250024122794e2f16a7ce0c35560ad28272cfd27..71e66bc3f7b8efb663d01549a452ef9d687084c0
@@@ -253,29 -253,29 +253,29 @@@ namespace isc { namespace dhcp 
    {
        switch (that.type_get ())
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.move< ElementPtr > (that.value);
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.move< bool > (that.value);
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.move< double > (that.value);
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.move< int64_t > (that.value);
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.move< std::string > (that.value);
          break;
  
      state = that.state;
        switch (that.type_get ())
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.copy< ElementPtr > (that.value);
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.copy< bool > (that.value);
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.copy< double > (that.value);
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.copy< int64_t > (that.value);
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.copy< std::string > (that.value);
          break;
  
          << yysym.location << ": ";
      switch (yytype)
      {
--            case 150: // "constant string"
++            case 151: // "constant string"
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< std::string > (); }
  #line 364 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< int64_t > (); }
  #line 371 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< double > (); }
  #line 378 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< bool > (); }
  #line 385 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 169: // value
 -      case 168: // value
++      case 170: // value
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 392 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 173: // map_value
 -      case 172: // map_value
++      case 174: // map_value
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 399 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 217: // db_type
 -      case 216: // db_type
++      case 218: // db_type
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 406 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 293: // hr_mode
 -      case 292: // hr_mode
++      case 294: // hr_mode
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 413 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 416: // duid_type
 -      case 421: // duid_type
++      case 425: // duid_type
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 420 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 449: // ncr_protocol_value
 -      case 454: // ncr_protocol_value
++      case 458: // ncr_protocol_value
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 427 "dhcp6_parser.cc" // lalr1.cc:636
          break;
  
-       case 457: // replace_client_name_value
 -      case 462: // replace_client_name_value
++      case 466: // replace_client_name_value
  
--#line 226 "dhcp6_parser.yy" // lalr1.cc:636
++#line 227 "dhcp6_parser.yy" // lalr1.cc:636
          { yyoutput << yysym.value.template as< ElementPtr > (); }
  #line 434 "dhcp6_parser.cc" // lalr1.cc:636
          break;
           when using variants.  */
          switch (yyr1_[yyn])
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          yylhs.value.build< ElementPtr > ();
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          yylhs.value.build< bool > ();
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          yylhs.value.build< double > ();
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          yylhs.value.build< int64_t > ();
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          yylhs.value.build< std::string > ();
          break;
  
            switch (yyn)
              {
    case 2:
--#line 235 "dhcp6_parser.yy" // lalr1.cc:859
++#line 236 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.NO_KEYWORD; }
  #line 680 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 4:
--#line 236 "dhcp6_parser.yy" // lalr1.cc:859
++#line 237 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.CONFIG; }
  #line 686 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 6:
--#line 237 "dhcp6_parser.yy" // lalr1.cc:859
++#line 238 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.DHCP6; }
  #line 692 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 8:
--#line 238 "dhcp6_parser.yy" // lalr1.cc:859
++#line 239 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
  #line 698 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 10:
--#line 239 "dhcp6_parser.yy" // lalr1.cc:859
++#line 240 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.SUBNET6; }
  #line 704 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 12:
--#line 240 "dhcp6_parser.yy" // lalr1.cc:859
++#line 241 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.POOLS; }
  #line 710 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 14:
--#line 241 "dhcp6_parser.yy" // lalr1.cc:859
++#line 242 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.PD_POOLS; }
  #line 716 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 16:
--#line 242 "dhcp6_parser.yy" // lalr1.cc:859
++#line 243 "dhcp6_parser.yy" // lalr1.cc:859
      { ctx.ctx_ = ctx.RESERVATIONS; }
  #line 722 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 18:
--#line 243 "dhcp6_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.OPTION_DEF; }
++#line 244 "dhcp6_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.DHCP6; }
  #line 728 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 20:
--#line 244 "dhcp6_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.OPTION_DATA; }
++#line 245 "dhcp6_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.OPTION_DEF; }
  #line 734 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 22:
--#line 245 "dhcp6_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
++#line 246 "dhcp6_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.OPTION_DATA; }
  #line 740 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 24:
--#line 246 "dhcp6_parser.yy" // lalr1.cc:859
 -    { ctx.ctx_ = ctx.DHCP_DDNS; }
++#line 247 "dhcp6_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
  #line 746 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 26:
- #line 247 "dhcp6_parser.yy" // lalr1.cc:859
 -#line 254 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
++#line 248 "dhcp6_parser.yy" // lalr1.cc:859
 +    { ctx.ctx_ = ctx.DHCP_DDNS; }
  #line 752 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 27:
 -#line 255 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 758 "dhcp6_parser.cc" // lalr1.cc:859
 -    break;
 -
    case 28:
- #line 255 "dhcp6_parser.yy" // lalr1.cc:859
+ #line 256 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 764 "dhcp6_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 758 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 29:
- #line 256 "dhcp6_parser.yy" // lalr1.cc:859
+ #line 257 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 -#line 770 "dhcp6_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 764 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 30:
- #line 257 "dhcp6_parser.yy" // lalr1.cc:859
+ #line 258 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 -#line 776 "dhcp6_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 770 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 31:
- #line 258 "dhcp6_parser.yy" // lalr1.cc:859
+ #line 259 "dhcp6_parser.yy" // lalr1.cc:859
 -    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 -#line 782 "dhcp6_parser.cc" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 +#line 776 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
    case 32:
- #line 259 "dhcp6_parser.yy" // lalr1.cc:859
+ #line 260 "dhcp6_parser.yy" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 +#line 782 "dhcp6_parser.cc" // lalr1.cc:859
 +    break;
 +
 +  case 33:
- #line 260 "dhcp6_parser.yy" // lalr1.cc:859
++#line 261 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
  #line 788 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 33:
 -#line 263 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 34:
- #line 261 "dhcp6_parser.yy" // lalr1.cc:859
++#line 262 "dhcp6_parser.yy" // lalr1.cc:859
 +    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 +#line 794 "dhcp6_parser.cc" // lalr1.cc:859
 +    break;
 +
 +  case 35:
- #line 264 "dhcp6_parser.yy" // lalr1.cc:859
++#line 265 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Push back the JSON value on the stack
      ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
  }
 -#line 797 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 803 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 34:
 -#line 268 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 36:
- #line 269 "dhcp6_parser.yy" // lalr1.cc:859
++#line 270 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 808 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 814 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 35:
 -#line 273 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 37:
- #line 274 "dhcp6_parser.yy" // lalr1.cc:859
++#line 275 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // map parsing completed. If we ever want to do any wrap up
      // (maybe some sanity checking), this would be the best place
      // for it.
  }
 -#line 818 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 824 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 36:
 -#line 279 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 38:
- #line 280 "dhcp6_parser.yy" // lalr1.cc:859
++#line 281 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 -#line 824 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 830 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 39:
 -#line 286 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 41:
- #line 287 "dhcp6_parser.yy" // lalr1.cc:859
++#line 288 "dhcp6_parser.yy" // lalr1.cc:859
      {
                    // map containing a single entry
                    ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 833 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 839 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 40:
 -#line 290 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 42:
- #line 291 "dhcp6_parser.yy" // lalr1.cc:859
++#line 292 "dhcp6_parser.yy" // lalr1.cc:859
      {
                    // map consisting of a shorter map followed by
                    // comma and string:value
                    ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 843 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 849 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 41:
 -#line 297 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 43:
- #line 298 "dhcp6_parser.yy" // lalr1.cc:859
++#line 299 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(l);
  }
 -#line 852 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 858 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 42:
 -#line 300 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 44:
- #line 301 "dhcp6_parser.yy" // lalr1.cc:859
++#line 302 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // list parsing complete. Put any sanity checking here
  }
 -#line 860 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 866 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 45:
 -#line 308 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 47:
- #line 309 "dhcp6_parser.yy" // lalr1.cc:859
++#line 310 "dhcp6_parser.yy" // lalr1.cc:859
      {
                    // List consisting of a single element.
                    ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 869 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 875 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 46:
 -#line 312 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 48:
- #line 313 "dhcp6_parser.yy" // lalr1.cc:859
++#line 314 "dhcp6_parser.yy" // lalr1.cc:859
      {
                    // List ending with , and a value.
                    ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                    }
 -#line 878 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 884 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 47:
 -#line 319 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 49:
- #line 320 "dhcp6_parser.yy" // lalr1.cc:859
++#line 321 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // List parsing about to start
  }
 -#line 886 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 892 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 48:
 -#line 321 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 50:
- #line 322 "dhcp6_parser.yy" // lalr1.cc:859
++#line 323 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // list parsing complete. Put any sanity checking here
      //ctx.stack_.pop_back();
  }
 -#line 895 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 901 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 51:
 -#line 330 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 53:
- #line 331 "dhcp6_parser.yy" // lalr1.cc:859
++#line 332 "dhcp6_parser.yy" // lalr1.cc:859
      {
                            ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                            ctx.stack_.back()->add(s);
                            }
 -#line 904 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 910 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 52:
 -#line 334 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 54:
- #line 335 "dhcp6_parser.yy" // lalr1.cc:859
++#line 336 "dhcp6_parser.yy" // lalr1.cc:859
      {
                            ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                            ctx.stack_.back()->add(s);
                            }
 -#line 913 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 919 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 53:
 -#line 345 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 55:
- #line 346 "dhcp6_parser.yy" // lalr1.cc:859
++#line 347 "dhcp6_parser.yy" // lalr1.cc:859
      {
      const std::string& where = ctx.contextName();
      const std::string& keyword = yystack_[1].value.as< std::string > ();
      error(yystack_[1].location,
            "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
  }
 -#line 924 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 930 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 54:
 -#line 355 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 56:
- #line 356 "dhcp6_parser.yy" // lalr1.cc:859
++#line 357 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 935 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 941 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 55:
 -#line 360 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 57:
- #line 361 "dhcp6_parser.yy" // lalr1.cc:859
++#line 362 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // map parsing completed. If we ever want to do any wrap up
      // (maybe some sanity checking), this would be the best place
      // for it.
 +
 +    // Dhcp6 is required
 +    ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
  }
 -#line 945 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 954 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 64:
 -#line 380 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 66:
- #line 384 "dhcp6_parser.yy" // lalr1.cc:859
++#line 385 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // This code is executed when we're about to start parsing
      // the content of the map
      ctx.stack_.push_back(m);
      ctx.enter(ctx.DHCP6);
  }
 -#line 958 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 967 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 65:
 -#line 387 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 67:
- #line 391 "dhcp6_parser.yy" // lalr1.cc:859
++#line 392 "dhcp6_parser.yy" // lalr1.cc:859
      {
 -    // map parsing completed. If we ever want to do any wrap up
 -    // (maybe some sanity checking), this would be the best place
 -    // for it.
 +    // No global parameter is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 970 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 977 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 66:
 -#line 397 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 68:
- #line 399 "dhcp6_parser.yy" // lalr1.cc:859
++#line 400 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the Dhcp6 map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 980 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 987 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
 -  case 67:
 -#line 401 "dhcp6_parser.yy" // lalr1.cc:859
 +  case 69:
- #line 403 "dhcp6_parser.yy" // lalr1.cc:859
++#line 404 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // No global parameter is required
      // parsing completed
  }
 -#line 988 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 996 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 94:
- #line 438 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 93:
 -#line 436 "dhcp6_parser.yy" // lalr1.cc:859
++  case 95:
++#line 440 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("preferred-lifetime", prf);
  }
 -#line 997 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1005 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 95:
- #line 443 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 94:
 -#line 441 "dhcp6_parser.yy" // lalr1.cc:859
++  case 96:
++#line 445 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("valid-lifetime", prf);
  }
 -#line 1006 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1014 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 96:
- #line 448 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 95:
 -#line 446 "dhcp6_parser.yy" // lalr1.cc:859
++  case 97:
++#line 450 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("renew-timer", prf);
  }
 -#line 1015 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1023 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 97:
- #line 453 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 96:
 -#line 451 "dhcp6_parser.yy" // lalr1.cc:859
++  case 98:
++#line 455 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("rebind-timer", prf);
  }
 -#line 1024 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1032 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 98:
- #line 458 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 97:
 -#line 456 "dhcp6_parser.yy" // lalr1.cc:859
++  case 99:
++#line 460 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("decline-probation-period", dpp);
  }
 -#line 1033 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1041 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 99:
- #line 463 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 98:
 -#line 461 "dhcp6_parser.yy" // lalr1.cc:859
++  case 100:
++#line 465 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interfaces-config", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.INTERFACES_CONFIG);
  }
 -#line 1044 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1052 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 100:
- #line 468 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 99:
 -#line 466 "dhcp6_parser.yy" // lalr1.cc:859
++  case 101:
++#line 470 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // No interfaces config param is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1053 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1062 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 101:
- #line 474 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 100:
 -#line 471 "dhcp6_parser.yy" // lalr1.cc:859
++  case 102:
++#line 476 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the interfaces-config map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1063 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1072 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 102:
- #line 478 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 101:
 -#line 475 "dhcp6_parser.yy" // lalr1.cc:859
++  case 103:
++#line 480 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // No interfaces config param is required
      // parsing completed
  }
 -#line 1071 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1081 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 107:
- #line 491 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 106:
 -#line 487 "dhcp6_parser.yy" // lalr1.cc:859
++  case 108:
++#line 493 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interfaces", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1082 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1092 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 108:
- #line 496 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 107:
 -#line 492 "dhcp6_parser.yy" // lalr1.cc:859
++  case 109:
++#line 498 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1091 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1101 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 109:
- #line 501 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 108:
 -#line 497 "dhcp6_parser.yy" // lalr1.cc:859
++  case 110:
++#line 503 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("re-detect", b);
  }
 -#line 1100 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1110 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 110:
- #line 507 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 109:
 -#line 503 "dhcp6_parser.yy" // lalr1.cc:859
++  case 111:
++#line 509 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("lease-database", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.LEASE_DATABASE);
  }
 -#line 1111 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1121 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 111:
- #line 512 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 110:
 -#line 508 "dhcp6_parser.yy" // lalr1.cc:859
++  case 112:
++#line 514 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The type parameter is required
 +    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1120 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1132 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 112:
- #line 519 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 111:
 -#line 513 "dhcp6_parser.yy" // lalr1.cc:859
++  case 113:
++#line 521 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hosts-database", i);
      ctx.stack_.push_back(i);
      ctx.enter(ctx.HOSTS_DATABASE);
  }
 -#line 1131 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1143 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 113:
- #line 524 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 112:
 -#line 518 "dhcp6_parser.yy" // lalr1.cc:859
++  case 114:
++#line 526 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The type parameter is required
 +    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1140 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1154 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 129:
- #line 550 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 128:
 -#line 542 "dhcp6_parser.yy" // lalr1.cc:859
++  case 130:
++#line 552 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.DATABASE_TYPE);
  }
 -#line 1148 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1162 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 130:
- #line 552 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 129:
 -#line 544 "dhcp6_parser.yy" // lalr1.cc:859
++  case 131:
++#line 554 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1157 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1171 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 131:
- #line 557 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 130:
 -#line 549 "dhcp6_parser.yy" // lalr1.cc:859
++  case 132:
++#line 559 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 -#line 1163 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1177 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 132:
- #line 558 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 131:
 -#line 550 "dhcp6_parser.yy" // lalr1.cc:859
++  case 133:
++#line 560 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1169 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1183 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 133:
- #line 559 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 132:
 -#line 551 "dhcp6_parser.yy" // lalr1.cc:859
++  case 134:
++#line 561 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1175 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1189 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 134:
- #line 560 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 133:
 -#line 552 "dhcp6_parser.yy" // lalr1.cc:859
++  case 135:
++#line 562 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 -#line 1181 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1195 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 135:
- #line 563 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 134:
 -#line 555 "dhcp6_parser.yy" // lalr1.cc:859
++  case 136:
++#line 565 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1189 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1203 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 136:
- #line 565 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 135:
 -#line 557 "dhcp6_parser.yy" // lalr1.cc:859
++  case 137:
++#line 567 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("user", user);
      ctx.leave();
  }
 -#line 1199 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1213 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 137:
- #line 571 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 136:
 -#line 563 "dhcp6_parser.yy" // lalr1.cc:859
++  case 138:
++#line 573 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1207 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1221 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 138:
- #line 573 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 137:
 -#line 565 "dhcp6_parser.yy" // lalr1.cc:859
++  case 139:
++#line 575 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("password", pwd);
      ctx.leave();
  }
 -#line 1217 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1231 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 139:
- #line 579 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 138:
 -#line 571 "dhcp6_parser.yy" // lalr1.cc:859
++  case 140:
++#line 581 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1225 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1239 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 140:
- #line 581 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 139:
 -#line 573 "dhcp6_parser.yy" // lalr1.cc:859
++  case 141:
++#line 583 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("host", h);
      ctx.leave();
  }
 -#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1249 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 141:
- #line 587 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 140:
 -#line 579 "dhcp6_parser.yy" // lalr1.cc:859
++  case 142:
++#line 589 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("port", p);
  }
 -#line 1244 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1258 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 142:
- #line 592 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 141:
 -#line 584 "dhcp6_parser.yy" // lalr1.cc:859
++  case 143:
++#line 594 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1252 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1266 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 143:
- #line 594 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 142:
 -#line 586 "dhcp6_parser.yy" // lalr1.cc:859
++  case 144:
++#line 596 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("name", name);
      ctx.leave();
  }
 -#line 1262 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1276 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 144:
- #line 600 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 143:
 -#line 592 "dhcp6_parser.yy" // lalr1.cc:859
++  case 145:
++#line 602 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("persist", n);
  }
 -#line 1271 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1285 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 145:
- #line 605 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 144:
 -#line 597 "dhcp6_parser.yy" // lalr1.cc:859
++  case 146:
++#line 607 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("lfc-interval", n);
  }
 -#line 1280 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1294 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 146:
- #line 610 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 145:
 -#line 602 "dhcp6_parser.yy" // lalr1.cc:859
++  case 147:
++#line 612 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("readonly", n);
  }
 -#line 1289 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1303 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 147:
- #line 615 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 146:
 -#line 607 "dhcp6_parser.yy" // lalr1.cc:859
++  case 148:
++#line 617 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("connect-timeout", n);
  }
 -#line 1298 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1312 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 148:
- #line 620 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 147:
 -#line 612 "dhcp6_parser.yy" // lalr1.cc:859
++  case 149:
++#line 622 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1306 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1320 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 149:
- #line 622 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 148:
 -#line 614 "dhcp6_parser.yy" // lalr1.cc:859
++  case 150:
++#line 624 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("contact-points", cp);
      ctx.leave();
  }
 -#line 1316 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1330 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 150:
- #line 628 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 149:
 -#line 620 "dhcp6_parser.yy" // lalr1.cc:859
++  case 151:
++#line 630 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1324 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1338 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 151:
- #line 630 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 150:
 -#line 622 "dhcp6_parser.yy" // lalr1.cc:859
++  case 152:
++#line 632 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("keyspace", ks);
      ctx.leave();
  }
 -#line 1334 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1348 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 152:
- #line 637 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 151:
 -#line 629 "dhcp6_parser.yy" // lalr1.cc:859
++  case 153:
++#line 639 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("mac-sources", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.MAC_SOURCES);
  }
 -#line 1345 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1359 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 153:
- #line 642 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 152:
 -#line 634 "dhcp6_parser.yy" // lalr1.cc:859
++  case 154:
++#line 644 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1354 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1368 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 158:
- #line 655 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 157:
 -#line 647 "dhcp6_parser.yy" // lalr1.cc:859
++  case 159:
++#line 657 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(duid);
  }
 -#line 1363 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1377 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 159:
- #line 660 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 158:
 -#line 652 "dhcp6_parser.yy" // lalr1.cc:859
++  case 160:
++#line 662 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(duid);
  }
 -#line 1372 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1386 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 160:
- #line 665 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 159:
 -#line 657 "dhcp6_parser.yy" // lalr1.cc:859
++  case 161:
++#line 667 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("host-reservation-identifiers", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
  }
 -#line 1383 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1397 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 161:
- #line 670 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 160:
 -#line 662 "dhcp6_parser.yy" // lalr1.cc:859
++  case 162:
++#line 672 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1392 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1406 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 167:
- #line 684 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 166:
 -#line 676 "dhcp6_parser.yy" // lalr1.cc:859
++  case 168:
++#line 686 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(hwaddr);
  }
 -#line 1401 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1415 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 168:
- #line 689 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 167:
 -#line 681 "dhcp6_parser.yy" // lalr1.cc:859
++  case 169:
++#line 691 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(flex_id);
  }
 -#line 1410 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1424 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 169:
- #line 696 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 168:
 -#line 688 "dhcp6_parser.yy" // lalr1.cc:859
++  case 170:
++#line 698 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("relay-supplied-options", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1421 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1435 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 170:
- #line 701 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 169:
 -#line 693 "dhcp6_parser.yy" // lalr1.cc:859
++  case 171:
++#line 703 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1430 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1444 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 171:
- #line 706 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 170:
 -#line 698 "dhcp6_parser.yy" // lalr1.cc:859
++  case 172:
++#line 708 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hooks-libraries", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.HOOKS_LIBRARIES);
  }
 -#line 1441 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1455 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 172:
- #line 711 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 171:
 -#line 703 "dhcp6_parser.yy" // lalr1.cc:859
++  case 173:
++#line 713 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1450 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1464 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 177:
- #line 724 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 176:
 -#line 716 "dhcp6_parser.yy" // lalr1.cc:859
++  case 178:
++#line 726 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
 -#line 1460 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1474 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 178:
- #line 728 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 177:
 -#line 720 "dhcp6_parser.yy" // lalr1.cc:859
++  case 179:
++#line 730 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The library hooks parameter is required
 +    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
 -#line 1468 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1484 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 179:
- #line 734 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 178:
 -#line 724 "dhcp6_parser.yy" // lalr1.cc:859
++  case 180:
++#line 736 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the hooks-libraries list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1478 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1494 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 180:
- #line 738 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 179:
 -#line 728 "dhcp6_parser.yy" // lalr1.cc:859
++  case 181:
++#line 740 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The library hooks parameter is required
 +    ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
 -#line 1486 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 186:
- #line 753 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 185:
 -#line 741 "dhcp6_parser.yy" // lalr1.cc:859
++  case 187:
++#line 755 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1494 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1512 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 187:
- #line 755 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 186:
 -#line 743 "dhcp6_parser.yy" // lalr1.cc:859
++  case 188:
++#line 757 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("library", lib);
      ctx.leave();
  }
 -#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1522 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 188:
- #line 761 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 187:
 -#line 749 "dhcp6_parser.yy" // lalr1.cc:859
++  case 189:
++#line 763 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1512 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1530 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 189:
- #line 763 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 188:
 -#line 751 "dhcp6_parser.yy" // lalr1.cc:859
++  case 190:
++#line 765 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1521 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1539 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 190:
- #line 769 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 189:
 -#line 757 "dhcp6_parser.yy" // lalr1.cc:859
++  case 191:
++#line 771 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("expired-leases-processing", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
  }
 -#line 1532 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1550 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 191:
- #line 774 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 190:
 -#line 762 "dhcp6_parser.yy" // lalr1.cc:859
++  case 192:
++#line 776 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // No expired lease parameter is required
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1541 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1560 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 200:
- #line 792 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 199:
 -#line 779 "dhcp6_parser.yy" // lalr1.cc:859
++  case 201:
++#line 794 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("reclaim-timer-wait-time", value);
  }
 -#line 1550 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1569 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 201:
- #line 797 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 200:
 -#line 784 "dhcp6_parser.yy" // lalr1.cc:859
++  case 202:
++#line 799 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
  }
 -#line 1559 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1578 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 202:
- #line 802 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 201:
 -#line 789 "dhcp6_parser.yy" // lalr1.cc:859
++  case 203:
++#line 804 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hold-reclaimed-time", value);
  }
 -#line 1568 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1587 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 203:
- #line 807 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 202:
 -#line 794 "dhcp6_parser.yy" // lalr1.cc:859
++  case 204:
++#line 809 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-reclaim-leases", value);
  }
 -#line 1577 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1596 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 204:
- #line 812 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 203:
 -#line 799 "dhcp6_parser.yy" // lalr1.cc:859
++  case 205:
++#line 814 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-reclaim-time", value);
  }
 -#line 1586 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1605 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 205:
- #line 817 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 204:
 -#line 804 "dhcp6_parser.yy" // lalr1.cc:859
++  case 206:
++#line 819 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
  }
 -#line 1595 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1614 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 206:
- #line 825 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 205:
 -#line 812 "dhcp6_parser.yy" // lalr1.cc:859
++  case 207:
++#line 827 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("subnet6", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.SUBNET6);
  }
 -#line 1606 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1625 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 207:
- #line 830 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 206:
 -#line 817 "dhcp6_parser.yy" // lalr1.cc:859
++  case 208:
++#line 832 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1615 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1634 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 212:
- #line 850 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 211:
 -#line 837 "dhcp6_parser.yy" // lalr1.cc:859
++  case 213:
++#line 852 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
 -#line 1625 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1644 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 213:
- #line 854 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 212:
 -#line 841 "dhcp6_parser.yy" // lalr1.cc:859
++  case 214:
++#line 856 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Once we reached this place, the subnet parsing is now complete.
      // If we want to, we can implement default values here.
      //         ctx.stack_.back()->set("renew-timer", renew);
      //     }
      // }
 +
 +    // The subnet subnet6 parameter is required
 +    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
 -#line 1648 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1670 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 214:
- #line 876 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 213:
 -#line 860 "dhcp6_parser.yy" // lalr1.cc:859
++  case 215:
++#line 878 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the subnet6 list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
 -#line 1658 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1680 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 215:
- #line 880 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 214:
 -#line 864 "dhcp6_parser.yy" // lalr1.cc:859
++  case 216:
++#line 882 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The subnet subnet6 parameter is required
 +    ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
 -#line 1666 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1690 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 236:
- #line 912 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 234:
 -#line 893 "dhcp6_parser.yy" // lalr1.cc:859
++  case 237:
++#line 914 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1674 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1698 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 237:
- #line 914 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 235:
 -#line 895 "dhcp6_parser.yy" // lalr1.cc:859
++  case 238:
++#line 916 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("subnet", subnet);
      ctx.leave();
  }
 -#line 1684 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1708 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 238:
- #line 920 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 236:
 -#line 901 "dhcp6_parser.yy" // lalr1.cc:859
++  case 239:
++#line 922 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1692 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1716 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 239:
- #line 922 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 237:
 -#line 903 "dhcp6_parser.yy" // lalr1.cc:859
++  case 240:
++#line 924 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interface", iface);
      ctx.leave();
  }
 -#line 1702 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1726 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 240:
- #line 928 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 238:
 -#line 909 "dhcp6_parser.yy" // lalr1.cc:859
++  case 241:
++#line 930 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
 -#line 1710 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1734 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 241:
- #line 930 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 239:
 -#line 911 "dhcp6_parser.yy" // lalr1.cc:859
++  case 242:
++#line 932 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("interface-id", iface);
      ctx.leave();
  }
 -#line 1720 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1744 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 242:
- #line 936 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 240:
 -#line 917 "dhcp6_parser.yy" // lalr1.cc:859
++  case 243:
++#line 938 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.CLIENT_CLASS);
  }
 -#line 1728 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1752 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 243:
- #line 938 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 241:
 -#line 919 "dhcp6_parser.yy" // lalr1.cc:859
++  case 244:
++#line 940 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-class", cls);
      ctx.leave();
  }
 -#line 1738 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1762 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 244:
- #line 944 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 242:
 -#line 925 "dhcp6_parser.yy" // lalr1.cc:859
++  case 245:
++#line 946 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.RESERVATION_MODE);
  }
 -#line 1746 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1770 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 245:
- #line 946 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 243:
 -#line 927 "dhcp6_parser.yy" // lalr1.cc:859
++  case 246:
++#line 948 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
 -#line 1755 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1779 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 246:
- #line 951 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 244:
 -#line 932 "dhcp6_parser.yy" // lalr1.cc:859
++  case 247:
++#line 953 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 -#line 1761 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1785 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 247:
- #line 952 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 245:
 -#line 933 "dhcp6_parser.yy" // lalr1.cc:859
++  case 248:
++#line 954 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 -#line 1767 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 248:
- #line 953 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 246:
 -#line 934 "dhcp6_parser.yy" // lalr1.cc:859
++  case 249:
++#line 955 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 -#line 1773 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1797 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 249:
- #line 956 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 247:
 -#line 937 "dhcp6_parser.yy" // lalr1.cc:859
++  case 250:
++#line 958 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("id", id);
  }
 -#line 1782 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1806 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 250:
- #line 961 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 248:
 -#line 942 "dhcp6_parser.yy" // lalr1.cc:859
++  case 251:
++#line 963 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("rapid-commit", rc);
  }
 -#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1815 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 251:
- #line 970 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 249:
 -#line 950 "dhcp6_parser.yy" // lalr1.cc:859
++  case 252:
++#line 971 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
-     ctx.stack_.back()->set("option-def", l);
+     ctx.stack_.back()->set("shared-networks", l);
      ctx.stack_.push_back(l);
-     ctx.enter(ctx.OPTION_DEF);
+     ctx.enter(ctx.SHARED_NETWORK);
  }
 -#line 1802 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1826 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 252:
- #line 975 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 250:
 -#line 955 "dhcp6_parser.yy" // lalr1.cc:859
++  case 253:
++#line 976 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
 -#line 1811 "dhcp6_parser.cc" // lalr1.cc:859
 +#line 1835 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 253:
- #line 983 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 255:
 -#line 970 "dhcp6_parser.yy" // lalr1.cc:859
++  case 258:
++#line 991 "dhcp6_parser.yy" // lalr1.cc:859
+     {
+     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+     ctx.stack_.back()->add(m);
+     ctx.stack_.push_back(m);
+ }
 -#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1845 "dhcp6_parser.cc" // lalr1.cc:859
+     break;
 -  case 256:
 -#line 974 "dhcp6_parser.yy" // lalr1.cc:859
++  case 259:
++#line 995 "dhcp6_parser.yy" // lalr1.cc:859
+     {
+     ctx.stack_.pop_back();
+ }
 -#line 1829 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1853 "dhcp6_parser.cc" // lalr1.cc:859
+     break;
 -  case 273:
 -#line 1002 "dhcp6_parser.yy" // lalr1.cc:859
++  case 276:
++#line 1023 "dhcp6_parser.yy" // lalr1.cc:859
+     {
+     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
+     ctx.stack_.back()->set("option-def", l);
+     ctx.stack_.push_back(l);
+     ctx.enter(ctx.OPTION_DEF);
+ }
 -#line 1840 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1864 "dhcp6_parser.cc" // lalr1.cc:859
+     break;
 -  case 274:
 -#line 1007 "dhcp6_parser.yy" // lalr1.cc:859
++  case 277:
++#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
+     {
+     ctx.stack_.pop_back();
+     ctx.leave();
+ }
 -#line 1849 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1873 "dhcp6_parser.cc" // lalr1.cc:859
++    break;
++
++  case 278:
++#line 1036 "dhcp6_parser.yy" // lalr1.cc:859
 +    {
 +    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
 +    ctx.stack_.push_back(m);
 +}
- #line 1844 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1882 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 254:
- #line 986 "dhcp6_parser.yy" // lalr1.cc:859
+   case 279:
 -#line 1024 "dhcp6_parser.yy" // lalr1.cc:859
++#line 1039 "dhcp6_parser.yy" // lalr1.cc:859
 +    {
 +    // parsing completed
 +}
- #line 1852 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1890 "dhcp6_parser.cc" // lalr1.cc:859
 +    break;
 +
-   case 259:
- #line 1002 "dhcp6_parser.yy" // lalr1.cc:859
++  case 284:
++#line 1055 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 1862 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1859 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1900 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 260:
- #line 1006 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 280:
 -#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
++  case 285:
++#line 1059 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The name, code and type option def parameters are required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 1874 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1867 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1912 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 261:
- #line 1017 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 281:
 -#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
++  case 286:
++#line 1070 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the option-def list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 1884 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1877 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1922 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 262:
- #line 1021 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 282:
 -#line 1039 "dhcp6_parser.yy" // lalr1.cc:859
++  case 287:
++#line 1074 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The name, code and type option def parameters are required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 1896 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1885 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1934 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 276:
- #line 1051 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 296:
 -#line 1065 "dhcp6_parser.yy" // lalr1.cc:859
++  case 301:
++#line 1104 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("code", code);
  }
- #line 1905 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1894 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1943 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 278:
- #line 1058 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 298:
 -#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
++  case 303:
++#line 1111 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1913 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1902 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1951 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 279:
- #line 1060 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 299:
 -#line 1074 "dhcp6_parser.yy" // lalr1.cc:859
++  case 304:
++#line 1113 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("type", prf);
      ctx.leave();
  }
- #line 1923 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1912 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1961 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 280:
- #line 1066 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 300:
 -#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
++  case 305:
++#line 1119 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1931 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1920 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1969 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 281:
- #line 1068 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 301:
 -#line 1082 "dhcp6_parser.yy" // lalr1.cc:859
++  case 306:
++#line 1121 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("record-types", rtypes);
      ctx.leave();
  }
- #line 1941 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1930 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1979 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 282:
- #line 1074 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 302:
 -#line 1088 "dhcp6_parser.yy" // lalr1.cc:859
++  case 307:
++#line 1127 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1949 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1938 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1987 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 283:
- #line 1076 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 303:
 -#line 1090 "dhcp6_parser.yy" // lalr1.cc:859
++  case 308:
++#line 1129 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("space", space);
      ctx.leave();
  }
- #line 1959 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1948 "dhcp6_parser.cc" // lalr1.cc:859
++#line 1997 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 285:
- #line 1084 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 305:
 -#line 1098 "dhcp6_parser.yy" // lalr1.cc:859
++  case 310:
++#line 1137 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 1967 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1956 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2005 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 286:
- #line 1086 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 306:
 -#line 1100 "dhcp6_parser.yy" // lalr1.cc:859
++  case 311:
++#line 1139 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("encapsulate", encap);
      ctx.leave();
  }
- #line 1977 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1966 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2015 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 287:
- #line 1092 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 307:
 -#line 1106 "dhcp6_parser.yy" // lalr1.cc:859
++  case 312:
++#line 1145 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("array", array);
  }
- #line 1986 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1975 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2024 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 288:
- #line 1101 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 308:
 -#line 1115 "dhcp6_parser.yy" // lalr1.cc:859
++  case 313:
++#line 1154 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("option-data", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.OPTION_DATA);
  }
- #line 1997 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1986 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2035 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 289:
- #line 1106 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 309:
 -#line 1120 "dhcp6_parser.yy" // lalr1.cc:859
++  case 314:
++#line 1159 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2006 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 1995 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2044 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 294:
- #line 1125 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 314:
 -#line 1139 "dhcp6_parser.yy" // lalr1.cc:859
++  case 319:
++#line 1178 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2016 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2005 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2054 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 295:
- #line 1129 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 315:
 -#line 1143 "dhcp6_parser.yy" // lalr1.cc:859
++  case 320:
++#line 1182 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: the code or name parameters are required.
      ctx.stack_.pop_back();
  }
- #line 2025 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2013 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2063 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 296:
- #line 1137 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 316:
 -#line 1150 "dhcp6_parser.yy" // lalr1.cc:859
++  case 321:
++#line 1190 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the option-data list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2035 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2023 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2073 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 297:
- #line 1141 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 317:
 -#line 1154 "dhcp6_parser.yy" // lalr1.cc:859
++  case 322:
++#line 1194 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: the code or name parameters are required.
      // parsing completed
  }
- #line 2044 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2031 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2082 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 310:
- #line 1172 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 330:
 -#line 1184 "dhcp6_parser.yy" // lalr1.cc:859
++  case 335:
++#line 1225 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2052 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2039 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2090 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 311:
- #line 1174 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 331:
 -#line 1186 "dhcp6_parser.yy" // lalr1.cc:859
++  case 336:
++#line 1227 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("data", data);
      ctx.leave();
  }
- #line 2062 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2049 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2100 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 314:
- #line 1184 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 334:
 -#line 1196 "dhcp6_parser.yy" // lalr1.cc:859
++  case 339:
++#line 1237 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("csv-format", space);
  }
- #line 2071 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2058 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2109 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 315:
- #line 1189 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 335:
 -#line 1201 "dhcp6_parser.yy" // lalr1.cc:859
++  case 340:
++#line 1242 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("always-send", persist);
  }
- #line 2080 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2067 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2118 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 316:
- #line 1197 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 336:
 -#line 1209 "dhcp6_parser.yy" // lalr1.cc:859
++  case 341:
++#line 1250 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("pools", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.POOLS);
  }
- #line 2091 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2078 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2129 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 317:
- #line 1202 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 337:
 -#line 1214 "dhcp6_parser.yy" // lalr1.cc:859
++  case 342:
++#line 1255 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2100 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2087 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2138 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 322:
- #line 1217 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 342:
 -#line 1229 "dhcp6_parser.yy" // lalr1.cc:859
++  case 347:
++#line 1270 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2110 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2097 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2148 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 323:
- #line 1221 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 343:
 -#line 1233 "dhcp6_parser.yy" // lalr1.cc:859
++  case 348:
++#line 1274 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The pool parameter is required.
 +    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 2120 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2105 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2158 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 324:
- #line 1227 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 344:
 -#line 1237 "dhcp6_parser.yy" // lalr1.cc:859
++  case 349:
++#line 1280 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the pool list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2130 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2115 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2168 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 325:
- #line 1231 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 345:
 -#line 1241 "dhcp6_parser.yy" // lalr1.cc:859
++  case 350:
++#line 1284 "dhcp6_parser.yy" // lalr1.cc:859
      {
 -    // parsing completed
 +    // The pool parameter is required.
 +    ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
  }
- #line 2139 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2123 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2177 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 332:
- #line 1246 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 352:
 -#line 1255 "dhcp6_parser.yy" // lalr1.cc:859
++  case 357:
++#line 1299 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2147 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2131 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2185 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 333:
- #line 1248 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 353:
 -#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
++  case 358:
++#line 1301 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("pool", pool);
      ctx.leave();
  }
- #line 2157 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2141 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2195 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 334:
- #line 1254 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 354:
 -#line 1263 "dhcp6_parser.yy" // lalr1.cc:859
++  case 359:
++#line 1307 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2165 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2149 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2203 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 335:
- #line 1256 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 355:
 -#line 1265 "dhcp6_parser.yy" // lalr1.cc:859
++  case 360:
++#line 1309 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2174 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2158 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2212 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 336:
- #line 1264 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 356:
 -#line 1273 "dhcp6_parser.yy" // lalr1.cc:859
++  case 361:
++#line 1317 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("pd-pools", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.PD_POOLS);
  }
- #line 2185 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2169 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2223 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 337:
- #line 1269 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 357:
 -#line 1278 "dhcp6_parser.yy" // lalr1.cc:859
++  case 362:
++#line 1322 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2194 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2178 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2232 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 342:
- #line 1284 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 362:
 -#line 1293 "dhcp6_parser.yy" // lalr1.cc:859
++  case 367:
++#line 1337 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2204 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2188 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2242 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 343:
- #line 1288 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 363:
 -#line 1297 "dhcp6_parser.yy" // lalr1.cc:859
++  case 368:
++#line 1341 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The prefix, prefix len and delegated len parameters are required.
 +    ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 2216 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2196 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2254 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 344:
- #line 1296 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 364:
 -#line 1301 "dhcp6_parser.yy" // lalr1.cc:859
++  case 369:
++#line 1349 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the pd-pool list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2226 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2206 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2264 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 345:
- #line 1300 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 365:
 -#line 1305 "dhcp6_parser.yy" // lalr1.cc:859
++  case 370:
++#line 1353 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The prefix, prefix len and delegated len parameters are required.
 +    ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 +    ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 2238 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2214 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2276 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 356:
- #line 1322 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 376:
 -#line 1323 "dhcp6_parser.yy" // lalr1.cc:859
++  case 381:
++#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2246 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2222 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2284 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 357:
- #line 1324 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 377:
 -#line 1325 "dhcp6_parser.yy" // lalr1.cc:859
++  case 382:
++#line 1377 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("prefix", prf);
      ctx.leave();
  }
- #line 2256 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2232 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2294 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 358:
- #line 1330 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 378:
 -#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
++  case 383:
++#line 1383 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("prefix-len", prf);
  }
- #line 2265 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2241 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2303 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 359:
- #line 1335 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 379:
 -#line 1336 "dhcp6_parser.yy" // lalr1.cc:859
++  case 384:
++#line 1388 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2273 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2249 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2311 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 360:
- #line 1337 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 380:
 -#line 1338 "dhcp6_parser.yy" // lalr1.cc:859
++  case 385:
++#line 1390 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("excluded-prefix", prf);
      ctx.leave();
  }
- #line 2283 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2259 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2321 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 361:
- #line 1343 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 381:
 -#line 1344 "dhcp6_parser.yy" // lalr1.cc:859
++  case 386:
++#line 1396 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("excluded-prefix-len", prf);
  }
- #line 2292 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2268 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2330 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 362:
- #line 1348 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 382:
 -#line 1349 "dhcp6_parser.yy" // lalr1.cc:859
++  case 387:
++#line 1401 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("delegated-len", deleg);
  }
- #line 2301 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2277 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2339 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 363:
- #line 1356 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 383:
 -#line 1357 "dhcp6_parser.yy" // lalr1.cc:859
++  case 388:
++#line 1409 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("reservations", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.RESERVATIONS);
  }
- #line 2312 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2288 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2350 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 364:
- #line 1361 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 384:
 -#line 1362 "dhcp6_parser.yy" // lalr1.cc:859
++  case 389:
++#line 1414 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2321 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2297 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2359 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 369:
- #line 1374 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 389:
 -#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
++  case 394:
++#line 1427 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2331 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2307 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2369 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 370:
- #line 1378 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 390:
 -#line 1379 "dhcp6_parser.yy" // lalr1.cc:859
++  case 395:
++#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: an identifier parameter is required.
      ctx.stack_.pop_back();
  }
- #line 2340 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2315 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2378 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 371:
 -  case 391:
--#line 1383 "dhcp6_parser.yy" // lalr1.cc:859
++  case 396:
++#line 1436 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the reservations list entry map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2350 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2325 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2388 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 372:
 -  case 392:
--#line 1387 "dhcp6_parser.yy" // lalr1.cc:859
++  case 397:
++#line 1440 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    /// @todo: an identifier parameter is required.
      // parsing completed
  }
- #line 2359 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2333 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2397 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 386:
- #line 1412 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 406:
 -#line 1411 "dhcp6_parser.yy" // lalr1.cc:859
++  case 411:
++#line 1465 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ip-addresses", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2370 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2344 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2408 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 387:
- #line 1417 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 407:
 -#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
++  case 412:
++#line 1470 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2379 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2353 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2417 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 388:
- #line 1422 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 408:
 -#line 1421 "dhcp6_parser.yy" // lalr1.cc:859
++  case 413:
++#line 1475 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("prefixes", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2390 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2364 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2428 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 389:
- #line 1427 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 409:
 -#line 1426 "dhcp6_parser.yy" // lalr1.cc:859
++  case 414:
++#line 1480 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2399 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2373 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2437 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 390:
- #line 1432 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 410:
 -#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
++  case 415:
++#line 1485 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2407 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2381 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2445 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 391:
- #line 1434 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 411:
 -#line 1433 "dhcp6_parser.yy" // lalr1.cc:859
++  case 416:
++#line 1487 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("duid", d);
      ctx.leave();
  }
- #line 2417 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2391 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2455 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 392:
- #line 1440 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 412:
 -#line 1439 "dhcp6_parser.yy" // lalr1.cc:859
++  case 417:
++#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2425 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2399 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2463 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 393:
- #line 1442 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 413:
 -#line 1441 "dhcp6_parser.yy" // lalr1.cc:859
++  case 418:
++#line 1495 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hw-address", hw);
      ctx.leave();
  }
- #line 2435 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2409 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2473 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 394:
- #line 1448 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 414:
 -#line 1447 "dhcp6_parser.yy" // lalr1.cc:859
++  case 419:
++#line 1501 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2443 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2417 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2481 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 395:
- #line 1450 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 415:
 -#line 1449 "dhcp6_parser.yy" // lalr1.cc:859
++  case 420:
++#line 1503 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("hostname", host);
      ctx.leave();
  }
- #line 2453 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2427 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2491 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 396:
- #line 1456 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 416:
 -#line 1455 "dhcp6_parser.yy" // lalr1.cc:859
++  case 421:
++#line 1509 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2461 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2435 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2499 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 397:
- #line 1458 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 417:
 -#line 1457 "dhcp6_parser.yy" // lalr1.cc:859
++  case 422:
++#line 1511 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flex-id", hw);
      ctx.leave();
  }
- #line 2471 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2445 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2509 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 398:
- #line 1464 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 418:
 -#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
++  case 423:
++#line 1517 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-classes", c);
      ctx.stack_.push_back(c);
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2482 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2456 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2520 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 399:
- #line 1469 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 419:
 -#line 1468 "dhcp6_parser.yy" // lalr1.cc:859
++  case 424:
++#line 1522 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2491 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2465 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2529 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 400:
- #line 1477 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 420:
 -#line 1476 "dhcp6_parser.yy" // lalr1.cc:859
++  case 425:
++#line 1530 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("relay", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.RELAY);
  }
- #line 2502 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2476 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2540 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 401:
- #line 1482 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 421:
 -#line 1481 "dhcp6_parser.yy" // lalr1.cc:859
++  case 426:
++#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2511 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2485 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2549 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 402:
- #line 1487 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 422:
 -#line 1486 "dhcp6_parser.yy" // lalr1.cc:859
++  case 427:
++#line 1540 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2519 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2493 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2557 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 403:
- #line 1489 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 423:
 -#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
++  case 428:
++#line 1542 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ip-address", ip);
      ctx.leave();
  }
- #line 2529 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2503 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2567 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 404:
- #line 1498 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 424:
 -#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
++  case 429:
++#line 1551 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("client-classes", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.CLIENT_CLASSES);
  }
- #line 2540 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2514 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2578 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 405:
- #line 1503 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 425:
 -#line 1502 "dhcp6_parser.yy" // lalr1.cc:859
++  case 430:
++#line 1556 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2549 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2523 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2587 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 408:
- #line 1512 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 428:
 -#line 1511 "dhcp6_parser.yy" // lalr1.cc:859
++  case 433:
++#line 1565 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 2559 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2533 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2597 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 409:
- #line 1516 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 429:
 -#line 1515 "dhcp6_parser.yy" // lalr1.cc:859
++  case 434:
++#line 1569 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The name client class parameter is required.
 +    ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
  }
- #line 2569 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2541 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2607 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 419:
- #line 1538 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 439:
 -#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
++  case 444:
++#line 1591 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2577 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2549 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2615 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 420:
- #line 1540 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 440:
 -#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
++  case 445:
++#line 1593 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("test", test);
      ctx.leave();
  }
- #line 2587 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2559 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2625 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 421:
- #line 1549 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 441:
 -#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
++  case 446:
++#line 1602 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-id", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.SERVER_ID);
  }
- #line 2598 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2636 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 422:
- #line 1554 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 442:
 -#line 1551 "dhcp6_parser.yy" // lalr1.cc:859
++  case 447:
++#line 1607 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The type parameter is required.
 +    ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2609 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2579 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2647 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 432:
- #line 1574 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 452:
 -#line 1569 "dhcp6_parser.yy" // lalr1.cc:859
++  case 457:
++#line 1627 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.DUID_TYPE);
  }
- #line 2617 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2587 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2655 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 433:
- #line 1576 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 453:
 -#line 1571 "dhcp6_parser.yy" // lalr1.cc:859
++  case 458:
++#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2626 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2596 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2664 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 434:
- #line 1581 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 454:
 -#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
++  case 459:
++#line 1634 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
- #line 2632 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2602 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2670 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 435:
- #line 1582 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 455:
 -#line 1577 "dhcp6_parser.yy" // lalr1.cc:859
++  case 460:
++#line 1635 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
- #line 2638 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2608 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2676 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 436:
- #line 1583 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 456:
 -#line 1578 "dhcp6_parser.yy" // lalr1.cc:859
++  case 461:
++#line 1636 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
- #line 2644 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2614 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2682 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 437:
- #line 1586 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 457:
 -#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
++  case 462:
++#line 1639 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("htype", htype);
  }
- #line 2653 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2623 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2691 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 438:
- #line 1591 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 458:
 -#line 1586 "dhcp6_parser.yy" // lalr1.cc:859
++  case 463:
++#line 1644 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2661 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2631 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2699 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 439:
- #line 1593 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 459:
 -#line 1588 "dhcp6_parser.yy" // lalr1.cc:859
++  case 464:
++#line 1646 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("identifier", id);
      ctx.leave();
  }
- #line 2671 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2641 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2709 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 440:
- #line 1599 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 460:
 -#line 1594 "dhcp6_parser.yy" // lalr1.cc:859
++  case 465:
++#line 1652 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("time", time);
  }
- #line 2680 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2650 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2718 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 441:
- #line 1604 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 461:
 -#line 1599 "dhcp6_parser.yy" // lalr1.cc:859
++  case 466:
++#line 1657 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("enterprise-id", time);
  }
- #line 2689 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2659 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2727 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 442:
- #line 1611 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 462:
 -#line 1606 "dhcp6_parser.yy" // lalr1.cc:859
++  case 467:
++#line 1664 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("dhcp4o6-port", time);
  }
- #line 2698 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2736 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 443:
- #line 1618 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 463:
 -#line 1613 "dhcp6_parser.yy" // lalr1.cc:859
++  case 468:
++#line 1671 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("control-socket", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.CONTROL_SOCKET);
  }
- #line 2709 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2679 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2747 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 444:
- #line 1623 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 464:
 -#line 1618 "dhcp6_parser.yy" // lalr1.cc:859
++  case 469:
++#line 1676 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2718 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2688 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2756 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 449:
- #line 1636 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 469:
 -#line 1631 "dhcp6_parser.yy" // lalr1.cc:859
++  case 474:
++#line 1689 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2726 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2696 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2764 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 450:
- #line 1638 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 470:
 -#line 1633 "dhcp6_parser.yy" // lalr1.cc:859
++  case 475:
++#line 1691 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("socket-type", stype);
      ctx.leave();
  }
- #line 2736 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2706 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2774 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 451:
- #line 1644 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 471:
 -#line 1639 "dhcp6_parser.yy" // lalr1.cc:859
++  case 476:
++#line 1697 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2744 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2714 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2782 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 452:
- #line 1646 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 472:
 -#line 1641 "dhcp6_parser.yy" // lalr1.cc:859
++  case 477:
++#line 1699 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("socket-name", name);
      ctx.leave();
  }
- #line 2754 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2724 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2792 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 453:
- #line 1654 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 473:
 -#line 1649 "dhcp6_parser.yy" // lalr1.cc:859
++  case 478:
++#line 1707 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("dhcp-ddns", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.DHCP_DDNS);
  }
- #line 2765 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2735 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2803 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 454:
- #line 1659 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 474:
 -#line 1654 "dhcp6_parser.yy" // lalr1.cc:859
++  case 479:
++#line 1712 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The enable updates DHCP DDNS parameter is required.
 +    ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 2776 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2744 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2814 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 455:
- #line 1666 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 475:
 -#line 1659 "dhcp6_parser.yy" // lalr1.cc:859
++  case 480:
++#line 1719 "dhcp6_parser.yy" // lalr1.cc:859
      {
      // Parse the dhcp-ddns map
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.push_back(m);
  }
- #line 2786 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2754 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2824 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 456:
- #line 1670 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 476:
 -#line 1663 "dhcp6_parser.yy" // lalr1.cc:859
++  case 481:
++#line 1723 "dhcp6_parser.yy" // lalr1.cc:859
      {
 +    // The enable updates DHCP DDNS parameter is required.
 +    ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
      // parsing completed
  }
- #line 2796 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2762 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2834 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 474:
- #line 1697 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 494:
 -#line 1688 "dhcp6_parser.yy" // lalr1.cc:859
++  case 499:
++#line 1750 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("enable-updates", b);
  }
- #line 2805 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2771 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 475:
- #line 1702 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 495:
 -#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
++  case 500:
++#line 1755 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2813 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2779 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2851 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 476:
- #line 1704 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 496:
 -#line 1695 "dhcp6_parser.yy" // lalr1.cc:859
++  case 501:
++#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("qualifying-suffix", s);
      ctx.leave();
  }
- #line 2823 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2789 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2861 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 477:
- #line 1710 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 497:
 -#line 1701 "dhcp6_parser.yy" // lalr1.cc:859
++  case 502:
++#line 1763 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2831 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2797 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2869 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 478:
- #line 1712 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 498:
 -#line 1703 "dhcp6_parser.yy" // lalr1.cc:859
++  case 503:
++#line 1765 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-ip", s);
      ctx.leave();
  }
- #line 2841 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2807 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2879 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 479:
- #line 1718 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 499:
 -#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
++  case 504:
++#line 1771 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("server-port", i);
  }
- #line 2850 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2816 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2888 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 480:
- #line 1723 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 500:
 -#line 1714 "dhcp6_parser.yy" // lalr1.cc:859
++  case 505:
++#line 1776 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 2858 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2824 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2896 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 481:
- #line 1725 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 501:
 -#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
++  case 506:
++#line 1778 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("sender-ip", s);
      ctx.leave();
  }
- #line 2868 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2834 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2906 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 482:
- #line 1731 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 502:
 -#line 1722 "dhcp6_parser.yy" // lalr1.cc:859
++  case 507:
++#line 1784 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("sender-port", i);
  }
- #line 2877 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2915 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 483:
- #line 1736 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 503:
 -#line 1727 "dhcp6_parser.yy" // lalr1.cc:859
++  case 508:
++#line 1789 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("max-queue-size", i);
  }
- #line 2886 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2852 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2924 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 484:
- #line 1741 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 504:
 -#line 1732 "dhcp6_parser.yy" // lalr1.cc:859
++  case 509:
++#line 1794 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NCR_PROTOCOL);
  }
- #line 2894 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2860 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2932 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 485:
- #line 1743 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 505:
 -#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
++  case 510:
++#line 1796 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2903 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2869 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2941 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 486:
- #line 1749 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 506:
 -#line 1740 "dhcp6_parser.yy" // lalr1.cc:859
++  case 511:
++#line 1802 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
- #line 2909 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2875 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2947 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 487:
- #line 1750 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 507:
 -#line 1741 "dhcp6_parser.yy" // lalr1.cc:859
++  case 512:
++#line 1803 "dhcp6_parser.yy" // lalr1.cc:859
      { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
- #line 2915 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2881 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2953 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 488:
- #line 1753 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 508:
 -#line 1744 "dhcp6_parser.yy" // lalr1.cc:859
++  case 513:
++#line 1806 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NCR_FORMAT);
  }
- #line 2923 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2889 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2961 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 489:
- #line 1755 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 509:
 -#line 1746 "dhcp6_parser.yy" // lalr1.cc:859
++  case 514:
++#line 1808 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("ncr-format", json);
      ctx.leave();
  }
- #line 2933 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2899 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2971 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 490:
- #line 1761 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 510:
 -#line 1752 "dhcp6_parser.yy" // lalr1.cc:859
++  case 515:
++#line 1814 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("always-include-fqdn", b);
  }
- #line 2942 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2908 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2980 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 491:
- #line 1766 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 511:
 -#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
++  case 516:
++#line 1819 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("override-no-update", b);
  }
- #line 2951 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2917 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2989 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 492:
- #line 1771 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 512:
 -#line 1762 "dhcp6_parser.yy" // lalr1.cc:859
++  case 517:
++#line 1824 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("override-client-update", b);
  }
- #line 2960 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2926 "dhcp6_parser.cc" // lalr1.cc:859
++#line 2998 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 493:
- #line 1776 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 513:
 -#line 1767 "dhcp6_parser.yy" // lalr1.cc:859
++  case 518:
++#line 1829 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.REPLACE_CLIENT_NAME);
  }
- #line 2968 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2934 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3006 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 494:
- #line 1778 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 514:
 -#line 1769 "dhcp6_parser.yy" // lalr1.cc:859
++  case 519:
++#line 1831 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 2977 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2943 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3015 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 495:
- #line 1784 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 515:
 -#line 1775 "dhcp6_parser.yy" // lalr1.cc:859
++  case 520:
++#line 1837 "dhcp6_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
        }
- #line 2985 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2951 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3023 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 496:
- #line 1787 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 516:
 -#line 1778 "dhcp6_parser.yy" // lalr1.cc:859
++  case 521:
++#line 1840 "dhcp6_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
        }
- #line 2993 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2959 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3031 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 497:
- #line 1790 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 517:
 -#line 1781 "dhcp6_parser.yy" // lalr1.cc:859
++  case 522:
++#line 1843 "dhcp6_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
        }
- #line 3001 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2967 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3039 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 498:
- #line 1793 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 518:
 -#line 1784 "dhcp6_parser.yy" // lalr1.cc:859
++  case 523:
++#line 1846 "dhcp6_parser.yy" // lalr1.cc:859
      {
        yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
        }
- #line 3009 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2975 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3047 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 499:
- #line 1796 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 519:
 -#line 1787 "dhcp6_parser.yy" // lalr1.cc:859
++  case 524:
++#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
      {
        error(yystack_[0].location, "boolean values for the replace-client-name are "
                  "no longer supported");
        }
- #line 3018 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2984 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3056 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 500:
- #line 1802 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 520:
 -#line 1793 "dhcp6_parser.yy" // lalr1.cc:859
++  case 525:
++#line 1855 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3026 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 2992 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3064 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 501:
- #line 1804 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 521:
 -#line 1795 "dhcp6_parser.yy" // lalr1.cc:859
++  case 526:
++#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("generated-prefix", s);
      ctx.leave();
  }
- #line 3036 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3002 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3074 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 502:
- #line 1812 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 522:
 -#line 1803 "dhcp6_parser.yy" // lalr1.cc:859
++  case 527:
++#line 1865 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3044 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3010 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3082 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 503:
- #line 1814 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 523:
 -#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
++  case 528:
++#line 1867 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 3053 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3019 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3091 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 504:
- #line 1819 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 524:
 -#line 1810 "dhcp6_parser.yy" // lalr1.cc:859
++  case 529:
++#line 1872 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3061 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3027 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3099 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 505:
- #line 1821 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 525:
 -#line 1812 "dhcp6_parser.yy" // lalr1.cc:859
++  case 530:
++#line 1874 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 3070 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3036 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3108 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 506:
- #line 1826 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 526:
 -#line 1817 "dhcp6_parser.yy" // lalr1.cc:859
++  case 531:
++#line 1879 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3078 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3044 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3116 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 507:
- #line 1828 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 527:
 -#line 1819 "dhcp6_parser.yy" // lalr1.cc:859
++  case 532:
++#line 1881 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
      ctx.leave();
  }
- #line 3087 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3053 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3125 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 508:
- #line 1839 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 528:
 -#line 1830 "dhcp6_parser.yy" // lalr1.cc:859
++  case 533:
++#line 1892 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("Logging", m);
      ctx.stack_.push_back(m);
      ctx.enter(ctx.LOGGING);
  }
- #line 3098 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3064 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3136 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 509:
- #line 1844 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 529:
 -#line 1835 "dhcp6_parser.yy" // lalr1.cc:859
++  case 534:
++#line 1897 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3107 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3073 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3145 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 513:
- #line 1861 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 533:
 -#line 1852 "dhcp6_parser.yy" // lalr1.cc:859
++  case 538:
++#line 1914 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("loggers", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.LOGGERS);
  }
- #line 3118 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3084 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3156 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 514:
- #line 1866 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 534:
 -#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
++  case 539:
++#line 1919 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3127 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3093 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3165 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 517:
- #line 1878 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 537:
 -#line 1869 "dhcp6_parser.yy" // lalr1.cc:859
++  case 542:
++#line 1931 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(l);
      ctx.stack_.push_back(l);
  }
- #line 3137 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3103 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3175 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 518:
- #line 1882 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 538:
 -#line 1873 "dhcp6_parser.yy" // lalr1.cc:859
++  case 543:
++#line 1935 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
  }
- #line 3145 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3111 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3183 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 526:
- #line 1897 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 546:
 -#line 1888 "dhcp6_parser.yy" // lalr1.cc:859
++  case 551:
++#line 1950 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("debuglevel", dl);
  }
- #line 3154 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3120 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3192 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 527:
- #line 1902 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 547:
 -#line 1893 "dhcp6_parser.yy" // lalr1.cc:859
++  case 552:
++#line 1955 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3162 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3128 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3200 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 528:
- #line 1904 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 548:
 -#line 1895 "dhcp6_parser.yy" // lalr1.cc:859
++  case 553:
++#line 1957 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("severity", sev);
      ctx.leave();
  }
- #line 3172 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3138 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3210 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 529:
- #line 1910 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 549:
 -#line 1901 "dhcp6_parser.yy" // lalr1.cc:859
++  case 554:
++#line 1963 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("output_options", l);
      ctx.stack_.push_back(l);
      ctx.enter(ctx.OUTPUT_OPTIONS);
  }
- #line 3183 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3149 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3221 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 530:
- #line 1915 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 550:
 -#line 1906 "dhcp6_parser.yy" // lalr1.cc:859
++  case 555:
++#line 1968 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
      ctx.leave();
  }
- #line 3192 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3158 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3230 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 533:
- #line 1924 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 553:
 -#line 1915 "dhcp6_parser.yy" // lalr1.cc:859
++  case 558:
++#line 1977 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->add(m);
      ctx.stack_.push_back(m);
  }
- #line 3202 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3168 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3240 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 534:
- #line 1928 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 554:
 -#line 1919 "dhcp6_parser.yy" // lalr1.cc:859
++  case 559:
++#line 1981 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.stack_.pop_back();
  }
- #line 3210 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3176 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3248 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 541:
- #line 1942 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 561:
 -#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
++  case 566:
++#line 1995 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ctx.enter(ctx.NO_KEYWORD);
  }
- #line 3218 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3184 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3256 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 542:
- #line 1944 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 562:
 -#line 1935 "dhcp6_parser.yy" // lalr1.cc:859
++  case 567:
++#line 1997 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("output", sev);
      ctx.leave();
  }
- #line 3228 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3194 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3266 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 543:
- #line 1950 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 563:
 -#line 1941 "dhcp6_parser.yy" // lalr1.cc:859
++  case 568:
++#line 2003 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("flush", flush);
  }
- #line 3237 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3203 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3275 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 544:
- #line 1955 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 564:
 -#line 1946 "dhcp6_parser.yy" // lalr1.cc:859
++  case 569:
++#line 2008 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("maxsize", maxsize);
  }
- #line 3246 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3212 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3284 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
-   case 545:
- #line 1960 "dhcp6_parser.yy" // lalr1.cc:859
 -  case 565:
 -#line 1951 "dhcp6_parser.yy" // lalr1.cc:859
++  case 570:
++#line 2013 "dhcp6_parser.yy" // lalr1.cc:859
      {
      ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
      ctx.stack_.back()->set("maxver", maxver);
  }
- #line 3255 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3221 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3293 "dhcp6_parser.cc" // lalr1.cc:859
      break;
  
  
- #line 3259 "dhcp6_parser.cc" // lalr1.cc:859
 -#line 3225 "dhcp6_parser.cc" // lalr1.cc:859
++#line 3297 "dhcp6_parser.cc" // lalr1.cc:859
              default:
                break;
              }
    }
  
  
-   const short int Dhcp6Parser::yypact_ninf_ = -510;
 -  const short int Dhcp6Parser::yypact_ninf_ = -702;
++  const short int Dhcp6Parser::yypact_ninf_ = -707;
  
    const signed char Dhcp6Parser::yytable_ninf_ = -1;
  
    const short int
    Dhcp6Parser::yypact_[] =
    {
-      218,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,    53,    20,    90,   123,   129,   160,
-      170,   255,   256,   257,   259,   260,   261,   262,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,    20,   -75,    18,    32,   102,    24,
-       -5,   106,    73,    40,    63,    50,   -44,   237,  -510,   247,
-      215,   224,   263,   252,  -510,  -510,  -510,  -510,  -510,   266,
-     -510,    68,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,   268,   270,   271,   272,   273,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,   274,  -510,  -510,  -510,
-       70,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,   275,   114,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,   276,   277,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,   125,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,   126,  -510,  -510,  -510,  -510,
-      279,  -510,   280,   283,  -510,  -510,  -510,   172,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,   284,   285,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,   286,  -510,  -510,   287,  -510,  -510,  -510,
-      289,  -510,  -510,   291,   294,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,   296,   297,  -510,  -510,
-     -510,  -510,   302,   308,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,   173,  -510,  -510,  -510,   310,  -510,
-     -510,   313,  -510,   314,   315,  -510,  -510,   316,   318,   319,
-     -510,  -510,  -510,   199,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-       20,    20,  -510,   174,   321,   322,   323,   325,   326,  -510,
-       18,  -510,   327,   328,   329,   183,   185,   186,   187,   188,
-      364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-      227,   375,   376,    32,  -510,   377,   229,   102,  -510,    49,
-      379,   380,   381,   382,   384,   385,   239,   238,   388,   389,
-      390,   391,    24,  -510,   392,    -5,  -510,   393,   249,   394,
-      250,   251,   106,  -510,   395,   399,   400,   401,   402,   403,
-      404,  -510,    73,  -510,   405,   406,   264,   407,   408,   409,
-      265,  -510,    63,   410,   278,   281,  -510,    50,   412,   413,
-      155,  -510,   282,   415,   419,   288,   420,   290,   295,   421,
-      422,   292,   300,   301,   423,   424,   237,  -510,  -510,  -510,
-      425,   426,   429,    20,    20,    20,  -510,   430,   431,   433,
-     -510,  -510,  -510,  -510,  -510,   427,   437,   442,   443,   444,
-      445,   450,   451,   452,   453,  -510,   456,   458,  -510,   461,
-     -510,  -510,  -510,  -510,  -510,  -510,   449,   455,  -510,  -510,
-     -510,   462,   463,   464,   320,   324,   330,  -510,  -510,   -29,
-      331,   467,   466,  -510,   332,  -510,   333,  -510,   334,  -510,
-     -510,  -510,   461,   461,   461,   335,   336,   337,   338,  -510,
-      339,   340,  -510,   341,   342,   343,  -510,  -510,   344,  -510,
-     -510,  -510,   345,    20,  -510,  -510,   346,   347,  -510,   348,
-     -510,  -510,    37,   355,  -510,  -510,  -510,    16,   349,  -510,
-       20,    32,   304,  -510,  -510,  -510,   102,   162,   162,   469,
-      470,   472,   -43,    20,   -26,    41,   494,   108,    29,   159,
-      237,  -510,  -510,   498,  -510,    49,   496,   497,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,   499,   428,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,   200,  -510,   201,  -510,  -510,   202,  -510,
-     -510,  -510,  -510,   501,   503,   505,   506,   507,  -510,  -510,
-     -510,   203,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,   209,  -510,   508,   509,  -510,
-     -510,   510,   512,  -510,  -510,   513,   515,  -510,  -510,  -510,
-      240,  -510,  -510,  -510,   514,  -510,  -510,  -510,   242,  -510,
-     -510,  -510,  -510,   244,  -510,   516,   518,  -510,   519,   520,
-      521,   522,   523,   524,   211,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,   525,   526,   527,  -510,  -510,   212,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,   213,  -510,
-     -510,  -510,   219,   363,   383,  -510,  -510,   528,   529,  -510,
-     -510,   530,   532,  -510,  -510,   531,   535,  -510,  -510,   533,
-     -510,   536,   304,  -510,  -510,   538,   539,   540,   541,   396,
-      386,   397,   398,   411,   542,   545,   162,  -510,  -510,    24,
-     -510,   469,    63,  -510,   470,    50,  -510,   472,   -43,  -510,
-     -510,   -26,  -510,    41,  -510,   -44,  -510,   494,   414,   416,
-      417,   418,   432,   434,   108,  -510,   546,   548,   435,   436,
-      438,    29,  -510,   549,   550,   159,  -510,  -510,  -510,   551,
-      552,  -510,    -5,  -510,   496,   106,  -510,   497,    73,  -510,
-      499,   554,  -510,   555,  -510,   146,   440,   441,   446,  -510,
-     -510,  -510,  -510,  -510,   447,   448,  -510,   221,  -510,   553,
-     -510,   556,  -510,  -510,  -510,  -510,   222,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,   -33,   454,  -510,  -510,  -510,
-     -510,   457,   459,  -510,  -510,   460,   223,  -510,   231,  -510,
-      558,  -510,   465,   563,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,   246,  -510,    -9,   563,  -510,  -510,   559,  -510,  -510,
-     -510,   232,  -510,  -510,  -510,  -510,  -510,   567,   468,   568,
-       -9,  -510,   569,  -510,   471,  -510,   566,  -510,  -510,   248,
-     -510,   -91,   566,  -510,  -510,   571,   572,   573,   233,  -510,
-     -510,  -510,  -510,  -510,  -510,   574,   439,   473,   474,   -91,
-     -510,   476,  -510,  -510,  -510,  -510,  -510
 -     202,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,    40,    18,    70,    78,   120,   122,   141,
 -     147,   175,   183,   211,   219,   223,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -      18,  -120,    23,    30,    46,    22,     1,    35,   145,    62,
 -     159,   -37,   140,  -702,    36,    72,   106,   154,   207,  -702,
 -    -702,  -702,  -702,  -702,   228,  -702,    66,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,   230,   274,   275,   297,
 -     299,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,   306,  -702,  -702,  -702,    68,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,   312,   103,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,   328,   331,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,   125,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,   144,  -702,  -702,  -702,  -702,   333,  -702,   334,   358,
 -    -702,  -702,  -702,   171,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,   284,
 -     360,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,   361,  -702,  -702,  -702,   362,  -702,  -702,   356,   364,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,   365,   366,  -702,  -702,  -702,  -702,   363,   369,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,   201,
 -    -702,  -702,  -702,   370,  -702,  -702,   371,  -702,   372,   373,
 -    -702,  -702,   374,   375,   376,  -702,  -702,  -702,   203,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,    18,    18,  -702,   218,   377,
 -     378,   379,   380,   381,  -702,    23,  -702,   382,   383,   384,
 -     222,   238,   239,   240,   241,   389,   390,   391,   392,   393,
 -     394,   395,   396,   397,   398,   399,   253,   401,   402,    30,
 -    -702,   403,   255,    46,  -702,    79,   405,   406,   407,   408,
 -     409,   265,   261,   411,   413,   414,   415,    22,  -702,   419,
 -     420,     1,  -702,   421,   276,   422,   277,   280,    35,  -702,
 -     425,   426,   428,   429,   430,   431,   432,  -702,   145,   433,
 -     434,   289,   435,   437,   438,   291,  -702,    62,   439,   292,
 -     293,  -702,   159,   443,   444,     9,  -702,   296,   446,   449,
 -     303,   453,   307,   308,   456,   457,   313,   314,   315,   458,
 -     460,   140,  -702,  -702,  -702,   465,   464,   466,    18,    18,
 -      18,  -702,   468,   469,   470,  -702,  -702,  -702,  -702,  -702,
 -     467,   473,   474,   475,   476,   477,   478,   479,   481,   480,
 -     482,  -702,   483,   484,  -702,   487,  -702,  -702,  -702,  -702,
 -    -702,  -702,   485,   491,  -702,  -702,  -702,   490,   492,   338,
 -     346,   348,  -702,  -702,    56,   349,   495,   496,  -702,   352,
 -     497,  -702,   355,  -702,   357,  -702,  -702,  -702,   487,   487,
 -     487,   359,   367,   385,   386,  -702,   387,   388,  -702,   400,
 -     404,   410,  -702,  -702,   412,  -702,  -702,  -702,   416,    18,
 -    -702,  -702,   417,   418,  -702,   423,  -702,  -702,    16,   424,
 -    -702,  -702,  -702,   115,   427,  -702,    18,    30,   436,  -702,
 -    -702,  -702,    46,   116,   116,   499,   501,   503,   504,   -45,
 -      18,    99,    42,   505,   173,    27,   139,   140,  -702,  -702,
 -     509,  -702,    79,   507,   508,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,   512,   440,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -     225,  -702,   262,  -702,  -702,   264,  -702,  -702,  -702,  -702,
 -     516,   518,   519,   520,   521,  -702,  -702,  -702,   266,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,   268,  -702,   510,   523,  -702,  -702,   522,   524,
 -    -702,  -702,   525,   526,  -702,  -702,   527,   529,  -702,  -702,
 -    -702,    45,  -702,  -702,  -702,   528,  -702,  -702,  -702,   150,
 -    -702,  -702,  -702,  -702,   178,  -702,   533,   537,  -702,   538,
 -     539,   540,   542,   543,   544,   272,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,   545,   547,   548,  -702,  -702,
 -     278,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,   279,
 -    -702,  -702,  -702,   290,   441,   442,  -702,  -702,   535,   550,
 -    -702,  -702,   549,   553,  -702,  -702,   551,   555,  -702,  -702,
 -     556,  -702,   557,   436,  -702,  -702,   561,   565,   566,   567,
 -     445,   447,   448,   450,   451,   568,   570,   116,  -702,  -702,
 -      22,  -702,   499,    62,  -702,   501,   159,  -702,   503,   155,
 -    -702,   504,   -45,  -702,  -702,    99,  -702,    42,  -702,   -37,
 -    -702,   505,   454,   455,   459,   461,   462,   463,   173,  -702,
 -     571,   572,   471,   472,   486,    27,  -702,   574,   575,   139,
 -    -702,  -702,  -702,   576,   577,  -702,     1,  -702,   507,    35,
 -    -702,   508,   145,  -702,   512,   579,  -702,   554,  -702,   335,
 -     488,   489,   493,  -702,  -702,  -702,  -702,  -702,   494,   498,
 -    -702,   309,  -702,   573,  -702,   578,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,   310,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,   311,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,   263,   500,  -702,  -702,
 -    -702,  -702,   502,   513,  -702,  -702,   534,   319,  -702,   320,
 -    -702,   580,  -702,   536,   582,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,   155,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,   288,  -702,  -702,    77,   582,  -702,
 -    -702,   581,  -702,  -702,  -702,   323,  -702,  -702,  -702,  -702,
 -    -702,   583,   511,   586,    77,  -702,   588,  -702,   541,  -702,
 -     587,  -702,  -702,   327,  -702,    63,   587,  -702,  -702,   591,
 -     593,   594,   326,  -702,  -702,  -702,  -702,  -702,  -702,   597,
 -     530,   546,   552,    63,  -702,   558,  -702,  -702,  -702,  -702,
 -    -702
++     192,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,    45,    23,    54,    58,    88,   118,
++     124,   134,   178,   199,   240,   256,   264,   293,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,    23,   -67,    14,    86,   145,    16,
++      56,    92,    32,    66,    40,    93,     8,   143,  -707,    87,
++     227,   304,   275,   307,  -707,  -707,  -707,  -707,  -707,   324,
++    -707,    59,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,   352,   353,   354,   355,   356,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,   357,  -707,  -707,
++    -707,    96,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,   358,   158,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,   359,   360,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,   176,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,   193,  -707,  -707,
++    -707,  -707,   361,  -707,   362,   363,  -707,  -707,  -707,   195,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,   364,   365,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,   366,  -707,  -707,   367,  -707,
++    -707,  -707,   369,  -707,  -707,   368,   372,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,   373,   374,
++    -707,  -707,  -707,  -707,   371,   377,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,   213,  -707,  -707,  -707,
++     378,  -707,  -707,   379,  -707,   380,   381,  -707,  -707,   382,
++     383,   384,  -707,  -707,  -707,   221,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,    23,    23,  -707,   218,   385,   386,   387,   388,
++     389,  -707,    14,  -707,   390,   391,   392,   229,   245,   246,
++     247,   248,   397,   398,   399,   400,   401,   402,   403,   404,
++     405,   406,   407,   260,   409,   410,    86,  -707,   411,   216,
++     145,  -707,    19,   412,   413,   414,   415,   416,   417,   271,
++     268,   420,   421,   422,   423,    16,  -707,   427,    56,  -707,
++     428,   281,   430,   283,   284,    92,  -707,   433,   434,   435,
++     436,   437,   438,   439,  -707,    32,  -707,   440,   441,   297,
++     442,   446,   447,   298,  -707,    40,   449,   300,   303,  -707,
++      93,   454,   455,   155,  -707,   306,   457,   458,   311,   460,
++     313,   316,   466,   467,   318,   321,   322,   469,   473,   143,
++    -707,  -707,  -707,   474,   472,   475,    23,    23,    23,  -707,
++     476,   477,   478,  -707,  -707,  -707,  -707,  -707,   482,   483,
++     484,   485,   486,   487,   488,   489,   490,   491,   492,  -707,
++     493,   494,  -707,   497,  -707,  -707,  -707,  -707,  -707,  -707,
++     495,   501,  -707,  -707,  -707,   500,   502,   499,   329,   330,
++     345,  -707,  -707,    51,   346,   503,   504,  -707,   370,  -707,
++     376,  -707,   393,  -707,  -707,  -707,   497,   497,   497,   394,
++     395,   396,   408,  -707,   418,   419,  -707,   424,   425,   426,
++    -707,  -707,   429,  -707,  -707,  -707,   431,    23,  -707,  -707,
++     432,   443,  -707,   444,  -707,  -707,   107,   445,  -707,  -707,
++    -707,   110,   448,  -707,    23,    86,   451,  -707,  -707,  -707,
++     145,    13,    13,   505,   506,   507,   508,   -13,    23,    -8,
++      91,   509,   122,    30,   223,   143,  -707,  -707,   513,  -707,
++      19,   511,   512,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,   515,   450,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,   237,  -707,
++     266,  -707,  -707,   267,  -707,  -707,  -707,  -707,   516,   519,
++     520,   521,   524,  -707,  -707,  -707,   269,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++     270,  -707,   523,   527,  -707,  -707,   526,   530,  -707,  -707,
++     528,   532,  -707,  -707,   531,   533,  -707,  -707,  -707,    77,
++    -707,  -707,  -707,   534,  -707,  -707,  -707,   136,  -707,  -707,
++    -707,  -707,   166,  -707,   535,   536,  -707,   538,   539,   544,
++     545,   546,   547,   276,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,   548,   549,   550,  -707,  -707,   277,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,   278,  -707,  -707,
++    -707,   279,   452,   453,  -707,  -707,   551,   552,  -707,  -707,
++     554,   553,  -707,  -707,   555,   559,  -707,  -707,   556,  -707,
++     561,   451,  -707,  -707,   563,   564,   567,   568,   456,   459,
++     462,   461,   464,   569,   570,    13,  -707,  -707,    16,  -707,
++     505,    40,  -707,   506,    93,  -707,   507,   161,  -707,   508,
++     -13,  -707,  -707,    -8,  -707,    91,  -707,     8,  -707,   509,
++     465,   468,   470,   471,   479,   480,   122,  -707,   575,   577,
++     481,   496,   498,    30,  -707,   580,   581,   223,  -707,  -707,
++    -707,   557,   583,  -707,    56,  -707,   511,    92,  -707,   512,
++      32,  -707,   515,   584,  -707,   582,  -707,   328,   518,   525,
++     540,  -707,  -707,  -707,  -707,  -707,   541,   542,  -707,   287,
++    -707,   585,  -707,   588,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,   288,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,   294,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,   257,   543,  -707,  -707,  -707,  -707,
++     558,   562,  -707,  -707,   565,   295,  -707,   315,  -707,   589,
++    -707,   566,   591,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,   161,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,   211,  -707,  -707,    74,   591,  -707,  -707,   586,
++    -707,  -707,  -707,   319,  -707,  -707,  -707,  -707,  -707,   587,
++     560,   596,    74,  -707,   597,  -707,   571,  -707,   594,  -707,
++    -707,   212,  -707,   133,   594,  -707,  -707,   601,   602,   603,
++     341,  -707,  -707,  -707,  -707,  -707,  -707,   605,   510,   572,
++     573,   133,  -707,   576,  -707,  -707,  -707,  -707,  -707
    };
  
    const unsigned short int
    Dhcp6Parser::yydefact_[] =
    {
         0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
 -      20,    22,    24,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     1,    41,    34,    30,
 -      29,    26,    27,    28,    33,     3,    31,    32,    54,     5,
 -      66,     7,   100,     9,   213,    11,   344,    13,   364,    15,
 -     391,    17,   281,    19,   316,    21,   178,    23,   475,    25,
 -      43,    37,     0,     0,     0,     0,     0,     0,   393,   283,
 -     318,     0,     0,    45,     0,    44,     0,     0,    38,    64,
 -     528,   522,   524,   526,     0,    63,     0,    56,    58,    60,
 -      61,    62,    59,    98,   109,   111,     0,     0,     0,     0,
 -       0,   205,   273,   308,   249,   151,   168,   159,   424,   170,
 -     189,   441,     0,   463,   473,    92,     0,    68,    70,    71,
 -      72,    73,    74,    77,    78,    79,    80,    82,    81,    86,
 -      87,    75,    76,    84,    85,    83,    88,    89,    90,    91,
 -     106,     0,     0,   102,   104,   105,   428,   336,   356,   234,
 -     236,   238,     0,     0,   242,   240,   383,   420,   233,   217,
 -     218,   219,   220,     0,   215,   224,   225,   226,   229,   231,
 -     227,   228,   221,   222,   223,   230,   232,   352,   354,   351,
 -     349,     0,   346,   348,   350,   376,     0,   379,     0,     0,
 -     375,   371,   374,     0,   366,   368,   369,   372,   373,   370,
 -     418,   406,   408,   410,   412,   414,   416,   405,   404,     0,
 -     394,   395,   399,   400,   397,   401,   402,   403,   398,   298,
 -     141,     0,   302,   300,   305,     0,   294,   295,     0,   284,
 -     285,   287,   297,   288,   289,   290,   304,   291,   292,   293,
 -     330,     0,     0,   328,   329,   332,   333,     0,   319,   320,
 -     322,   323,   324,   325,   326,   327,   185,   187,   182,     0,
 -     180,   183,   184,     0,   495,   497,     0,   500,     0,     0,
 -     504,   508,     0,     0,     0,   513,   520,   493,     0,   477,
 -     479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
 -     489,   490,   491,   492,    42,     0,     0,    35,     0,     0,
 -       0,     0,     0,     0,    53,     0,    55,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 +      20,    22,    24,    26,     0,     0,     0,     0,     0,     0,
 +       0,     0,     0,     0,     0,     0,     0,     0,     1,    43,
 +      36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
-       56,     5,    68,     7,   101,     9,   214,    11,   324,    13,
-      344,    15,   371,    17,   253,    19,   261,    21,   296,    23,
-      179,    25,   455,    27,    45,    39,     0,     0,     0,     0,
-        0,     0,   373,     0,   263,   298,     0,     0,    47,     0,
-       46,     0,     0,    40,    66,   508,   502,   504,   506,     0,
-       65,     0,    58,    60,    62,    63,    64,    61,    99,   110,
-      112,     0,     0,     0,     0,     0,   206,   251,   288,   152,
-      169,   160,   404,   171,   190,   421,     0,   443,   453,    93,
-        0,    70,    72,    73,    74,    75,    76,    78,    79,    80,
-       81,    83,    82,    87,    88,    77,    85,    86,    84,    89,
-       90,    91,    92,   107,     0,     0,   103,   105,   106,   408,
-      316,   336,   334,   236,   238,   240,     0,     0,   244,   242,
-      363,   400,   235,   218,   219,   220,   221,     0,   216,   225,
-      226,   227,   230,   232,   228,   229,   222,   223,   234,   224,
-      231,   233,   332,   331,   329,     0,   326,   328,   330,   356,
-        0,   359,     0,     0,   355,   351,   354,     0,   346,   348,
-      349,   352,   353,   350,   398,   386,   388,   390,   392,   394,
-      396,   385,   384,     0,   374,   375,   379,   380,   377,   381,
-      382,   383,   378,     0,   278,   142,     0,   282,   280,   285,
-        0,   274,   275,     0,   264,   265,   267,   277,   268,   269,
-      270,   284,   271,   272,   273,   310,     0,     0,   308,   309,
-      312,   313,     0,   299,   300,   302,   303,   304,   305,   306,
-      307,   186,   188,   183,     0,   181,   184,   185,     0,   475,
-      477,     0,   480,     0,     0,   484,   488,     0,     0,     0,
-      493,   500,   473,     0,   457,   459,   460,   461,   462,   463,
-      464,   465,   466,   467,   468,   469,   470,   471,   472,    44,
-        0,     0,    37,     0,     0,     0,     0,     0,     0,    55,
-        0,    57,     0,     0,     0,     0,     0,     0,     0,     0,
++      56,     5,    68,     7,   102,     9,   215,    11,   349,    13,
++     369,    15,   396,    17,   278,    19,   286,    21,   321,    23,
++     180,    25,   480,    27,    45,    39,     0,     0,     0,     0,
++       0,     0,   398,     0,   288,   323,     0,     0,    47,     0,
++      46,     0,     0,    40,    66,   533,   527,   529,   531,     0,
++      65,     0,    58,    60,    62,    63,    64,    61,   100,   111,
++     113,     0,     0,     0,     0,     0,   207,   276,   313,   252,
++     153,   170,   161,   429,   172,   191,   446,     0,   468,   478,
++      94,     0,    70,    72,    73,    74,    75,    76,    79,    80,
++      81,    82,    84,    83,    88,    89,    77,    78,    86,    87,
++      85,    90,    91,    92,    93,   108,     0,     0,   104,   106,
++     107,   433,   341,   361,   359,   237,   239,   241,     0,     0,
++     245,   243,   388,   425,   236,   219,   220,   221,   222,     0,
++     217,   226,   227,   228,   231,   233,   229,   230,   223,   224,
++     235,   225,   232,   234,   357,   356,   354,     0,   351,   353,
++     355,   381,     0,   384,     0,     0,   380,   376,   379,     0,
++     371,   373,   374,   377,   378,   375,   423,   411,   413,   415,
++     417,   419,   421,   410,   409,     0,   399,   400,   404,   405,
++     402,   406,   407,   408,   403,     0,   303,   143,     0,   307,
++     305,   310,     0,   299,   300,     0,   289,   290,   292,   302,
++     293,   294,   295,   309,   296,   297,   298,   335,     0,     0,
++     333,   334,   337,   338,     0,   324,   325,   327,   328,   329,
++     330,   331,   332,   187,   189,   184,     0,   182,   185,   186,
++       0,   500,   502,     0,   505,     0,     0,   509,   513,     0,
++       0,     0,   518,   525,   498,     0,   482,   484,   485,   486,
++     487,   488,   489,   490,   491,   492,   493,   494,   495,   496,
++     497,    44,     0,     0,    37,     0,     0,     0,     0,     0,
++       0,    55,     0,    57,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,    69,     0,     0,     0,   102,   410,
 -      67,     0,     0,     0,   101,   430,     0,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,     0,   214,     0,
 -       0,     0,   345,     0,     0,     0,     0,     0,     0,   365,
 -       0,     0,     0,     0,     0,     0,     0,   392,     0,     0,
 -       0,     0,     0,     0,     0,     0,   282,     0,     0,     0,
 -       0,   317,     0,     0,     0,     0,   179,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
++       0,   103,   435,     0,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,   216,     0,     0,   350,
++       0,     0,     0,     0,     0,     0,   370,     0,     0,     0,
++       0,     0,     0,     0,   397,     0,   279,     0,     0,     0,
++       0,     0,     0,     0,   287,     0,     0,     0,     0,   322,
++       0,     0,     0,     0,   181,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,   215,     0,     0,   325,     0,     0,     0,
-        0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
-        0,   372,     0,   254,     0,     0,     0,     0,     0,     0,
-        0,   262,     0,     0,     0,     0,   297,     0,     0,     0,
-        0,   180,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,     0,   456,    48,    41,
-        0,     0,     0,     0,     0,     0,    59,     0,     0,     0,
-       94,    95,    96,    97,    98,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,   442,     0,     0,    71,     0,
-      109,   104,   419,   417,   418,   416,     0,   411,   412,   414,
-      415,     0,     0,     0,     0,     0,     0,   249,   250,     0,
-        0,     0,     0,   217,     0,   327,     0,   358,     0,   361,
-      362,   347,     0,     0,     0,     0,     0,     0,     0,   376,
-        0,     0,   276,     0,     0,     0,   287,   266,     0,   314,
-      315,   301,     0,     0,   182,   474,     0,     0,   479,     0,
-      482,   483,     0,     0,   490,   491,   492,     0,     0,   458,
-        0,     0,     0,   503,   505,   507,     0,     0,     0,   208,
-      255,   290,     0,    45,     0,     0,   173,     0,     0,     0,
-        0,    49,   108,     0,   409,     0,   318,   338,    38,   335,
-      237,   239,   241,   246,   247,   248,   245,   243,   365,     0,
-      333,   357,   360,   399,   387,   389,   391,   393,   395,   397,
-      279,   143,   283,   281,   286,   311,   187,   189,   476,   478,
-      481,   486,   487,   485,   489,   495,   496,   497,   498,   499,
-      494,   501,    42,     0,   513,     0,   510,   512,     0,   129,
-      135,   137,   139,     0,     0,     0,     0,     0,   148,   150,
-      128,     0,   114,   116,   117,   118,   119,   120,   121,   122,
-      123,   124,   125,   126,   127,     0,   212,     0,   209,   210,
-      259,     0,   256,   257,   294,     0,   291,   292,   158,   159,
-        0,   154,   156,   157,     0,   167,   168,   164,     0,   162,
-      165,   166,   406,     0,   177,     0,   174,   175,     0,     0,
-        0,     0,     0,     0,     0,   192,   194,   195,   196,   197,
-      198,   199,   432,   438,     0,     0,     0,   431,   430,     0,
-      423,   425,   428,   426,   427,   429,   449,   451,     0,   445,
-      447,   448,     0,    51,     0,   413,   322,     0,   319,   320,
-      342,     0,   339,   340,   369,     0,   366,   367,   402,     0,
-       67,     0,     0,   509,   100,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,     0,   111,   113,     0,
-      207,     0,   263,   252,     0,   298,   289,     0,     0,   153,
-      170,     0,   161,     0,   405,     0,   172,     0,     0,     0,
-        0,     0,     0,     0,     0,   191,     0,     0,     0,     0,
-        0,     0,   422,     0,     0,     0,   444,   454,    53,     0,
-       52,   420,     0,   317,     0,     0,   337,     0,   373,   364,
-        0,     0,   401,     0,   511,     0,     0,     0,     0,   141,
-      144,   145,   146,   147,     0,     0,   115,     0,   211,     0,
-      258,     0,   293,   155,   163,   407,     0,   176,   200,   201,
-      202,   203,   204,   205,   193,     0,     0,   437,   440,   441,
-      424,     0,     0,   446,    50,     0,     0,   321,     0,   341,
-        0,   368,     0,     0,   131,   132,   133,   134,   130,   136,
-      138,   140,   149,   151,   213,   260,   295,   178,   434,   435,
-      436,   433,   439,   450,   452,    54,   323,   343,   370,   403,
-      517,     0,   515,     0,     0,   514,   529,     0,   527,   525,
-      521,     0,   519,   523,   524,   522,   516,     0,     0,     0,
-        0,   518,     0,   526,     0,   520,     0,   528,   533,     0,
-      531,     0,     0,   530,   541,     0,     0,     0,     0,   535,
-      537,   538,   539,   540,   532,     0,     0,     0,     0,     0,
-      534,     0,   543,   544,   545,   536,   542
 -       0,     0,   476,    46,    39,     0,     0,     0,     0,     0,
 -       0,    57,     0,     0,     0,    93,    94,    95,    96,    97,
 -       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,   462,     0,     0,    69,     0,   108,   103,   439,   437,
 -     438,   436,     0,   431,   432,   434,   435,     0,     0,     0,
 -       0,     0,   247,   248,     0,     0,     0,     0,   216,     0,
 -       0,   347,     0,   378,     0,   381,   382,   367,     0,     0,
 -       0,     0,     0,     0,     0,   396,     0,     0,   296,     0,
 -       0,     0,   307,   286,     0,   334,   335,   321,     0,     0,
 -     181,   494,     0,     0,   499,     0,   502,   503,     0,     0,
 -     510,   511,   512,     0,     0,   478,     0,     0,     0,   523,
 -     525,   527,     0,     0,     0,   207,   275,   310,   251,     0,
 -      43,     0,     0,   172,     0,     0,     0,     0,    47,   107,
 -       0,   429,     0,   338,   358,   235,   237,   239,   244,   245,
 -     246,   243,   241,   385,     0,   353,    36,   355,   377,   380,
 -     419,   407,   409,   411,   413,   415,   417,   299,   142,   303,
 -     301,   306,   331,   186,   188,   496,   498,   501,   506,   507,
 -     505,   509,   515,   516,   517,   518,   519,   514,   521,    40,
 -       0,   533,     0,   530,   532,     0,   128,   134,   136,   138,
 -       0,     0,     0,     0,     0,   147,   149,   127,     0,   113,
 -     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
 -     125,   126,     0,   211,     0,   208,   209,   279,     0,   276,
 -     277,   314,     0,   311,   312,   255,     0,   252,   253,   157,
 -     158,     0,   153,   155,   156,     0,   166,   167,   163,     0,
 -     161,   164,   165,   426,     0,   176,     0,   173,   174,     0,
 -       0,     0,     0,     0,     0,     0,   191,   193,   194,   195,
 -     196,   197,   198,   452,   458,     0,     0,     0,   451,   450,
 -       0,   443,   445,   448,   446,   447,   449,   469,   471,     0,
 -     465,   467,   468,     0,    49,     0,   433,   342,     0,   339,
 -     340,   362,     0,   359,   360,   389,     0,   386,   387,   422,
 -       0,    65,     0,     0,   529,    99,     0,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,     0,   110,   112,
 -       0,   206,     0,   283,   274,     0,   318,   309,     0,     0,
 -     250,     0,     0,   152,   169,     0,   160,     0,   425,     0,
 -     171,     0,     0,     0,     0,     0,     0,     0,     0,   190,
 -       0,     0,     0,     0,     0,     0,   442,     0,     0,     0,
 -     464,   474,    51,     0,    50,   440,     0,   337,     0,     0,
 -     357,     0,   393,   384,     0,     0,   421,     0,   531,     0,
 -       0,     0,     0,   140,   143,   144,   145,   146,     0,     0,
 -     114,     0,   210,     0,   278,     0,   313,   272,   269,   271,
 -     263,   264,   259,   260,   261,   262,   267,   270,     0,   257,
 -     265,   266,   268,   254,   154,   162,   427,     0,   175,   199,
 -     200,   201,   202,   203,   204,   192,     0,     0,   457,   460,
 -     461,   444,     0,     0,   466,    48,     0,     0,   341,     0,
 -     361,     0,   388,     0,     0,   130,   131,   132,   133,   129,
 -     135,   137,   139,   148,   150,   212,   280,   315,     0,   256,
 -     177,   454,   455,   456,   453,   459,   470,   472,    52,   343,
 -     363,   390,   423,   537,     0,   535,   258,     0,     0,   534,
 -     549,     0,   547,   545,   541,     0,   539,   543,   544,   542,
 -     536,     0,     0,     0,     0,   538,     0,   546,     0,   540,
 -       0,   548,   553,     0,   551,     0,     0,   550,   561,     0,
 -       0,     0,     0,   555,   557,   558,   559,   560,   552,     0,
 -       0,     0,     0,     0,   554,     0,   563,   564,   565,   556,
 -     562
++     481,    48,    41,     0,     0,     0,     0,     0,     0,    59,
++       0,     0,     0,    95,    96,    97,    98,    99,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,     0,   467,
++       0,     0,    71,     0,   110,   105,   444,   442,   443,   441,
++       0,   436,   437,   439,   440,     0,     0,     0,     0,     0,
++       0,   250,   251,     0,     0,     0,     0,   218,     0,   352,
++       0,   383,     0,   386,   387,   372,     0,     0,     0,     0,
++       0,     0,     0,   401,     0,     0,   301,     0,     0,     0,
++     312,   291,     0,   339,   340,   326,     0,     0,   183,   499,
++       0,     0,   504,     0,   507,   508,     0,     0,   515,   516,
++     517,     0,     0,   483,     0,     0,     0,   528,   530,   532,
++       0,     0,     0,   209,   280,   315,   254,     0,    45,     0,
++       0,   174,     0,     0,     0,     0,    49,   109,     0,   434,
++       0,   343,   363,    38,   360,   238,   240,   242,   247,   248,
++     249,   246,   244,   390,     0,   358,   382,   385,   424,   412,
++     414,   416,   418,   420,   422,   304,   144,   308,   306,   311,
++     336,   188,   190,   501,   503,   506,   511,   512,   510,   514,
++     520,   521,   522,   523,   524,   519,   526,    42,     0,   538,
++       0,   535,   537,     0,   130,   136,   138,   140,     0,     0,
++       0,     0,     0,   149,   151,   129,     0,   115,   117,   118,
++     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
++       0,   213,     0,   210,   211,   284,     0,   281,   282,   319,
++       0,   316,   317,   258,     0,   255,   256,   159,   160,     0,
++     155,   157,   158,     0,   168,   169,   165,     0,   163,   166,
++     167,   431,     0,   178,     0,   175,   176,     0,     0,     0,
++       0,     0,     0,     0,   193,   195,   196,   197,   198,   199,
++     200,   457,   463,     0,     0,     0,   456,   455,     0,   448,
++     450,   453,   451,   452,   454,   474,   476,     0,   470,   472,
++     473,     0,    51,     0,   438,   347,     0,   344,   345,   367,
++       0,   364,   365,   394,     0,   391,   392,   427,     0,    67,
++       0,     0,   534,   101,     0,     0,     0,     0,     0,     0,
++       0,     0,     0,     0,     0,     0,   112,   114,     0,   208,
++       0,   288,   277,     0,   323,   314,     0,     0,   253,     0,
++       0,   154,   171,     0,   162,     0,   430,     0,   173,     0,
++       0,     0,     0,     0,     0,     0,     0,   192,     0,     0,
++       0,     0,     0,     0,   447,     0,     0,     0,   469,   479,
++      53,     0,    52,   445,     0,   342,     0,     0,   362,     0,
++     398,   389,     0,     0,   426,     0,   536,     0,     0,     0,
++       0,   142,   145,   146,   147,   148,     0,     0,   116,     0,
++     212,     0,   283,     0,   318,   275,   272,   274,   266,   267,
++     262,   263,   264,   265,   270,   273,     0,   260,   268,   269,
++     271,   257,   156,   164,   432,     0,   177,   201,   202,   203,
++     204,   205,   206,   194,     0,     0,   462,   465,   466,   449,
++       0,     0,   471,    50,     0,     0,   346,     0,   366,     0,
++     393,     0,     0,   132,   133,   134,   135,   131,   137,   139,
++     141,   150,   152,   214,   285,   320,     0,   259,   179,   459,
++     460,   461,   458,   464,   475,   477,    54,   348,   368,   395,
++     428,   542,     0,   540,   261,     0,     0,   539,   554,     0,
++     552,   550,   546,     0,   544,   548,   549,   547,   541,     0,
++       0,     0,     0,   543,     0,   551,     0,   545,     0,   553,
++     558,     0,   556,     0,     0,   555,   566,     0,     0,     0,
++       0,   560,   562,   563,   564,   565,   557,     0,     0,     0,
++       0,     0,   559,     0,   568,   569,   570,   561,   567
    };
  
    const short int
    Dhcp6Parser::yypgoto_[] =
    {
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,     7,  -510,   103,  -510,  -510,
-     -510,  -510,  -510,  -510,    36,  -510,  -215,  -510,  -510,  -510,
-      -66,  -510,  -510,  -510,   269,  -510,  -510,  -510,  -510,    69,
-      267,   -67,   -62,   -49,   -48,  -510,  -510,  -510,  -510,  -510,
-       65,   245,  -510,  -510,  -510,  -510,  -510,  -510,  -510,    66,
-     -128,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,   -74,  -510,  -509,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -135,  -498,  -510,  -510,  -510,  -510,
-     -137,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -142,
-     -510,  -510,  -510,  -136,   216,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -143,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -119,  -510,  -510,  -510,  -116,   253,  -510,
-     -510,  -510,  -510,  -510,  -510,  -501,  -510,  -510,  -510,  -510,
-     -510,  -510,   543,  -510,  -510,  -510,  -510,  -510,  -113,  -510,
-     -510,  -510,  -114,  -510,   230,  -510,   -59,  -510,  -510,  -510,
-     -510,  -510,   -52,  -510,  -510,  -510,  -510,  -510,   -57,  -510,
-     -510,  -510,  -110,  -510,  -510,  -510,  -112,  -510,   235,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -150,  -510,  -510,  -510,  -144,   293,  -510,  -510,   -53,  -510,
-     -510,  -510,  -510,  -510,  -147,  -510,  -510,  -510,  -138,   298,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -141,  -510,  -510,  -510,  -145,  -510,   258,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,    93,  -510,  -510,  -510,  -510,  -510,  -510,  -120,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -123,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,   104,   234,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,  -510,
-     -510,  -510,  -510,  -510,  -510,   -69,  -510,  -510,  -510,  -219,
-     -510,  -510,  -234,  -510,  -510,  -510,  -510,  -510,  -510,  -245,
-     -510,  -510,  -261,  -510,  -510,  -510,  -510,  -510
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,    12,  -702,   124,  -702,  -702,  -702,
 -    -702,  -702,  -702,    10,  -702,  -109,  -702,  -702,  -702,   -62,
 -    -702,  -702,  -702,   302,  -702,  -702,  -702,  -702,    97,   282,
 -     -64,   -63,   -50,   -48,  -702,  -702,  -702,  -702,  -702,    96,
 -     283,  -702,  -702,  -702,  -702,  -702,  -702,  -702,    95,  -102,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -     -58,  -702,  -511,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -115,  -499,  -702,  -702,  -702,  -702,  -117,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -122,  -702,
 -    -702,  -702,  -119,   236,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -124,  -702,  -702,  -702,  -702,  -702,  -702,  -701,  -702,
 -    -702,  -702,   -97,  -702,  -702,  -702,   -94,   281,  -702,  -702,
 -    -697,  -702,  -695,  -702,  -506,  -702,  -694,  -702,  -702,  -702,
 -    -693,  -702,  -702,  -702,  -702,  -104,  -702,  -702,  -229,  -702,
 -    -702,  -702,  -702,   -95,  -702,  -702,  -702,   -92,  -702,   256,
 -    -702,   -57,  -702,  -702,  -702,  -702,  -702,   -46,  -702,  -702,
 -    -702,  -702,  -702,   -47,  -702,  -702,  -702,   -96,  -702,  -702,
 -    -702,   -91,  -702,   252,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -132,  -702,  -702,  -702,  -126,
 -     294,  -702,  -702,   -56,  -702,  -702,  -702,  -702,  -702,  -130,
 -    -702,  -702,  -702,  -127,   295,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -128,  -702,  -702,  -702,
 -    -125,  -702,   286,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -692,  -702,  -702,
 -    -702,  -691,  -702,  -702,  -702,  -702,  -702,   117,  -702,  -702,
 -    -702,  -702,  -702,  -702,   -81,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -108,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,   133,   287,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,  -702,
 -     -28,  -702,  -702,  -702,  -202,  -702,  -702,  -216,  -702,  -702,
 -    -702,  -702,  -702,  -702,  -221,  -702,  -702,  -236,  -702,  -702,
 -    -702,  -702,  -702
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,    12,  -707,    53,  -707,  -707,
++    -707,  -707,  -707,  -707,    10,  -707,  -123,  -707,  -707,  -707,
++     -66,  -707,  -707,  -707,   280,  -707,  -707,  -707,  -707,    43,
++     253,   -62,   -50,   -49,   -48,  -707,  -707,  -707,  -707,  -707,
++      90,   272,  -707,  -707,  -707,  -707,  -707,  -707,  -707,    89,
++    -107,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,   -74,  -707,  -521,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -121,  -507,  -707,  -707,  -707,  -707,
++    -122,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -125,
++    -707,  -707,  -707,  -120,   232,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -130,  -707,  -707,  -707,  -707,  -707,  -707,  -706,
++    -707,  -707,  -707,  -102,  -707,  -707,  -707,   -99,   282,  -707,
++    -707,  -704,  -707,  -693,  -707,  -517,  -707,  -686,  -707,  -707,
++    -707,  -684,  -707,  -707,  -707,  -707,  -109,  -707,  -707,  -232,
++     574,  -707,  -707,  -707,  -707,  -707,   -98,  -707,  -707,  -707,
++     -95,  -707,   254,  -707,   -73,  -707,  -707,  -707,  -707,  -707,
++     -61,  -707,  -707,  -707,  -707,  -707,   -54,  -707,  -707,  -707,
++     -96,  -707,  -707,  -707,   -93,  -707,   252,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -138,  -707,
++    -707,  -707,  -131,   286,  -707,  -707,   -45,  -707,  -707,  -707,
++    -707,  -707,  -134,  -707,  -707,  -707,  -128,   289,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -136,
++    -707,  -707,  -707,  -127,  -707,   292,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -678,  -707,  -707,  -707,  -677,  -707,  -707,  -707,  -707,  -707,
++     112,  -707,  -707,  -707,  -707,  -707,  -707,  -108,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -111,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,   123,
++     261,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,  -707,
++    -707,  -707,  -707,   -39,  -707,  -707,  -707,  -229,  -707,  -707,
++    -225,  -707,  -707,  -707,  -707,  -707,  -707,  -230,  -707,  -707,
++    -249,  -707,  -707,  -707,  -707,  -707
    };
  
    const short int
    Dhcp6Parser::yydefgoto_[] =
    {
 -      -1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
 -      22,    23,    24,    25,    73,    35,    36,    61,   547,    77,
 -      78,    37,    60,    74,    75,   529,   684,   763,   764,   115,
 -      39,    62,    86,    87,    88,   299,    41,    63,   116,   117,
 -     118,   119,   120,   121,   122,   123,   307,    43,    64,   142,
 -     143,   144,   331,   145,   124,   308,   125,   309,   598,   599,
 -     600,   706,   849,   601,   707,   602,   708,   603,   709,   604,
 -     227,   370,   606,   607,   608,   609,   610,   715,   611,   716,
 -     126,   319,   631,   632,   633,   634,   127,   321,   639,   640,
 -     641,   642,   128,   320,   129,   323,   646,   647,   648,   739,
 -      57,    71,   259,   260,   261,   383,   262,   384,   130,   324,
 -     655,   656,   657,   658,   659,   660,   661,   662,   131,   315,
 -     614,   615,   616,   720,    45,    65,   163,   164,   165,   338,
 -     166,   339,   167,   340,   168,   344,   169,   343,   541,   170,
 -     171,   132,   318,   626,   627,   628,   729,   808,   809,   133,
 -     316,   618,   619,   620,   723,    53,    69,   228,   229,   230,
 -     231,   232,   233,   234,   369,   235,   373,   236,   372,   237,
 -     238,   374,   239,   134,   317,   622,   623,   624,   726,    55,
 -      70,   247,   248,   249,   250,   251,   378,   252,   253,   254,
 -     255,   173,   336,   688,   689,   690,   766,    47,    66,   181,
 -     182,   183,   349,   184,   350,   174,   337,   692,   693,   694,
 -     769,    49,    67,   193,   194,   195,   353,   196,   197,   355,
 -     198,   199,   175,   345,   696,   697,   698,   772,    51,    68,
 -     209,   210,   211,   212,   361,   213,   362,   214,   363,   215,
 -     364,   216,   365,   217,   366,   218,   360,   176,   346,   700,
 -     775,   135,   322,   644,   335,   442,   443,   444,   445,   446,
 -     530,   136,   325,   670,   671,   672,   750,   864,   673,   674,
 -     751,   675,   676,   137,   138,   327,   679,   680,   681,   757,
 -     682,   758,   139,   328,    59,    72,   278,   279,   280,   281,
 -     388,   282,   389,   283,   284,   391,   285,   286,   287,   394,
 -     570,   288,   395,   289,   290,   291,   292,   399,   577,   293,
 -     400,    89,   301,    90,   302,    91,   303,    92,   300,   582,
 -     583,   584,   702,   874,   875,   877,   885,   886,   887,   888,
 -     893,   889,   891,   903,   904,   905,   912,   913,   914,   919,
 -     915,   916,   917
 +      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-       23,    24,    25,    26,    27,    78,    37,    38,    65,   539,
-       82,    83,    39,    64,    79,    80,   532,   683,   759,   760,
-      119,    41,    66,    91,    92,    93,   304,    43,    67,   120,
-      121,   122,   123,   124,   125,   126,   127,   312,    45,    68,
-      145,   146,   147,   335,   148,   128,   313,   129,   314,   601,
-      602,   603,   705,   828,   604,   706,   605,   707,   606,   708,
-      607,   232,   375,   609,   610,   611,   612,   613,   714,   614,
-      715,   130,   323,   630,   631,   632,   633,   131,   325,   638,
-      639,   640,   641,   132,   324,   133,   327,   645,   646,   647,
-      735,    61,    76,   264,   265,   266,   388,   267,   389,   134,
-      328,   654,   655,   656,   657,   658,   659,   660,   661,   135,
-      320,   617,   618,   619,   719,    47,    69,   167,   168,   169,
-      343,   170,   344,   171,   345,   172,   349,   173,   348,   546,
-      174,   175,   136,   321,    55,    73,   621,   622,   623,   722,
-       57,    74,   233,   234,   235,   236,   237,   238,   239,   374,
-      240,   378,   241,   377,   242,   243,   379,   244,   137,   322,
-      625,   626,   627,   725,    59,    75,   252,   253,   254,   255,
-      256,   383,   257,   258,   259,   260,   177,   340,   687,   688,
-      689,   762,    49,    70,   185,   186,   187,   354,   178,   342,
-      179,   341,   691,   692,   693,   765,    51,    71,   197,   198,
-      199,   357,   200,   201,   359,   202,   203,   180,   350,   695,
-      696,   697,   768,    53,    72,   213,   214,   215,   216,   365,
-      217,   366,   218,   367,   219,   368,   220,   369,   221,   370,
-      222,   364,   181,   351,   699,   771,   138,   326,   643,   339,
-      446,   447,   448,   449,   450,   533,   139,   329,   669,   670,
-      671,   746,   841,   672,   673,   747,   674,   675,   140,   141,
-      331,   678,   679,   680,   753,   681,   754,   142,   332,    63,
-       77,   283,   284,   285,   286,   393,   287,   394,   288,   289,
-      396,   290,   291,   292,   399,   573,   293,   400,   294,   295,
-      296,   297,   404,   580,   298,   405,    94,   306,    95,   307,
-       96,   308,    97,   305,   585,   586,   587,   701,   851,   852,
-      853,   861,   862,   863,   864,   869,   865,   867,   879,   880,
-      881,   888,   889,   890,   895,   891,   892,   893
++      23,    24,    25,    26,    27,    78,    37,    38,    65,   544,
++      82,    83,    39,    64,    79,    80,   537,   692,   771,   772,
++     120,    41,    66,    91,    92,    93,   306,    43,    67,   121,
++     122,   123,   124,   125,   126,   127,   128,   314,    45,    68,
++     147,   148,   149,   338,   150,   129,   315,   130,   316,   606,
++     607,   608,   714,   857,   609,   715,   610,   716,   611,   717,
++     612,   234,   378,   614,   615,   616,   617,   618,   723,   619,
++     724,   131,   326,   639,   640,   641,   642,   132,   328,   647,
++     648,   649,   650,   133,   327,   134,   330,   654,   655,   656,
++     747,    61,    76,   266,   267,   268,   391,   269,   392,   135,
++     331,   663,   664,   665,   666,   667,   668,   669,   670,   136,
++     322,   622,   623,   624,   728,    47,    69,   169,   170,   171,
++     346,   172,   347,   173,   348,   174,   352,   175,   351,   551,
++     176,   177,   137,   325,   634,   635,   636,   737,   816,   817,
++     138,   323,    55,    73,   626,   627,   628,   731,    57,    74,
++     235,   236,   237,   238,   239,   240,   241,   377,   242,   381,
++     243,   380,   244,   245,   382,   246,   139,   324,   630,   631,
++     632,   734,    59,    75,   254,   255,   256,   257,   258,   386,
++     259,   260,   261,   262,   179,   343,   696,   697,   698,   774,
++      49,    70,   187,   188,   189,   357,   180,   345,   181,   344,
++     700,   701,   702,   777,    51,    71,   199,   200,   201,   360,
++     202,   203,   362,   204,   205,   182,   353,   704,   705,   706,
++     780,    53,    72,   215,   216,   217,   218,   368,   219,   369,
++     220,   370,   221,   371,   222,   372,   223,   373,   224,   367,
++     183,   354,   708,   783,   140,   329,   652,   342,   450,   451,
++     452,   453,   454,   538,   141,   332,   678,   679,   680,   758,
++     872,   681,   682,   759,   683,   684,   142,   143,   334,   687,
++     688,   689,   765,   690,   766,   144,   335,    63,    77,   285,
++     286,   287,   288,   396,   289,   397,   290,   291,   399,   292,
++     293,   294,   402,   578,   295,   403,   296,   297,   298,   299,
++     407,   585,   300,   408,    94,   308,    95,   309,    96,   310,
++      97,   307,   590,   591,   592,   710,   882,   883,   885,   893,
++     894,   895,   896,   901,   897,   899,   911,   912,   913,   920,
++     921,   922,   927,   923,   924,   925
    };
  
    const unsigned short int
    Dhcp6Parser::yytable_[] =
    {
-       90,   249,   163,   162,   183,   194,   211,   164,   231,   248,
-      263,   282,   176,   184,   195,   212,   250,   188,   196,   668,
-      165,   166,    36,   251,   642,    29,   637,    30,    84,    31,
-      225,   149,   628,   108,   543,   544,   545,   884,   261,   262,
-      885,   886,   887,    98,   182,   662,    99,   100,   149,   628,
-      635,   152,   636,    28,   594,   101,   102,   103,   104,   838,
-      839,   840,   108,   101,   102,   103,   104,   105,   106,   107,
-      108,   310,   150,   333,   151,    81,   311,   107,   334,   224,
-      152,   153,   154,   155,   156,   157,   158,   108,   225,   225,
-      245,   226,   227,   246,   247,   159,   160,    40,   109,   110,
-      111,   112,   225,   161,   226,   227,    89,   629,   228,   229,
-      230,   108,   159,   113,   143,   144,   114,   337,   856,   442,
-      857,   858,   338,   115,   663,   664,   665,   666,   352,   355,
-       42,   116,   117,   353,   356,   118,    44,   575,   576,   577,
-      578,    89,   204,    85,   108,    89,   205,   206,   207,   208,
-      209,   210,    86,    87,    88,   571,   572,   189,   190,   191,
-      192,   193,   152,   824,   825,   826,   827,    46,    89,   579,
-       32,    33,    34,    35,    89,   362,   390,    48,   589,    89,
-      363,   391,    89,   590,   591,   592,   593,   594,   595,   596,
-      597,   598,   599,   648,   649,   650,   651,   652,   653,    89,
-       89,   225,   406,   333,   702,   337,   716,   407,   700,   703,
-      704,   717,   716,    89,   744,   751,   755,   718,   300,   745,
-      752,   756,   406,    89,   352,   390,   355,   757,   301,   834,
-      837,   846,   795,   637,   362,   870,   899,   261,   262,   847,
-      871,   900,   668,   728,    90,   731,   729,   733,   732,   854,
-      734,   882,   855,   299,   883,   303,    89,   553,   554,   555,
-      676,   677,    50,    52,    54,   444,    56,    58,    60,    62,
-      309,   302,   315,   443,   316,   317,   318,   319,   330,   336,
-      346,   347,   445,   358,   360,   163,   162,   361,   372,   183,
-      164,   376,   371,   380,   373,   176,   194,   382,   184,   381,
-      384,   385,   188,   165,   166,   195,   211,   408,   409,   196,
-      386,   387,    89,   249,   392,   212,   231,   395,   397,   398,
-      401,   248,   402,   403,   410,   411,   412,   413,   250,   414,
-      415,   417,   418,   419,   420,   251,   421,   422,   423,   424,
-      282,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-      277,   278,   279,   280,   281,     1,     2,     3,     4,     5,
-        6,     7,     8,     9,    10,    11,    12,    13,   425,   426,
 -      85,   159,   160,   158,   179,   190,   207,   226,   243,   258,
 -     277,   192,   244,   245,   669,   161,   643,   162,   172,   180,
 -     191,   208,   638,    27,   246,    28,    34,    29,   803,   146,
 -      76,   629,   804,    79,   805,   806,   807,   811,   812,   103,
 -      26,    93,   294,   663,    94,    95,   256,   257,   732,   146,
 -     177,   733,   591,    96,    97,    98,    99,   178,   140,   141,
 -     103,    96,    97,    98,    99,   100,   101,   102,   103,   305,
 -     147,   329,   148,   103,   306,   295,   330,    38,   219,   149,
 -     150,   151,   152,   153,   154,    40,   185,   186,   187,   188,
 -     189,   178,   256,   257,   155,   156,   104,   105,   106,   107,
 -     108,   220,   157,   221,   222,   630,   333,   223,   224,   225,
 -     296,   334,   109,    84,   155,   110,   220,   103,   220,   538,
 -     539,   540,   111,   664,   665,   666,   667,    42,   347,    44,
 -     112,   113,   586,   348,   114,   568,   569,   587,   588,   589,
 -     590,   591,   592,   593,   594,   595,   596,   351,    46,    80,
 -     438,    84,   352,   735,    48,   220,   736,   803,    81,    82,
 -      83,   804,   297,   805,   806,   807,   811,   812,    30,    31,
 -      32,    33,    84,    84,   358,   629,   636,    84,   637,   359,
 -      84,   737,    50,   103,   738,    84,    96,    97,    98,    99,
 -      52,   101,   908,   103,   220,   909,   910,   911,   220,   240,
 -     221,   222,   241,   242,   385,   880,   401,   881,   882,   386,
 -     298,   402,    84,   150,   151,   200,   153,   154,    54,   201,
 -     202,   203,   204,   205,   206,   108,    56,    84,   329,    84,
 -      58,   816,   304,   701,   310,   157,   638,   572,   573,   574,
 -     575,   677,   678,    85,   669,   263,   264,   265,   266,   267,
 -     268,   269,   270,   271,   272,   273,   274,   275,   276,   649,
 -     650,   651,   652,   653,   654,   703,    84,   333,   576,   717,
 -     704,   717,   705,   439,   718,   748,   719,   440,   311,   312,
 -     749,   755,   759,   159,   160,   158,   756,   760,   441,   179,
 -      84,   878,   367,   401,   879,    84,   190,   161,   761,   162,
 -     172,   313,   192,   314,   180,    84,   207,   403,   404,    84,
 -     326,   191,   347,   858,   385,   226,   332,   855,   859,   860,
 -     243,   208,   351,   358,   244,   245,   894,   869,   870,   923,
 -     906,   895,   341,   907,   924,   342,   246,   354,   356,   277,
++      90,   251,   252,   164,   185,   196,   213,   165,   233,   250,
++     265,   284,   677,   651,   253,   178,   186,   197,   214,   166,
++     167,   168,   646,   151,    84,   190,   198,    36,    29,   594,
++      30,   811,    31,   812,   595,   596,   597,   598,   599,   600,
++     601,   602,   603,   604,   813,    28,   671,   101,   102,   103,
++     104,   814,   227,   815,   108,   599,   226,   108,   227,   819,
++     820,    40,   312,   637,   152,    42,   153,   313,   637,   644,
++     108,   645,   154,   155,   156,   157,   158,   159,   160,   227,
++     740,   228,   229,   741,    81,   230,   231,   232,   161,   162,
++     446,   263,   264,   301,   108,    44,   163,    98,   151,   336,
++      99,   100,   206,   107,   337,   184,   207,   208,   209,   210,
++     211,   212,   154,   227,   548,   549,   550,   101,   102,   103,
++     104,   105,   106,   107,   108,    46,   672,   673,   674,   675,
++     108,    48,   227,   247,   228,   229,   248,   249,   638,   743,
++      85,    50,   744,   191,   192,   193,   194,   195,   154,    86,
++      87,    88,   109,   110,   111,   112,   113,   145,   146,    89,
++     811,   340,   812,   161,    89,    89,   341,    89,   114,   745,
++      89,   115,   746,   813,    32,    33,    34,    35,   116,   355,
++     814,    89,   815,    89,   356,    52,   117,   118,   819,   820,
++     119,    89,   101,   102,   103,   104,   358,   106,   365,   108,
++     227,   359,   888,   366,   889,   890,    54,    89,   657,   658,
++     659,   660,   661,   662,   886,   914,   393,   887,   915,   156,
++     157,   394,   159,   160,   409,    89,   576,   577,   824,   410,
++     302,   113,   580,   581,   582,   583,   646,    89,   263,   264,
++     336,   163,   677,    89,    89,   709,    90,    56,   270,   271,
++     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
++     282,   283,   916,    58,   584,   917,   918,   919,   448,   711,
++     340,    60,   725,   725,   712,   713,   447,   726,   727,   756,
++     763,   767,   409,   304,   757,   764,   768,   769,   449,   164,
++     355,   866,   185,   165,    89,   863,   867,   393,   358,   196,
++      62,   178,   868,   877,   186,   166,   167,   168,   303,   213,
++     305,   197,    89,   190,   411,   412,   251,   252,   365,   233,
++     198,   214,   902,   878,   250,   685,   686,   903,   311,   253,
+        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
 -      11,    12,   845,   846,   847,   848,   861,   862,   863,   550,
 -     551,   552,   357,   368,   376,   371,   375,   377,   405,   379,
 -     380,   381,   382,   415,   387,   390,   392,   393,   396,   397,
 -     398,   406,   407,   408,   409,   410,   412,   413,   414,   416,
 -     417,   418,   419,   420,   421,   422,   423,   424,   425,   426,
 -     427,   428,   429,   430,   431,   432,   433,   435,   436,   447,
 -     448,   449,   450,   451,   453,   454,   452,   455,   456,   457,
 -     509,   510,   511,   459,   460,   462,   464,   463,   465,   468,
 -     469,   466,   470,   471,   472,   473,   474,   476,   477,   479,
 -     478,   480,   481,   484,   482,   485,   486,   488,   489,   491,
 -     492,   597,   597,   493,   494,   605,   605,   495,   496,   497,
 -     498,   499,   503,   668,   504,   277,   500,   501,   502,   506,
 -     439,   507,   515,   508,   440,   512,   513,   514,   516,   517,
 -     518,   519,   520,   521,   522,   441,   523,   524,   535,   525,
 -     526,   527,   528,   531,   532,   533,   536,   534,   537,   542,
 -     543,   564,   545,   544,    28,   548,   613,   549,   617,   553,
 -     621,   625,   645,   685,   687,   691,   721,   554,   579,   695,
 -     710,   699,   711,   712,   713,   714,   722,   725,   724,   728,
 -     635,   727,   731,   730,   734,   555,   556,   557,   558,   740,
 -     741,   767,   742,   743,   744,   571,   745,   746,   747,   752,
 -     559,   753,   754,   768,   560,   770,   771,   773,   774,   844,
 -     561,   777,   562,   581,   776,   779,   563,   565,   566,   780,
 -     781,   782,   788,   567,   789,   826,   827,   578,   832,   833,
 -     836,   856,   835,   843,   546,   892,   857,   896,   871,   873,
 -     898,   762,   765,   900,   902,   920,   783,   921,   922,   785,
 -     784,   925,   787,   786,   580,   819,   820,   411,   585,   612,
 -     821,   434,   822,   823,   824,   790,   437,   814,   815,   818,
 -     817,   490,   828,   829,   825,   792,   791,   813,   458,   876,
 -     794,   793,   796,   483,   487,   795,   838,   830,   850,   851,
 -     837,   840,   839,   852,   853,   461,   842,   841,   854,   686,
 -     865,   834,   866,   467,   475,   597,   159,   160,   158,   605,
 -     683,   226,   897,   867,   243,   798,   799,   797,   244,   245,
 -     161,   802,   162,   172,   831,   778,   890,   258,   899,   800,
 -     246,   801,   810,   926,   868,   918,   872,   929,   505,     0,
 -       0,   901,     0,   668,     0,     0,     0,   927,     0,     0,
 -       0,     0,     0,   928,   179,     0,     0,   190,   930,     0,
 -     207,     0,     0,   192,     0,     0,     0,     0,     0,   180,
 -       0,     0,   191,     0,     0,   208,     0,     0,     0,     0,
 -       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
++      11,    12,    13,   284,   931,   853,   854,   855,   856,   932,
++     869,   870,   871,   558,   559,   560,   317,   318,   319,   320,
++     321,   333,   339,   349,   350,   361,   363,   364,   375,   413,
++     444,   379,   374,   383,   376,   385,   384,   387,   388,   389,
++     390,   423,   395,   398,   400,   401,   404,   405,   406,   414,
++     415,   416,   417,   418,   420,   421,   422,   424,   425,   426,
 +     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-      437,   439,   440,   451,   452,   453,   454,    89,   455,   456,
-      457,   458,   459,   460,   461,   462,   464,   466,   468,   472,
-      467,   469,   470,   473,   474,   475,   476,   477,   478,   480,
-      481,   483,   484,   485,   488,   482,   492,   493,   486,   496,
-      513,   514,   515,   497,   499,   502,   503,   507,   508,   510,
-      584,   489,   519,   511,   490,   495,   512,   516,   517,   498,
-      518,   500,   520,   608,   608,   504,   501,   521,   522,   523,
-      524,   600,   600,   505,   506,   525,   526,   534,   535,   527,
-      528,   444,   667,   529,   282,   530,   531,   536,   537,   443,
-      540,    30,   548,   549,   541,   574,   616,   620,   445,   624,
-      542,   547,   550,   551,   552,   556,   557,   558,   559,   560,
-      561,   562,   563,   564,   565,   566,   568,   569,   570,   581,
-      567,   644,   684,   686,   690,   709,   694,   710,   698,   711,
-      712,   713,   721,   758,   720,   724,   723,   582,   727,   726,
-      730,   737,   736,   738,   739,   740,   741,   742,   743,   748,
-      749,   750,   764,   761,   763,   767,   766,   769,   770,   780,
-      773,   772,   775,   776,   777,   778,   784,   779,   781,   785,
-      805,   782,   806,   811,   812,   815,   538,   814,   822,   634,
-      823,   835,   783,   868,   836,   798,   848,   799,   800,   801,
-      850,   872,   874,   878,   876,   896,   897,   898,   901,   416,
-      583,   588,   441,   802,   615,   803,   807,   808,   786,   809,
-      829,   830,   902,   793,   794,   797,   831,   832,   833,   796,
-      438,   804,   788,   787,   842,   463,   494,   843,   789,   844,
-      845,   790,   487,   791,   817,   849,   223,   792,   816,   873,
-      819,   877,   491,   820,   903,   904,   906,   818,   685,   821,
-      479,   810,   813,   774,   682,   866,   875,   894,   905,     0,
-      509,     0,   608,     0,     0,     0,     0,     0,   465,     0,
-      600,   249,   163,   162,     0,     0,   231,   164,     0,   248,
-      471,     0,   176,     0,     0,     0,   250,     0,     0,   263,
-      165,   166,     0,   251,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,   667,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,   183,     0,     0,   194,
-        0,     0,   211,     0,     0,   184,     0,     0,   195,   188,
-        0,   212,   196,     0,     0,     0,     0,     0,     0,     0,
++     437,   438,   439,   440,   441,   443,   455,   456,   457,   458,
++     459,   460,   462,   461,   463,   464,   465,   466,   517,   518,
++     519,   468,   470,   471,   472,   473,   474,   476,   477,   478,
++     479,   480,   481,   482,   484,   485,   487,   613,   613,   486,
++     488,   489,   490,   492,   493,   605,   605,   494,   496,   497,
++     499,   500,   501,   502,   503,   504,   448,   676,   505,   284,
++     506,   507,   508,   511,   447,   509,   510,   512,   514,   515,
++     545,   546,   516,   520,   521,   522,   449,   523,   524,   525,
++     526,   527,   528,   529,   530,   531,   547,   552,   532,   533,
++     534,   535,   536,   539,   540,   541,    30,   542,   553,   572,
++     543,   554,   621,   625,   629,   633,   653,   693,   695,   699,
++     718,   555,   703,   719,   720,   721,   587,   556,   722,   729,
++     730,   707,   732,   733,   735,   736,   739,   738,   643,   749,
++     742,   748,   750,   751,   557,   561,   562,   563,   752,   753,
++     754,   755,   760,   761,   762,   776,   779,   775,   588,   564,
++     778,   781,   782,   843,   784,   785,   579,   787,   788,   565,
++     566,   789,   790,   796,   797,   567,   568,   569,   589,   834,
++     570,   835,   571,   573,   840,   841,   844,   852,   851,   442,
++     900,   904,   419,   864,   574,   575,   865,   879,   881,   586,
++     906,   910,   908,   770,   773,   928,   929,   930,   791,   933,
++     593,   620,   445,   792,   793,   794,   795,   827,   798,   822,
++     828,   823,   829,   830,   826,   498,   833,   825,   800,   799,
++     821,   831,   832,   836,   884,   802,   801,   467,   846,   491,
++     804,   803,   495,   845,   469,   848,   850,   225,   837,   847,
++     838,   613,   694,   849,   475,   839,   842,   898,   691,   605,
++     251,   252,   164,   810,   934,   233,   165,   483,   250,   858,
++     513,   805,   786,   253,   178,   806,   859,   907,   166,   167,
++     168,   265,   937,   818,   926,     0,     0,   807,   808,   809,
++       0,   860,   861,   862,   873,     0,     0,   676,     0,     0,
++       0,     0,     0,     0,     0,     0,     0,     0,   185,   874,
++       0,   196,   905,   875,   213,     0,   876,   880,     0,     0,
++     186,     0,   909,   197,   935,   936,   214,   938,     0,   190,
++       0,     0,   198,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
         0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-        0,     0,     0,     0,     0,     0,     0,     0,     0,   860,
-        0,     0,     0,     0,     0,     0,     0,   859,     0,     0,
-        0,     0,     0,     0,     0,     0,   860,     0,     0,     0,
-        0,     0,     0,     0,   859
 -       0,     0,     0,     0,   798,   799,   797,     0,     0,     0,
 -     802,     0,     0,     0,     0,     0,     0,     0,   800,     0,
 -     801,   810,     0,     0,     0,   883,     0,     0,     0,   884,
 -       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 -       0,     0,   883,     0,     0,     0,   884
++       0,     0,   810,     0,     0,     0,     0,     0,     0,     0,
++     805,     0,     0,     0,   806,     0,     0,     0,     0,     0,
++       0,   892,   818,     0,     0,     0,   807,   808,   809,   891,
++       0,     0,     0,     0,     0,     0,     0,     0,   892,     0,
++       0,     0,     0,     0,     0,     0,   891
    };
  
    const short int
    Dhcp6Parser::yycheck_[] =
    {
-       66,    75,    69,    69,    70,    71,    72,    69,    74,    75,
-       76,    77,    69,    70,    71,    72,    75,    70,    71,   528,
-       69,    69,    15,    75,   525,     5,   524,     7,    10,     9,
-       39,     7,    75,    38,    63,    64,    65,   128,    82,    83,
-      131,   132,   133,    11,    49,    16,    14,    15,     7,    75,
-       76,    56,    78,     0,    25,    31,    32,    33,    34,    92,
-       93,    94,    38,    31,    32,    33,    34,    35,    36,    37,
-       38,     3,    48,     3,    50,   150,     8,    37,     8,    16,
-       56,    57,    58,    59,    60,    61,    62,    38,    39,    39,
-       40,    41,    42,    43,    44,    71,    72,     7,    66,    67,
-       68,    69,    39,    79,    41,    42,   150,   150,    45,    46,
-       47,    38,    71,    81,    12,    13,    84,     3,   127,    70,
-      129,   130,     8,    91,    95,    96,    97,    98,     3,     3,
-        7,    99,   100,     8,     8,   103,     7,   121,   122,   123,
-      124,   150,    69,   125,    38,   150,    73,    74,    75,    76,
-       77,    78,   134,   135,   136,   118,   119,    51,    52,    53,
-       54,    55,    56,    17,    18,    19,    20,     7,   150,   153,
-      150,   151,   152,   153,   150,     3,     3,     7,    16,   150,
-        8,     8,   150,    21,    22,    23,    24,    25,    26,    27,
-       28,    29,    30,    85,    86,    87,    88,    89,    90,   150,
-      150,    39,     3,     3,     3,     3,     3,     8,     8,     8,
-        8,     8,     3,   150,     3,     3,     3,     8,     3,     8,
-        8,     8,     3,   150,     3,     3,     3,     8,     4,     8,
-        8,     8,   733,   731,     3,     3,     3,    82,    83,     8,
-        8,     8,   751,     3,   310,     3,     6,     3,     6,     3,
-        6,     3,     6,     6,     6,     3,   150,   472,   473,   474,
-      101,   102,     7,     7,     7,   339,     7,     7,     7,     7,
-        4,     8,     4,   339,     4,     4,     4,     4,     4,     4,
-        4,     4,   339,     4,     4,   352,   352,     4,     3,   355,
-      352,     4,     8,     4,     8,   352,   362,     3,   355,     8,
-        4,     4,   355,   352,   352,   362,   372,   300,   301,   362,
-        8,     3,   150,   387,     4,   372,   382,     4,     4,     4,
-        4,   387,     4,     4,   150,     4,     4,     4,   387,     4,
-        4,     4,     4,     4,   151,   387,   151,   151,   151,   151,
-      406,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-      113,   114,   115,   116,   117,   137,   138,   139,   140,   141,
-      142,   143,   144,   145,   146,   147,   148,   149,     4,     4,
-        4,     4,     4,     4,     4,     4,     4,     4,   151,     4,
-        4,     4,   153,     4,     4,     4,     4,   150,     4,     4,
-      151,   153,     4,     4,     4,     4,     4,     4,     4,     4,
-      151,   151,   151,     4,     4,     4,     4,     4,     4,     4,
-        4,     4,     4,     4,     4,   151,     4,     4,   153,     4,
-      413,   414,   415,     4,     4,     4,     4,     4,     4,     4,
-      126,   153,     5,     7,   153,   153,     7,     7,     7,   151,
-        7,   151,     5,   517,   518,   153,   151,     5,     5,     5,
-        5,   517,   518,   153,   153,     5,     5,     8,     3,     7,
-        7,   535,   528,     7,   530,     7,     5,     5,     5,   535,
-      150,     7,     5,     7,   150,   120,     7,     7,   535,     7,
-      150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
-      150,   150,   150,   150,   150,   150,   150,   150,   150,   150,
-      493,     7,     4,     7,     7,     4,     7,     4,    80,     4,
-        4,     4,     3,   150,     6,     3,     6,   510,     3,     6,
-        6,     3,     6,     4,     4,     4,     4,     4,     4,     4,
-        4,     4,     3,   150,     6,     3,     6,     6,     3,   153,
-        4,     8,     4,     4,     4,     4,     4,   151,   151,     4,
-        4,   153,     4,     4,     4,     3,   453,     6,     4,   523,
-        5,     8,   151,     4,     8,   151,     8,   151,   151,   151,
-        7,     4,     4,     7,     5,     4,     4,     4,     4,   310,
-      511,   516,   337,   151,   518,   151,   151,   151,   716,   151,
-      150,   150,   153,   728,   731,   737,   150,   150,   150,   735,
-      333,   744,   721,   719,   150,   352,   390,   150,   722,   150,
-      150,   724,   382,   725,   764,   150,    73,   727,   762,   151,
-      767,   150,   387,   768,   151,   151,   150,   765,   535,   770,
-      372,   751,   755,   702,   530,   854,   870,   882,   899,    -1,
-      406,    -1,   716,    -1,    -1,    -1,    -1,    -1,   355,    -1,
-      716,   725,   719,   719,    -1,    -1,   722,   719,    -1,   725,
-      362,    -1,   719,    -1,    -1,    -1,   725,    -1,    -1,   735,
-      719,   719,    -1,   725,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,   751,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,   762,    -1,    -1,   765,
-       -1,    -1,   768,    -1,    -1,   762,    -1,    -1,   765,   762,
-       -1,   768,   765,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 -      62,    65,    65,    65,    66,    67,    68,    69,    70,    71,
 -      72,    67,    70,    70,   525,    65,   522,    65,    65,    66,
 -      67,    68,   521,     5,    70,     7,    14,     9,   729,     7,
 -     150,    76,   729,    10,   729,   729,   729,   729,   729,    38,
 -       0,    11,     6,    16,    14,    15,    83,    84,     3,     7,
 -      49,     6,    25,    31,    32,    33,    34,    56,    12,    13,
 -      38,    31,    32,    33,    34,    35,    36,    37,    38,     3,
 -      48,     3,    50,    38,     8,     3,     8,     7,    16,    57,
 -      58,    59,    60,    61,    62,     7,    51,    52,    53,    54,
 -      55,    56,    83,    84,    72,    73,    66,    67,    68,    69,
 -      70,    39,    80,    41,    42,   150,     3,    45,    46,    47,
 -       4,     8,    82,   150,    72,    85,    39,    38,    39,    63,
 -      64,    65,    92,    96,    97,    98,    99,     7,     3,     7,
 -     100,   101,    16,     8,   104,   119,   120,    21,    22,    23,
 -      24,    25,    26,    27,    28,    29,    30,     3,     7,   126,
 -      71,   150,     8,     3,     7,    39,     6,   858,   135,   136,
 -     137,   858,     8,   858,   858,   858,   858,   858,   150,   151,
 -     152,   153,   150,   150,     3,    76,    77,   150,    79,     8,
 -     150,     3,     7,    38,     6,   150,    31,    32,    33,    34,
 -       7,    36,   129,    38,    39,   132,   133,   134,    39,    40,
 -      41,    42,    43,    44,     3,   128,     3,   130,   131,     8,
 -       3,     8,   150,    58,    59,    70,    61,    62,     7,    74,
 -      75,    76,    77,    78,    79,    70,     7,   150,     3,   150,
 -       7,   737,     4,     8,     4,    80,   735,   122,   123,   124,
 -     125,   102,   103,   305,   755,   105,   106,   107,   108,   109,
 -     110,   111,   112,   113,   114,   115,   116,   117,   118,    86,
 -      87,    88,    89,    90,    91,     3,   150,     3,   153,     3,
 -       8,     3,     8,   335,     8,     3,     8,   335,     4,     4,
 -       8,     3,     3,   347,   347,   347,     8,     8,   335,   351,
 -     150,     3,     8,     3,     6,   150,   358,   347,     8,   347,
 -     347,     4,   358,     4,   351,   150,   368,   295,   296,   150,
 -       4,   358,     3,     3,     3,   377,     4,     8,     8,     8,
 -     382,   368,     3,     3,   382,   382,     3,     8,     8,     3,
 -       3,     8,     4,     6,     8,     4,   382,     4,     4,   401,
++      66,    75,    75,    69,    70,    71,    72,    69,    74,    75,
++      76,    77,   533,   530,    75,    69,    70,    71,    72,    69,
++      69,    69,   529,     7,    10,    70,    71,    15,     5,    16,
++       7,   737,     9,   737,    21,    22,    23,    24,    25,    26,
++      27,    28,    29,    30,   737,     0,    16,    31,    32,    33,
++      34,   737,    39,   737,    38,    25,    16,    38,    39,   737,
++     737,     7,     3,    76,    48,     7,    50,     8,    76,    77,
++      38,    79,    56,    57,    58,    59,    60,    61,    62,    39,
++       3,    41,    42,     6,   151,    45,    46,    47,    72,    73,
++      71,    83,    84,     6,    38,     7,    80,    11,     7,     3,
++      14,    15,    70,    37,     8,    49,    74,    75,    76,    77,
++      78,    79,    56,    39,    63,    64,    65,    31,    32,    33,
++      34,    35,    36,    37,    38,     7,    96,    97,    98,    99,
++      38,     7,    39,    40,    41,    42,    43,    44,   151,     3,
++     126,     7,     6,    51,    52,    53,    54,    55,    56,   135,
++     136,   137,    66,    67,    68,    69,    70,    12,    13,   151,
++     866,     3,   866,    72,   151,   151,     8,   151,    82,     3,
++     151,    85,     6,   866,   151,   152,   153,   154,    92,     3,
++     866,   151,   866,   151,     8,     7,   100,   101,   866,   866,
++     104,   151,    31,    32,    33,    34,     3,    36,     3,    38,
++      39,     8,   128,     8,   130,   131,     7,   151,    86,    87,
++      88,    89,    90,    91,     3,     3,     3,     6,     6,    58,
++      59,     8,    61,    62,     3,   151,   119,   120,   745,     8,
++       3,    70,   122,   123,   124,   125,   743,   151,    83,    84,
++       3,    80,   763,   151,   151,     8,   312,     7,   105,   106,
++     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
++     117,   118,   129,     7,   154,   132,   133,   134,   342,     3,
++       3,     7,     3,     3,     8,     8,   342,     8,     8,     3,
++       3,     3,     3,     8,     8,     8,     8,     8,   342,   355,
++       3,     3,   358,   355,   151,     8,     8,     3,     3,   365,
++       7,   355,     8,     8,   358,   355,   355,   355,     4,   375,
++       3,   365,   151,   358,   302,   303,   390,   390,     3,   385,
++     365,   375,     3,     8,   390,   102,   103,     8,     4,   390,
+      138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
 -     148,   149,    17,    18,    19,    20,    93,    94,    95,   468,
 -     469,   470,     4,     3,     8,     4,     4,     3,   150,     4,
 -       4,     8,     3,   151,     4,     4,     4,     4,     4,     4,
 -       4,     4,     4,     4,     4,     4,     4,     4,     4,   151,
 -     151,   151,   151,     4,     4,     4,     4,     4,     4,     4,
 -       4,     4,     4,     4,   151,     4,     4,     4,   153,     4,
 -       4,     4,     4,     4,   153,     4,   151,     4,     4,     4,
 -     408,   409,   410,     4,     4,     4,     4,   151,   151,     4,
 -       4,   151,     4,     4,     4,     4,     4,     4,     4,     4,
 -     151,     4,     4,     4,   153,   153,   153,     4,     4,   153,
 -       4,   513,   514,     4,   151,   513,   514,     4,   151,   151,
 -       4,     4,     4,   525,     4,   527,   153,   153,   153,     4,
 -     532,     7,     5,     7,   532,     7,     7,     7,     5,     5,
 -       5,     5,     5,     5,     5,   532,     5,     7,   150,     7,
 -       7,     7,     5,     8,     3,     5,   150,     5,   150,   150,
 -       5,   489,   150,     7,     7,   150,     7,   150,     7,   150,
 -       7,     7,     7,     4,     7,     7,     6,   150,   506,     7,
 -       4,    81,     4,     4,     4,     4,     3,     3,     6,     3,
 -     520,     6,     3,     6,     6,   150,   150,   150,   150,     6,
 -       3,     6,     4,     4,     4,   121,     4,     4,     4,     4,
 -     150,     4,     4,     3,   150,     6,     3,     6,     3,     5,
 -     150,     4,   150,   127,     8,     4,   150,   150,   150,     4,
 -       4,     4,     4,   150,     4,     4,     4,   150,     4,     4,
 -       3,     8,     6,     4,   460,     4,     8,     4,     8,     7,
 -       4,   150,   150,     5,     7,     4,   151,     4,     4,   151,
 -     153,     4,   151,   153,   507,   151,   151,   305,   512,   514,
 -     151,   329,   151,   151,   151,   717,   333,   732,   735,   741,
 -     739,   385,   151,   151,   748,   722,   720,   731,   347,   858,
 -     725,   723,   728,   377,   382,   726,   768,   151,   150,   150,
 -     766,   771,   769,   150,   150,   351,   774,   772,   150,   532,
 -     150,   759,   150,   358,   368,   717,   720,   720,   720,   717,
 -     527,   723,   151,   150,   726,   729,   729,   729,   726,   726,
 -     720,   729,   720,   720,   755,   703,   878,   739,   894,   729,
 -     726,   729,   729,   153,   150,   906,   150,   923,   401,    -1,
 -      -1,   150,    -1,   755,    -1,    -1,    -1,   151,    -1,    -1,
 -      -1,    -1,    -1,   151,   766,    -1,    -1,   769,   150,    -1,
 -     772,    -1,    -1,   769,    -1,    -1,    -1,    -1,    -1,   766,
 -      -1,    -1,   769,    -1,    -1,   772,    -1,    -1,    -1,    -1,
 -      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++     148,   149,   150,   409,     3,    17,    18,    19,    20,     8,
++      93,    94,    95,   476,   477,   478,     4,     4,     4,     4,
++       4,     4,     4,     4,     4,     4,     4,     4,     3,   151,
++     154,     4,     8,     4,     8,     3,     8,     4,     4,     8,
++       3,   152,     4,     4,     4,     4,     4,     4,     4,     4,
++       4,     4,     4,     4,     4,     4,     4,   152,   152,   152,
++     152,     4,     4,     4,     4,     4,     4,     4,     4,     4,
++       4,     4,   152,     4,     4,     4,     4,     4,     4,     4,
++       4,     4,   154,   152,     4,     4,     4,     4,   416,   417,
++     418,     4,     4,   152,     4,   152,   152,     4,     4,     4,
++       4,     4,     4,     4,     4,     4,     4,   521,   522,   152,
++       4,     4,   154,     4,   154,   521,   522,   154,     4,     4,
++     154,     4,     4,   152,     4,   152,   540,   533,   152,   535,
++       4,     4,   154,     4,   540,   154,   154,     4,     4,     7,
++     151,   151,     7,     7,     7,     7,   540,     5,     5,     5,
++       5,     5,     5,     5,     5,     5,   151,   151,     7,     7,
++       7,     7,     5,     8,     3,     5,     7,     5,     5,   497,
++     457,     7,     7,     7,     7,     7,     7,     4,     7,     7,
++       4,   151,     7,     4,     4,     4,   514,   151,     4,     6,
++       3,    81,     6,     3,     6,     3,     3,     6,   528,     3,
++       6,     6,     4,     4,   151,   151,   151,   151,     4,     4,
++       4,     4,     4,     4,     4,     3,     3,     6,   515,   151,
++       6,     6,     3,     6,     8,     4,   121,     4,     4,   151,
++     151,     4,     4,     4,     4,   151,   151,   151,   127,     4,
++     151,     4,   151,   151,     4,     4,     3,     5,     4,   336,
++       4,     4,   312,     8,   151,   151,     8,     8,     7,   151,
++       4,     7,     5,   151,   151,     4,     4,     4,   152,     4,
++     520,   522,   340,   154,   152,   154,   152,   152,   725,   740,
++     152,   743,   152,   152,   749,   393,   756,   747,   730,   728,
++     739,   152,   152,   152,   866,   733,   731,   355,   776,   385,
++     736,   734,   390,   774,   358,   779,   782,    73,   152,   777,
++     152,   725,   540,   780,   365,   763,   767,   886,   535,   725,
++     734,   734,   728,   737,   154,   731,   728,   375,   734,   151,
++     409,   737,   711,   734,   728,   737,   151,   902,   728,   728,
++     728,   747,   931,   737,   914,    -1,    -1,   737,   737,   737,
++      -1,   151,   151,   151,   151,    -1,    -1,   763,    -1,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   774,   151,
++      -1,   777,   152,   151,   780,    -1,   151,   151,    -1,    -1,
++     774,    -1,   151,   777,   152,   152,   780,   151,    -1,   774,
++      -1,    -1,   777,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   853,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,   853,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,   870,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,   870
 -      -1,    -1,    -1,    -1,   858,   858,   858,    -1,    -1,    -1,
 -     858,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   858,    -1,
 -     858,   858,    -1,    -1,    -1,   877,    -1,    -1,    -1,   877,
 -      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 -      -1,    -1,   894,    -1,    -1,    -1,   894
++      -1,    -1,   866,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
++     866,    -1,    -1,    -1,   866,    -1,    -1,    -1,    -1,    -1,
++      -1,   885,   866,    -1,    -1,    -1,   866,   866,   866,   885,
++      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,
++      -1,    -1,    -1,    -1,    -1,    -1,   902
    };
  
    const unsigned short int
    Dhcp6Parser::yystos_[] =
    {
-        0,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-      146,   147,   148,   149,   155,   156,   157,   158,   159,   160,
-      161,   162,   163,   164,   165,   166,   167,   168,     0,     5,
-        7,     9,   150,   151,   152,   153,   169,   170,   171,   176,
-        7,   185,     7,   191,     7,   202,     7,   279,     7,   346,
-        7,   360,     7,   377,     7,   298,     7,   304,     7,   328,
-        7,   255,     7,   433,   177,   172,   186,   192,   203,   280,
-      347,   361,   378,   299,   305,   329,   256,   434,   169,   178,
-      179,   150,   174,   175,    10,   125,   134,   135,   136,   150,
-      184,   187,   188,   189,   460,   462,   464,   466,    11,    14,
+        0,   138,   139,   140,   141,   142,   143,   144,   145,   146,
 -     147,   148,   149,   155,   156,   157,   158,   159,   160,   161,
 -     162,   163,   164,   165,   166,   167,     0,     5,     7,     9,
 -     150,   151,   152,   153,   168,   169,   170,   175,     7,   184,
 -       7,   190,     7,   201,     7,   278,     7,   351,     7,   365,
 -       7,   382,     7,   309,     7,   333,     7,   254,     7,   438,
 -     176,   171,   185,   191,   202,   279,   352,   366,   383,   310,
 -     334,   255,   439,   168,   177,   178,   150,   173,   174,    10,
 -     126,   135,   136,   137,   150,   183,   186,   187,   188,   465,
 -     467,   469,   471,    11,    14,    15,    31,    32,    33,    34,
 -      35,    36,    37,    38,    66,    67,    68,    69,    70,    82,
 -      85,    92,   100,   101,   104,   183,   192,   193,   194,   195,
 -     196,   197,   198,   199,   208,   210,   234,   240,   246,   248,
 -     262,   272,   295,   303,   327,   405,   415,   427,   428,   436,
 -      12,    13,   203,   204,   205,   207,     7,    48,    50,    57,
 -      58,    59,    60,    61,    62,    72,    73,    80,   183,   194,
 -     195,   196,   197,   280,   281,   282,   284,   286,   288,   290,
 -     293,   294,   327,   345,   359,   376,   401,    49,    56,   183,
 -     327,   353,   354,   355,   357,    51,    52,    53,    54,    55,
 -     183,   327,   357,   367,   368,   369,   371,   372,   374,   375,
 -      70,    74,    75,    76,    77,    78,    79,   183,   327,   384,
 -     385,   386,   387,   389,   391,   393,   395,   397,   399,    16,
 -      39,    41,    42,    45,    46,    47,   183,   224,   311,   312,
 -     313,   314,   315,   316,   317,   319,   321,   323,   324,   326,
 -      40,    43,    44,   183,   224,   315,   321,   335,   336,   337,
 -     338,   339,   341,   342,   343,   344,    83,    84,   183,   256,
 -     257,   258,   260,   105,   106,   107,   108,   109,   110,   111,
 -     112,   113,   114,   115,   116,   117,   118,   183,   440,   441,
 -     442,   443,   445,   447,   448,   450,   451,   452,   455,   457,
 -     458,   459,   460,   463,     6,     3,     4,     8,     3,   189,
 -     472,   466,   468,   470,     4,     3,     8,   200,   209,   211,
 -       4,     4,     4,     4,     4,   273,   304,   328,   296,   235,
 -     247,   241,   406,   249,   263,   416,     4,   429,   437,     3,
 -       8,   206,     4,     3,     8,   408,   346,   360,   283,   285,
 -     287,     4,     4,   291,   289,   377,   402,     3,     8,   356,
 -     358,     3,     8,   370,     4,   373,     4,     4,     3,     8,
 -     400,   388,   390,   392,   394,   396,   398,     8,     3,   318,
 -     225,     4,   322,   320,   325,     4,     8,     3,   340,     4,
 -       4,     8,     3,   259,   261,     3,     8,     4,   444,   446,
 -       4,   449,     4,     4,   453,   456,     4,     4,     4,   461,
 -     464,     3,     8,   168,   168,   150,     4,     4,     4,     4,
 -       4,   187,     4,     4,     4,   151,   151,   151,   151,   151,
 -       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
 -       4,   151,     4,     4,   193,     4,   153,   204,    71,   183,
 -     224,   327,   409,   410,   411,   412,   413,     4,     4,     4,
 -       4,     4,   151,   153,     4,     4,     4,     4,   281,     4,
 -       4,   354,     4,   151,     4,   151,   151,   368,     4,     4,
 -       4,     4,     4,     4,     4,   386,     4,     4,   151,     4,
 -       4,     4,   153,   313,     4,   153,   153,   337,     4,     4,
 -     257,   153,     4,     4,   151,     4,   151,   151,     4,     4,
 -     153,   153,   153,     4,     4,   441,     4,     7,     7,   168,
 -     168,   168,     7,     7,     7,     5,     5,     5,     5,     5,
 -       5,     5,     5,     5,     7,     7,     7,     7,     5,   179,
 -     414,     8,     3,     5,     5,   150,   150,   150,    63,    64,
 -      65,   292,   150,     5,     7,   150,   170,   172,   150,   150,
 -     179,   179,   179,   150,   150,   150,   150,   150,   150,   150,
 -     150,   150,   150,   150,   168,   150,   150,   150,   119,   120,
 -     454,   121,   122,   123,   124,   125,   153,   462,   150,   168,
 -     192,   127,   473,   474,   475,   203,    16,    21,    22,    23,
 -      24,    25,    26,    27,    28,    29,    30,   183,   212,   213,
 -     214,   217,   219,   221,   223,   224,   226,   227,   228,   229,
 -     230,   232,   212,     7,   274,   275,   276,     7,   305,   306,
 -     307,     7,   329,   330,   331,     7,   297,   298,   299,    76,
 -     150,   236,   237,   238,   239,   177,    77,    79,   238,   242,
 -     243,   244,   245,   288,   407,     7,   250,   251,   252,    86,
 -      87,    88,    89,    90,    91,   264,   265,   266,   267,   268,
 -     269,   270,   271,    16,    96,    97,    98,    99,   183,   226,
 -     417,   418,   419,   422,   423,   425,   426,   102,   103,   430,
 -     431,   432,   434,   440,   180,     4,   411,     7,   347,   348,
 -     349,     7,   361,   362,   363,     7,   378,   379,   380,    81,
 -     403,     8,   476,     3,     8,     8,   215,   218,   220,   222,
 -       4,     4,     4,     4,     4,   231,   233,     3,     8,     8,
 -     277,     6,     3,   308,     6,     3,   332,     6,     3,   300,
 -       6,     3,     3,     6,     6,     3,     6,     3,     6,   253,
 -       6,     3,     4,     4,     4,     4,     4,     4,     3,     8,
 -     420,   424,     4,     4,     4,     3,     8,   433,   435,     3,
 -       8,     8,   150,   181,   182,   150,   350,     6,     3,   364,
 -       6,     3,   381,     6,     3,   404,     8,     4,   474,     4,
 -       4,     4,     4,   151,   153,   151,   153,   151,     4,     4,
 -     213,   280,   276,   311,   307,   335,   331,   183,   194,   195,
 -     196,   197,   224,   272,   284,   286,   290,   294,   301,   302,
 -     327,   401,   405,   299,   237,   243,   288,   256,   252,   151,
 -     151,   151,   151,   151,   151,   265,     4,     4,   151,   151,
 -     151,   418,     4,     4,   431,     6,     3,   353,   349,   367,
 -     363,   384,   380,     4,     5,    17,    18,    19,    20,   216,
 -     150,   150,   150,   150,   150,     8,     8,     8,     3,     8,
 -       8,    93,    94,    95,   421,   150,   150,   150,   150,     8,
 -       8,     8,   150,     7,   477,   478,   302,   479,     3,     6,
 -     128,   130,   131,   183,   224,   480,   481,   482,   483,   485,
 -     478,   486,     4,   484,     3,     8,     4,   151,     4,   481,
 -       5,   150,     7,   487,   488,   489,     3,     6,   129,   132,
 -     133,   134,   490,   491,   492,   494,   495,   496,   488,   493,
 -       4,     4,     4,     3,     8,     4,   153,   151,   151,   491,
 -     150
++     147,   148,   149,   150,   156,   157,   158,   159,   160,   161,
++     162,   163,   164,   165,   166,   167,   168,   169,     0,     5,
++       7,     9,   151,   152,   153,   154,   170,   171,   172,   177,
++       7,   186,     7,   192,     7,   203,     7,   280,     7,   355,
++       7,   369,     7,   386,     7,   307,     7,   313,     7,   337,
++       7,   256,     7,   442,   178,   173,   187,   193,   204,   281,
++     356,   370,   387,   308,   314,   338,   257,   443,   170,   179,
++     180,   151,   175,   176,    10,   126,   135,   136,   137,   151,
++     185,   188,   189,   190,   469,   471,   473,   475,    11,    14,
 +      15,    31,    32,    33,    34,    35,    36,    37,    38,    66,
-       67,    68,    69,    81,    84,    91,    99,   100,   103,   184,
-      193,   194,   195,   196,   197,   198,   199,   200,   209,   211,
-      235,   241,   247,   249,   263,   273,   296,   322,   400,   410,
-      422,   423,   431,    12,    13,   204,   205,   206,   208,     7,
-       48,    50,    56,    57,    58,    59,    60,    61,    62,    71,
-       72,    79,   184,   195,   196,   197,   198,   281,   282,   283,
-      285,   287,   289,   291,   294,   295,   322,   340,   352,   354,
-      371,   396,    49,   184,   322,   348,   349,   350,   352,    51,
-       52,    53,    54,    55,   184,   322,   352,   362,   363,   364,
-      366,   367,   369,   370,    69,    73,    74,    75,    76,    77,
-       78,   184,   322,   379,   380,   381,   382,   384,   386,   388,
-      390,   392,   394,   296,    16,    39,    41,    42,    45,    46,
-       47,   184,   225,   306,   307,   308,   309,   310,   311,   312,
-      314,   316,   318,   319,   321,    40,    43,    44,   184,   225,
-      310,   316,   330,   331,   332,   333,   334,   336,   337,   338,
-      339,    82,    83,   184,   257,   258,   259,   261,   104,   105,
-      106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-      116,   117,   184,   435,   436,   437,   438,   440,   442,   443,
-      445,   446,   447,   450,   452,   453,   454,   455,   458,     6,
-        3,     4,     8,     3,   190,   467,   461,   463,   465,     4,
-        3,     8,   201,   210,   212,     4,     4,     4,     4,     4,
-      274,   297,   323,   236,   248,   242,   401,   250,   264,   411,
-        4,   424,   432,     3,     8,   207,     4,     3,     8,   403,
-      341,   355,   353,   284,   286,   288,     4,     4,   292,   290,
-      372,   397,     3,     8,   351,     3,     8,   365,     4,   368,
-        4,     4,     3,     8,   395,   383,   385,   387,   389,   391,
-      393,     8,     3,     8,   313,   226,     4,   317,   315,   320,
-        4,     8,     3,   335,     4,     4,     8,     3,   260,   262,
-        3,     8,     4,   439,   441,     4,   444,     4,     4,   448,
-      451,     4,     4,     4,   456,   459,     3,     8,   169,   169,
-      150,     4,     4,     4,     4,     4,   188,     4,     4,     4,
-      151,   151,   151,   151,   151,     4,     4,     4,     4,     4,
-        4,     4,     4,     4,     4,   151,     4,     4,   194,     4,
-      153,   205,    70,   184,   225,   322,   404,   405,   406,   407,
-      408,     4,     4,     4,     4,     4,     4,   151,   153,     4,
-        4,     4,     4,   282,     4,   349,     4,   151,     4,   151,
-      151,   363,     4,     4,     4,     4,     4,     4,     4,   381,
-        4,     4,   151,     4,     4,     4,   153,   308,     4,   153,
-      153,   332,     4,     4,   258,   153,     4,     4,   151,     4,
-      151,   151,     4,     4,   153,   153,   153,     4,     4,   436,
-        4,     7,     7,   169,   169,   169,     7,     7,     7,     5,
-        5,     5,     5,     5,     5,     5,     5,     7,     7,     7,
-        7,     5,   180,   409,     8,     3,     5,     5,   171,   173,
-      150,   150,   150,    63,    64,    65,   293,   150,     5,     7,
-      150,   150,   150,   180,   180,   180,   150,   150,   150,   150,
-      150,   150,   150,   150,   150,   150,   150,   169,   150,   150,
-      150,   118,   119,   449,   120,   121,   122,   123,   124,   153,
-      457,   150,   169,   193,   126,   468,   469,   470,   204,    16,
-       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      184,   213,   214,   215,   218,   220,   222,   224,   225,   227,
-      228,   229,   230,   231,   233,   213,     7,   275,   276,   277,
-        7,   300,   301,   302,     7,   324,   325,   326,    75,   150,
-      237,   238,   239,   240,   178,    76,    78,   239,   243,   244,
-      245,   246,   289,   402,     7,   251,   252,   253,    85,    86,
-       87,    88,    89,    90,   265,   266,   267,   268,   269,   270,
-      271,   272,    16,    95,    96,    97,    98,   184,   227,   412,
-      413,   414,   417,   418,   420,   421,   101,   102,   425,   426,
-      427,   429,   435,   181,     4,   406,     7,   342,   343,   344,
-        7,   356,   357,   358,     7,   373,   374,   375,    80,   398,
-        8,   471,     3,     8,     8,   216,   219,   221,   223,     4,
-        4,     4,     4,     4,   232,   234,     3,     8,     8,   278,
-        6,     3,   303,     6,     3,   327,     6,     3,     3,     6,
-        6,     3,     6,     3,     6,   254,     6,     3,     4,     4,
-        4,     4,     4,     4,     3,     8,   415,   419,     4,     4,
-        4,     3,     8,   428,   430,     3,     8,     8,   150,   182,
-      183,   150,   345,     6,     3,   359,     6,     3,   376,     6,
-        3,   399,     8,     4,   469,     4,     4,     4,     4,   151,
-      153,   151,   153,   151,     4,     4,   214,   281,   277,   306,
-      302,   330,   326,   238,   244,   289,   257,   253,   151,   151,
-      151,   151,   151,   151,   266,     4,     4,   151,   151,   151,
-      413,     4,     4,   426,     6,     3,   348,   344,   362,   358,
-      379,   375,     4,     5,    17,    18,    19,    20,   217,   150,
-      150,   150,   150,   150,     8,     8,     8,     8,    92,    93,
-       94,   416,   150,   150,   150,   150,     8,     8,     8,   150,
-        7,   472,   473,   474,     3,     6,   127,   129,   130,   184,
-      225,   475,   476,   477,   478,   480,   473,   481,     4,   479,
-        3,     8,     4,   151,     4,   476,     5,   150,     7,   482,
-      483,   484,     3,     6,   128,   131,   132,   133,   485,   486,
-      487,   489,   490,   491,   483,   488,     4,     4,     4,     3,
-        8,     4,   153,   151,   151,   486,   150
++      67,    68,    69,    70,    82,    85,    92,   100,   101,   104,
++     185,   194,   195,   196,   197,   198,   199,   200,   201,   210,
++     212,   236,   242,   248,   250,   264,   274,   297,   305,   331,
++     409,   419,   431,   432,   440,    12,    13,   205,   206,   207,
++     209,     7,    48,    50,    56,    57,    58,    59,    60,    61,
++      62,    72,    73,    80,   185,   196,   197,   198,   199,   282,
++     283,   284,   286,   288,   290,   292,   295,   296,   331,   349,
++     361,   363,   380,   405,    49,   185,   331,   357,   358,   359,
++     361,    51,    52,    53,    54,    55,   185,   331,   361,   371,
++     372,   373,   375,   376,   378,   379,    70,    74,    75,    76,
++      77,    78,    79,   185,   331,   388,   389,   390,   391,   393,
++     395,   397,   399,   401,   403,   305,    16,    39,    41,    42,
++      45,    46,    47,   185,   226,   315,   316,   317,   318,   319,
++     320,   321,   323,   325,   327,   328,   330,    40,    43,    44,
++     185,   226,   319,   325,   339,   340,   341,   342,   343,   345,
++     346,   347,   348,    83,    84,   185,   258,   259,   260,   262,
++     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
++     115,   116,   117,   118,   185,   444,   445,   446,   447,   449,
++     451,   452,   454,   455,   456,   459,   461,   462,   463,   464,
++     467,     6,     3,     4,     8,     3,   191,   476,   470,   472,
++     474,     4,     3,     8,   202,   211,   213,     4,     4,     4,
++       4,     4,   275,   306,   332,   298,   237,   249,   243,   410,
++     251,   265,   420,     4,   433,   441,     3,     8,   208,     4,
++       3,     8,   412,   350,   364,   362,   285,   287,   289,     4,
++       4,   293,   291,   381,   406,     3,     8,   360,     3,     8,
++     374,     4,   377,     4,     4,     3,     8,   404,   392,   394,
++     396,   398,   400,   402,     8,     3,     8,   322,   227,     4,
++     326,   324,   329,     4,     8,     3,   344,     4,     4,     8,
++       3,   261,   263,     3,     8,     4,   448,   450,     4,   453,
++       4,     4,   457,   460,     4,     4,     4,   465,   468,     3,
++       8,   170,   170,   151,     4,     4,     4,     4,     4,   189,
++       4,     4,     4,   152,   152,   152,   152,   152,     4,     4,
++       4,     4,     4,     4,     4,     4,     4,     4,     4,   152,
++       4,     4,   195,     4,   154,   206,    71,   185,   226,   331,
++     413,   414,   415,   416,   417,     4,     4,     4,     4,     4,
++       4,   152,   154,     4,     4,     4,     4,   283,     4,   358,
++       4,   152,     4,   152,   152,   372,     4,     4,     4,     4,
++       4,     4,     4,   390,     4,     4,   152,     4,     4,     4,
++     154,   317,     4,   154,   154,   341,     4,     4,   259,   154,
++       4,     4,   152,     4,   152,   152,     4,     4,   154,   154,
++     154,     4,     4,   445,     4,     7,     7,   170,   170,   170,
++       7,     7,     7,     5,     5,     5,     5,     5,     5,     5,
++       5,     5,     7,     7,     7,     7,     5,   181,   418,     8,
++       3,     5,     5,   172,   174,   151,   151,   151,    63,    64,
++      65,   294,   151,     5,     7,   151,   151,   151,   181,   181,
++     181,   151,   151,   151,   151,   151,   151,   151,   151,   151,
++     151,   151,   170,   151,   151,   151,   119,   120,   458,   121,
++     122,   123,   124,   125,   154,   466,   151,   170,   194,   127,
++     477,   478,   479,   205,    16,    21,    22,    23,    24,    25,
++      26,    27,    28,    29,    30,   185,   214,   215,   216,   219,
++     221,   223,   225,   226,   228,   229,   230,   231,   232,   234,
++     214,     7,   276,   277,   278,     7,   309,   310,   311,     7,
++     333,   334,   335,     7,   299,   300,   301,    76,   151,   238,
++     239,   240,   241,   179,    77,    79,   240,   244,   245,   246,
++     247,   290,   411,     7,   252,   253,   254,    86,    87,    88,
++      89,    90,    91,   266,   267,   268,   269,   270,   271,   272,
++     273,    16,    96,    97,    98,    99,   185,   228,   421,   422,
++     423,   426,   427,   429,   430,   102,   103,   434,   435,   436,
++     438,   444,   182,     4,   415,     7,   351,   352,   353,     7,
++     365,   366,   367,     7,   382,   383,   384,    81,   407,     8,
++     480,     3,     8,     8,   217,   220,   222,   224,     4,     4,
++       4,     4,     4,   233,   235,     3,     8,     8,   279,     6,
++       3,   312,     6,     3,   336,     6,     3,   302,     6,     3,
++       3,     6,     6,     3,     6,     3,     6,   255,     6,     3,
++       4,     4,     4,     4,     4,     4,     3,     8,   424,   428,
++       4,     4,     4,     3,     8,   437,   439,     3,     8,     8,
++     151,   183,   184,   151,   354,     6,     3,   368,     6,     3,
++     385,     6,     3,   408,     8,     4,   478,     4,     4,     4,
++       4,   152,   154,   152,   154,   152,     4,     4,   215,   282,
++     278,   315,   311,   339,   335,   185,   196,   197,   198,   199,
++     226,   274,   286,   288,   292,   296,   303,   304,   331,   405,
++     409,   301,   239,   245,   290,   258,   254,   152,   152,   152,
++     152,   152,   152,   267,     4,     4,   152,   152,   152,   422,
++       4,     4,   435,     6,     3,   357,   353,   371,   367,   388,
++     384,     4,     5,    17,    18,    19,    20,   218,   151,   151,
++     151,   151,   151,     8,     8,     8,     3,     8,     8,    93,
++      94,    95,   425,   151,   151,   151,   151,     8,     8,     8,
++     151,     7,   481,   482,   304,   483,     3,     6,   128,   130,
++     131,   185,   226,   484,   485,   486,   487,   489,   482,   490,
++       4,   488,     3,     8,     4,   152,     4,   485,     5,   151,
++       7,   491,   492,   493,     3,     6,   129,   132,   133,   134,
++     494,   495,   496,   498,   499,   500,   492,   497,     4,     4,
++       4,     3,     8,     4,   154,   152,   152,   495,   151
    };
  
    const unsigned short int
    Dhcp6Parser::yyr1_[] =
    {
--       0,   154,   156,   155,   157,   155,   158,   155,   159,   155,
--     160,   155,   161,   155,   162,   155,   163,   155,   164,   155,
-      165,   155,   166,   155,   167,   155,   168,   155,   169,   169,
-      169,   169,   169,   169,   169,   170,   172,   171,   173,   174,
-      174,   175,   175,   177,   176,   178,   178,   179,   179,   181,
-      180,   182,   182,   183,   183,   184,   186,   185,   187,   187,
-      188,   188,   188,   188,   188,   188,   190,   189,   192,   191,
-      193,   193,   194,   194,   194,   194,   194,   194,   194,   194,
-      194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-      194,   194,   194,   194,   195,   196,   197,   198,   199,   201,
-      200,   203,   202,   204,   204,   205,   205,   207,   206,   208,
-      210,   209,   212,   211,   213,   213,   214,   214,   214,   214,
-      214,   214,   214,   214,   214,   214,   214,   214,   214,   216,
-      215,   217,   217,   217,   217,   219,   218,   221,   220,   223,
-      222,   224,   226,   225,   227,   228,   229,   230,   232,   231,
-      234,   233,   236,   235,   237,   237,   238,   238,   239,   240,
-      242,   241,   243,   243,   244,   244,   244,   245,   246,   248,
-      247,   250,   249,   251,   251,   252,   252,   254,   253,   256,
-      255,   257,   257,   257,   258,   258,   260,   259,   262,   261,
-      264,   263,   265,   265,   266,   266,   266,   266,   266,   266,
-      267,   268,   269,   270,   271,   272,   274,   273,   275,   275,
-      276,   276,   278,   277,   280,   279,   281,   281,   282,   282,
-      282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
-      282,   282,   282,   282,   282,   282,   284,   283,   286,   285,
-      288,   287,   290,   289,   292,   291,   293,   293,   293,   294,
-      295,   297,   296,   299,   298,   300,   300,   301,   301,   303,
-      302,   305,   304,   306,   306,   307,   307,   308,   308,   308,
-      308,   308,   308,   308,   308,   309,   310,   311,   313,   312,
-      315,   314,   317,   316,   318,   320,   319,   321,   323,   322,
-      324,   324,   325,   325,   327,   326,   329,   328,   330,   330,
-      331,   331,   332,   332,   332,   332,   332,   332,   332,   333,
-      335,   334,   336,   337,   338,   339,   341,   340,   342,   342,
-      343,   343,   345,   344,   347,   346,   348,   348,   349,   349,
-      349,   349,   351,   350,   353,   352,   355,   354,   356,   356,
-      357,   357,   359,   358,   361,   360,   362,   362,   363,   363,
-      363,   363,   363,   363,   363,   363,   365,   364,   366,   368,
-      367,   369,   370,   372,   371,   373,   373,   374,   374,   376,
-      375,   378,   377,   379,   379,   380,   380,   381,   381,   381,
-      381,   381,   381,   381,   381,   381,   383,   382,   385,   384,
-      387,   386,   389,   388,   391,   390,   393,   392,   395,   394,
-      397,   396,   399,   398,   401,   400,   402,   402,   403,   289,
-      404,   404,   405,   405,   406,   406,   406,   406,   407,   409,
-      408,   411,   410,   412,   412,   413,   413,   413,   413,   413,
-      413,   413,   415,   414,   416,   416,   416,   417,   419,   418,
-      420,   421,   422,   424,   423,   425,   425,   426,   426,   428,
-      427,   430,   429,   432,   431,   434,   433,   435,   435,   436,
-      436,   436,   436,   436,   436,   436,   436,   436,   436,   436,
-      436,   436,   436,   436,   437,   439,   438,   441,   440,   442,
-      444,   443,   445,   446,   448,   447,   449,   449,   451,   450,
-      452,   453,   454,   456,   455,   457,   457,   457,   457,   457,
-      459,   458,   461,   460,   463,   462,   465,   464,   467,   466,
-      468,   468,   469,   471,   470,   472,   472,   474,   473,   475,
-      475,   476,   476,   476,   476,   476,   477,   479,   478,   481,
-      480,   482,   482,   484,   483,   485,   485,   486,   486,   486,
-      486,   488,   487,   489,   490,   491
 -     165,   155,   166,   155,   167,   155,   168,   168,   168,   168,
 -     168,   168,   168,   169,   171,   170,   172,   173,   173,   174,
 -     174,   176,   175,   177,   177,   178,   178,   180,   179,   181,
 -     181,   182,   182,   183,   185,   184,   186,   186,   187,   187,
 -     187,   187,   187,   187,   189,   188,   191,   190,   192,   192,
 -     193,   193,   193,   193,   193,   193,   193,   193,   193,   193,
 -     193,   193,   193,   193,   193,   193,   193,   193,   193,   193,
 -     193,   193,   193,   194,   195,   196,   197,   198,   200,   199,
 -     202,   201,   203,   203,   204,   204,   206,   205,   207,   209,
 -     208,   211,   210,   212,   212,   213,   213,   213,   213,   213,
 -     213,   213,   213,   213,   213,   213,   213,   213,   215,   214,
 -     216,   216,   216,   216,   218,   217,   220,   219,   222,   221,
 -     223,   225,   224,   226,   227,   228,   229,   231,   230,   233,
 -     232,   235,   234,   236,   236,   237,   237,   238,   239,   241,
 -     240,   242,   242,   243,   243,   243,   244,   245,   247,   246,
 -     249,   248,   250,   250,   251,   251,   253,   252,   255,   254,
 -     256,   256,   256,   257,   257,   259,   258,   261,   260,   263,
 -     262,   264,   264,   265,   265,   265,   265,   265,   265,   266,
 -     267,   268,   269,   270,   271,   273,   272,   274,   274,   275,
 -     275,   277,   276,   279,   278,   280,   280,   281,   281,   281,
 -     281,   281,   281,   281,   281,   281,   281,   281,   281,   281,
 -     281,   281,   281,   281,   283,   282,   285,   284,   287,   286,
 -     289,   288,   291,   290,   292,   292,   292,   293,   294,   296,
 -     295,   297,   297,   298,   298,   300,   299,   301,   301,   302,
 -     302,   302,   302,   302,   302,   302,   302,   302,   302,   302,
 -     302,   302,   302,   304,   303,   305,   305,   306,   306,   308,
 -     307,   310,   309,   311,   311,   312,   312,   313,   313,   313,
 -     313,   313,   313,   313,   313,   314,   315,   316,   318,   317,
 -     320,   319,   322,   321,   323,   325,   324,   326,   328,   327,
 -     329,   329,   330,   330,   332,   331,   334,   333,   335,   335,
 -     336,   336,   337,   337,   337,   337,   337,   337,   337,   338,
 -     340,   339,   341,   342,   343,   344,   346,   345,   347,   347,
 -     348,   348,   350,   349,   352,   351,   353,   353,   354,   354,
 -     354,   354,   356,   355,   358,   357,   360,   359,   361,   361,
 -     362,   362,   364,   363,   366,   365,   367,   367,   368,   368,
 -     368,   368,   368,   368,   368,   368,   370,   369,   371,   373,
 -     372,   374,   375,   377,   376,   378,   378,   379,   379,   381,
 -     380,   383,   382,   384,   384,   385,   385,   386,   386,   386,
 -     386,   386,   386,   386,   386,   386,   388,   387,   390,   389,
 -     392,   391,   394,   393,   396,   395,   398,   397,   400,   399,
 -     402,   401,   404,   403,   406,   405,   407,   407,   408,   288,
 -     409,   409,   410,   410,   411,   411,   411,   411,   412,   414,
 -     413,   416,   415,   417,   417,   418,   418,   418,   418,   418,
 -     418,   418,   420,   419,   421,   421,   421,   422,   424,   423,
 -     425,   426,   427,   429,   428,   430,   430,   431,   431,   433,
 -     432,   435,   434,   437,   436,   439,   438,   440,   440,   441,
 -     441,   441,   441,   441,   441,   441,   441,   441,   441,   441,
 -     441,   441,   441,   441,   442,   444,   443,   446,   445,   447,
 -     449,   448,   450,   451,   453,   452,   454,   454,   456,   455,
 -     457,   458,   459,   461,   460,   462,   462,   462,   462,   462,
 -     464,   463,   466,   465,   468,   467,   470,   469,   472,   471,
 -     473,   473,   474,   476,   475,   477,   477,   479,   478,   480,
 -     480,   481,   481,   481,   481,   481,   482,   484,   483,   486,
 -     485,   487,   487,   489,   488,   490,   490,   491,   491,   491,
 -     491,   493,   492,   494,   495,   496
++       0,   155,   157,   156,   158,   156,   159,   156,   160,   156,
++     161,   156,   162,   156,   163,   156,   164,   156,   165,   156,
++     166,   156,   167,   156,   168,   156,   169,   156,   170,   170,
++     170,   170,   170,   170,   170,   171,   173,   172,   174,   175,
++     175,   176,   176,   178,   177,   179,   179,   180,   180,   182,
++     181,   183,   183,   184,   184,   185,   187,   186,   188,   188,
++     189,   189,   189,   189,   189,   189,   191,   190,   193,   192,
++     194,   194,   195,   195,   195,   195,   195,   195,   195,   195,
++     195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
++     195,   195,   195,   195,   195,   196,   197,   198,   199,   200,
++     202,   201,   204,   203,   205,   205,   206,   206,   208,   207,
++     209,   211,   210,   213,   212,   214,   214,   215,   215,   215,
++     215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
++     217,   216,   218,   218,   218,   218,   220,   219,   222,   221,
++     224,   223,   225,   227,   226,   228,   229,   230,   231,   233,
++     232,   235,   234,   237,   236,   238,   238,   239,   239,   240,
++     241,   243,   242,   244,   244,   245,   245,   245,   246,   247,
++     249,   248,   251,   250,   252,   252,   253,   253,   255,   254,
++     257,   256,   258,   258,   258,   259,   259,   261,   260,   263,
++     262,   265,   264,   266,   266,   267,   267,   267,   267,   267,
++     267,   268,   269,   270,   271,   272,   273,   275,   274,   276,
++     276,   277,   277,   279,   278,   281,   280,   282,   282,   283,
++     283,   283,   283,   283,   283,   283,   283,   283,   283,   283,
++     283,   283,   283,   283,   283,   283,   283,   285,   284,   287,
++     286,   289,   288,   291,   290,   293,   292,   294,   294,   294,
++     295,   296,   298,   297,   299,   299,   300,   300,   302,   301,
++     303,   303,   304,   304,   304,   304,   304,   304,   304,   304,
++     304,   304,   304,   304,   304,   304,   306,   305,   308,   307,
++     309,   309,   310,   310,   312,   311,   314,   313,   315,   315,
++     316,   316,   317,   317,   317,   317,   317,   317,   317,   317,
++     318,   319,   320,   322,   321,   324,   323,   326,   325,   327,
++     329,   328,   330,   332,   331,   333,   333,   334,   334,   336,
++     335,   338,   337,   339,   339,   340,   340,   341,   341,   341,
++     341,   341,   341,   341,   342,   344,   343,   345,   346,   347,
++     348,   350,   349,   351,   351,   352,   352,   354,   353,   356,
++     355,   357,   357,   358,   358,   358,   358,   360,   359,   362,
++     361,   364,   363,   365,   365,   366,   366,   368,   367,   370,
++     369,   371,   371,   372,   372,   372,   372,   372,   372,   372,
++     372,   374,   373,   375,   377,   376,   378,   379,   381,   380,
++     382,   382,   383,   383,   385,   384,   387,   386,   388,   388,
++     389,   389,   390,   390,   390,   390,   390,   390,   390,   390,
++     390,   392,   391,   394,   393,   396,   395,   398,   397,   400,
++     399,   402,   401,   404,   403,   406,   405,   408,   407,   410,
++     409,   411,   411,   412,   290,   413,   413,   414,   414,   415,
++     415,   415,   415,   416,   418,   417,   420,   419,   421,   421,
++     422,   422,   422,   422,   422,   422,   422,   424,   423,   425,
++     425,   425,   426,   428,   427,   429,   430,   431,   433,   432,
++     434,   434,   435,   435,   437,   436,   439,   438,   441,   440,
++     443,   442,   444,   444,   445,   445,   445,   445,   445,   445,
++     445,   445,   445,   445,   445,   445,   445,   445,   445,   446,
++     448,   447,   450,   449,   451,   453,   452,   454,   455,   457,
++     456,   458,   458,   460,   459,   461,   462,   463,   465,   464,
++     466,   466,   466,   466,   466,   468,   467,   470,   469,   472,
++     471,   474,   473,   476,   475,   477,   477,   478,   480,   479,
++     481,   481,   483,   482,   484,   484,   485,   485,   485,   485,
++     485,   486,   488,   487,   490,   489,   491,   491,   493,   492,
++     494,   494,   495,   495,   495,   495,   497,   496,   498,   499,
++     500
    };
  
    const unsigned char
    {
         0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
         0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
 -       0,     3,     0,     3,     0,     3,     1,     1,     1,     1,
 -       1,     1,     1,     1,     0,     4,     1,     0,     1,     3,
 -       5,     0,     4,     0,     1,     1,     3,     0,     4,     0,
 -       1,     1,     3,     2,     0,     4,     1,     3,     1,     1,
 -       1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
 -       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 +       0,     3,     0,     3,     0,     3,     0,     3,     1,     1,
 +       1,     1,     1,     1,     1,     1,     0,     4,     1,     0,
 +       1,     3,     5,     0,     4,     0,     1,     1,     3,     0,
 +       4,     0,     1,     1,     3,     2,     0,     4,     1,     3,
 +       1,     1,     1,     1,     1,     1,     0,     6,     0,     4,
 +       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-        1,     1,     1,     1,     3,     3,     3,     3,     3,     0,
-        6,     0,     4,     1,     3,     1,     1,     0,     4,     3,
-        0,     6,     0,     6,     1,     3,     1,     1,     1,     1,
-        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-        4,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-        4,     3,     0,     4,     3,     3,     3,     3,     0,     4,
-        0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
-        0,     6,     1,     3,     1,     1,     1,     1,     1,     0,
-        6,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-        4,     1,     3,     1,     1,     1,     0,     4,     0,     4,
-        0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
-        3,     3,     3,     3,     3,     3,     0,     6,     0,     1,
-        1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
 -       1,     1,     1,     3,     3,     3,     3,     3,     0,     6,
 -       0,     4,     1,     3,     1,     1,     0,     4,     3,     0,
 -       6,     0,     6,     1,     3,     1,     1,     1,     1,     1,
 -       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
 -       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
 -       3,     0,     4,     3,     3,     3,     3,     0,     4,     0,
 -       4,     0,     6,     1,     3,     1,     1,     1,     1,     0,
 -       6,     1,     3,     1,     1,     1,     1,     1,     0,     6,
 -       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
 -       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
 -       6,     1,     3,     1,     1,     1,     1,     1,     1,     3,
 -       3,     3,     3,     3,     3,     0,     6,     0,     1,     1,
 -       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
++       1,     1,     1,     1,     1,     3,     3,     3,     3,     3,
++       0,     6,     0,     4,     1,     3,     1,     1,     0,     4,
++       3,     0,     6,     0,     6,     1,     3,     1,     1,     1,
         1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-        1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
-        0,     4,     0,     4,     0,     4,     1,     1,     1,     3,
-        3,     0,     6,     0,     4,     0,     1,     1,     3,     0,
-        4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
-        1,     1,     1,     1,     1,     1,     3,     1,     0,     4,
-        0,     4,     0,     4,     1,     0,     4,     3,     0,     6,
 -       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
 -       0,     4,     0,     4,     1,     1,     1,     3,     3,     0,
 -       6,     0,     1,     1,     3,     0,     4,     1,     3,     1,
++       0,     4,     1,     1,     1,     1,     0,     4,     0,     4,
++       0,     4,     3,     0,     4,     3,     3,     3,     3,     0,
++       4,     0,     4,     0,     6,     1,     3,     1,     1,     1,
++       1,     0,     6,     1,     3,     1,     1,     1,     1,     1,
++       0,     6,     0,     6,     0,     1,     1,     3,     0,     4,
++       0,     4,     1,     3,     1,     1,     1,     0,     4,     0,
++       4,     0,     6,     1,     3,     1,     1,     1,     1,     1,
++       1,     3,     3,     3,     3,     3,     3,     0,     6,     0,
++       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 -       1,     1,     1,     0,     6,     0,     1,     1,     3,     0,
 -       4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
 -       1,     1,     1,     1,     1,     1,     3,     1,     0,     4,
 -       0,     4,     0,     4,     1,     0,     4,     3,     0,     6,
++       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
++       4,     0,     4,     0,     4,     0,     4,     1,     1,     1,
++       3,     3,     0,     6,     0,     1,     1,     3,     0,     4,
++       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     0,     6,     0,     4,
         0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
         1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
--       0,     4,     1,     1,     3,     3,     0,     6,     0,     1,
--       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
--       1,     1,     0,     4,     0,     4,     0,     6,     0,     1,
--       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
--       1,     1,     1,     1,     1,     1,     0,     4,     3,     0,
--       4,     3,     3,     0,     6,     0,     1,     1,     3,     0,
++       1,     3,     1,     0,     4,     0,     4,     0,     4,     1,
++       0,     4,     3,     0,     6,     0,     1,     1,     3,     0,
         4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
--       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
--       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
--       0,     6,     0,     4,     0,     6,     1,     3,     0,     4,
--       0,     1,     1,     3,     1,     1,     1,     1,     1,     0,
--       4,     0,     6,     1,     3,     1,     1,     1,     1,     1,
--       1,     1,     0,     4,     1,     1,     1,     3,     0,     4,
--       3,     3,     3,     0,     6,     1,     3,     1,     1,     0,
--       4,     0,     4,     0,     6,     0,     4,     1,     3,     1,
--       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
--       1,     1,     1,     1,     3,     0,     4,     0,     4,     3,
--       0,     4,     3,     3,     0,     4,     1,     1,     0,     4,
--       3,     3,     3,     0,     4,     1,     1,     1,     1,     1,
--       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
--       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
--       3,     1,     1,     1,     1,     1,     3,     0,     4,     0,
--       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
--       1,     0,     4,     3,     3,     3
++       1,     1,     1,     1,     1,     0,     4,     1,     1,     3,
++       3,     0,     6,     0,     1,     1,     3,     0,     4,     0,
++       4,     1,     3,     1,     1,     1,     1,     0,     4,     0,
++       4,     0,     6,     0,     1,     1,     3,     0,     4,     0,
++       4,     1,     3,     1,     1,     1,     1,     1,     1,     1,
++       1,     0,     4,     3,     0,     4,     3,     3,     0,     6,
++       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
++       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
++       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
++       4,     0,     4,     0,     4,     0,     6,     0,     4,     0,
++       6,     1,     3,     0,     4,     0,     1,     1,     3,     1,
++       1,     1,     1,     1,     0,     4,     0,     6,     1,     3,
++       1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
++       1,     1,     3,     0,     4,     3,     3,     3,     0,     6,
++       1,     3,     1,     1,     0,     4,     0,     4,     0,     6,
++       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
++       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
++       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
++       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
++       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
++       4,     0,     4,     0,     6,     1,     3,     1,     0,     6,
++       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
++       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
++       1,     3,     1,     1,     1,     1,     0,     4,     3,     3,
++       3
    };
  
  
    "expired_leases_params", "expired_leases_param",
    "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
    "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
 -  "unwarned_reclaim_cycles", "subnet6_list", "$@40",
 -  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@41",
 -  "sub_subnet6", "$@42", "subnet6_params", "subnet6_param", "subnet",
 -  "$@43", "interface", "$@44", "interface_id", "$@45", "client_class",
 -  "$@46", "reservation_mode", "$@47", "hr_mode", "id", "rapid_commit",
 -  "shared_networks", "$@48", "shared_networks_content",
 -  "shared_networks_list", "shared_network", "$@49",
 +  "unwarned_reclaim_cycles", "subnet6_list", "$@41",
 +  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@42",
 +  "sub_subnet6", "$@43", "subnet6_params", "subnet6_param", "subnet",
 +  "$@44", "interface", "$@45", "interface_id", "$@46", "client_class",
 +  "$@47", "reservation_mode", "$@48", "hr_mode", "id", "rapid_commit",
-   "option_def_list", "$@49", "sub_option_def_list", "$@50",
-   "option_def_list_content", "not_empty_option_def_list",
-   "option_def_entry", "$@51", "sub_option_def", "$@52",
-   "option_def_params", "not_empty_option_def_params", "option_def_param",
-   "option_def_name", "code", "option_def_code", "option_def_type", "$@53",
-   "option_def_record_types", "$@54", "space", "$@55", "option_def_space",
-   "option_def_encapsulate", "$@56", "option_def_array", "option_data_list",
-   "$@57", "option_data_list_content", "not_empty_option_data_list",
-   "option_data_entry", "$@58", "sub_option_data", "$@59",
++  "shared_networks", "$@49", "shared_networks_content",
++  "shared_networks_list", "shared_network", "$@50",
+   "shared_network_params", "shared_network_param", "option_def_list",
 -  "$@50", "option_def_list_content", "not_empty_option_def_list",
 -  "option_def_entry", "$@51", "sub_option_def", "$@52",
 -  "option_def_params", "not_empty_option_def_params", "option_def_param",
 -  "option_def_name", "code", "option_def_code", "option_def_type", "$@53",
 -  "option_def_record_types", "$@54", "space", "$@55", "option_def_space",
 -  "option_def_encapsulate", "$@56", "option_def_array", "option_data_list",
 -  "$@57", "option_data_list_content", "not_empty_option_data_list",
 -  "option_data_entry", "$@58", "sub_option_data", "$@59",
++  "$@51", "sub_option_def_list", "$@52", "option_def_list_content",
++  "not_empty_option_def_list", "option_def_entry", "$@53",
++  "sub_option_def", "$@54", "option_def_params",
++  "not_empty_option_def_params", "option_def_param", "option_def_name",
++  "code", "option_def_code", "option_def_type", "$@55",
++  "option_def_record_types", "$@56", "space", "$@57", "option_def_space",
++  "option_def_encapsulate", "$@58", "option_def_array", "option_data_list",
++  "$@59", "option_data_list_content", "not_empty_option_data_list",
++  "option_data_entry", "$@60", "sub_option_data", "$@61",
    "option_data_params", "not_empty_option_data_params",
--  "option_data_param", "option_data_name", "option_data_data", "$@60",
++  "option_data_param", "option_data_name", "option_data_data", "$@62",
    "option_data_code", "option_data_space", "option_data_csv_format",
--  "option_data_always_send", "pools_list", "$@61", "pools_list_content",
--  "not_empty_pools_list", "pool_list_entry", "$@62", "sub_pool6", "$@63",
--  "pool_params", "pool_param", "pool_entry", "$@64", "user_context",
--  "$@65", "pd_pools_list", "$@66", "pd_pools_list_content",
--  "not_empty_pd_pools_list", "pd_pool_entry", "$@67", "sub_pd_pool",
--  "$@68", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@69",
--  "pd_prefix_len", "excluded_prefix", "$@70", "excluded_prefix_len",
--  "pd_delegated_len", "reservations", "$@71", "reservations_list",
--  "not_empty_reservations_list", "reservation", "$@72", "sub_reservation",
--  "$@73", "reservation_params", "not_empty_reservation_params",
--  "reservation_param", "ip_addresses", "$@74", "prefixes", "$@75", "duid",
--  "$@76", "hw_address", "$@77", "hostname", "$@78", "flex_id_value",
--  "$@79", "reservation_client_classes", "$@80", "relay", "$@81",
--  "relay_map", "$@82", "client_classes", "$@83", "client_classes_list",
--  "$@84", "client_class_params", "not_empty_client_class_params",
--  "client_class_param", "client_class_name", "client_class_test", "$@85",
--  "server_id", "$@86", "server_id_params", "server_id_param",
--  "server_id_type", "$@87", "duid_type", "htype", "identifier", "$@88",
--  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@89",
--  "control_socket_params", "control_socket_param", "socket_type", "$@90",
--  "socket_name", "$@91", "dhcp_ddns", "$@92", "sub_dhcp_ddns", "$@93",
++  "option_data_always_send", "pools_list", "$@63", "pools_list_content",
++  "not_empty_pools_list", "pool_list_entry", "$@64", "sub_pool6", "$@65",
++  "pool_params", "pool_param", "pool_entry", "$@66", "user_context",
++  "$@67", "pd_pools_list", "$@68", "pd_pools_list_content",
++  "not_empty_pd_pools_list", "pd_pool_entry", "$@69", "sub_pd_pool",
++  "$@70", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@71",
++  "pd_prefix_len", "excluded_prefix", "$@72", "excluded_prefix_len",
++  "pd_delegated_len", "reservations", "$@73", "reservations_list",
++  "not_empty_reservations_list", "reservation", "$@74", "sub_reservation",
++  "$@75", "reservation_params", "not_empty_reservation_params",
++  "reservation_param", "ip_addresses", "$@76", "prefixes", "$@77", "duid",
++  "$@78", "hw_address", "$@79", "hostname", "$@80", "flex_id_value",
++  "$@81", "reservation_client_classes", "$@82", "relay", "$@83",
++  "relay_map", "$@84", "client_classes", "$@85", "client_classes_list",
++  "$@86", "client_class_params", "not_empty_client_class_params",
++  "client_class_param", "client_class_name", "client_class_test", "$@87",
++  "server_id", "$@88", "server_id_params", "server_id_param",
++  "server_id_type", "$@89", "duid_type", "htype", "identifier", "$@90",
++  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@91",
++  "control_socket_params", "control_socket_param", "socket_type", "$@92",
++  "socket_name", "$@93", "dhcp_ddns", "$@94", "sub_dhcp_ddns", "$@95",
    "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
--  "qualifying_suffix", "$@94", "server_ip", "$@95", "server_port",
--  "sender_ip", "$@96", "sender_port", "max_queue_size", "ncr_protocol",
--  "$@97", "ncr_protocol_value", "ncr_format", "$@98",
++  "qualifying_suffix", "$@96", "server_ip", "$@97", "server_port",
++  "sender_ip", "$@98", "sender_port", "max_queue_size", "ncr_protocol",
++  "$@99", "ncr_protocol_value", "ncr_format", "$@100",
    "always_include_fqdn", "override_no_update", "override_client_update",
--  "replace_client_name", "$@99", "replace_client_name_value",
--  "generated_prefix", "$@100", "dhcp4_json_object", "$@101",
--  "dhcpddns_json_object", "$@102", "control_agent_json_object", "$@103",
--  "logging_object", "$@104", "logging_params", "logging_param", "loggers",
--  "$@105", "loggers_entries", "logger_entry", "$@106", "logger_params",
--  "logger_param", "debuglevel", "severity", "$@107", "output_options_list",
--  "$@108", "output_options_list_content", "output_entry", "$@109",
--  "output_params_list", "output_params", "output", "$@110", "flush",
++  "replace_client_name", "$@101", "replace_client_name_value",
++  "generated_prefix", "$@102", "dhcp4_json_object", "$@103",
++  "dhcpddns_json_object", "$@104", "control_agent_json_object", "$@105",
++  "logging_object", "$@106", "logging_params", "logging_param", "loggers",
++  "$@107", "loggers_entries", "logger_entry", "$@108", "logger_params",
++  "logger_param", "debuglevel", "severity", "$@109", "output_options_list",
++  "$@110", "output_options_list_content", "output_entry", "$@111",
++  "output_params_list", "output_params", "output", "$@112", "flush",
    "maxsize", "maxver", YY_NULLPTR
    };
  
    const unsigned short int
    Dhcp6Parser::yyrline_[] =
    {
--       0,   235,   235,   235,   236,   236,   237,   237,   238,   238,
--     239,   239,   240,   240,   241,   241,   242,   242,   243,   243,
-      244,   244,   245,   245,   246,   246,   247,   247,   255,   256,
-      257,   258,   259,   260,   261,   264,   269,   269,   280,   283,
-      284,   287,   291,   298,   298,   305,   306,   309,   313,   320,
-      320,   327,   328,   331,   335,   346,   356,   356,   371,   372,
-      376,   377,   378,   379,   380,   381,   384,   384,   399,   399,
-      408,   409,   414,   415,   416,   417,   418,   419,   420,   421,
-      422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
-      432,   433,   434,   435,   438,   443,   448,   453,   458,   463,
-      463,   474,   474,   483,   484,   487,   488,   491,   491,   501,
-      507,   507,   519,   519,   531,   532,   535,   536,   537,   538,
-      539,   540,   541,   542,   543,   544,   545,   546,   547,   550,
-      550,   557,   558,   559,   560,   563,   563,   571,   571,   579,
-      579,   587,   592,   592,   600,   605,   610,   615,   620,   620,
-      628,   628,   637,   637,   647,   648,   651,   652,   655,   660,
-      665,   665,   675,   676,   679,   680,   681,   684,   689,   696,
-      696,   706,   706,   716,   717,   720,   721,   724,   724,   734,
-      734,   744,   745,   746,   749,   750,   753,   753,   761,   761,
-      769,   769,   780,   781,   784,   785,   786,   787,   788,   789,
-      792,   797,   802,   807,   812,   817,   825,   825,   838,   839,
-      842,   843,   850,   850,   876,   876,   887,   888,   892,   893,
-      894,   895,   896,   897,   898,   899,   900,   901,   902,   903,
-      904,   905,   906,   907,   908,   909,   912,   912,   920,   920,
-      928,   928,   936,   936,   944,   944,   951,   952,   953,   956,
-      961,   970,   970,   983,   983,   992,   993,   996,   997,  1002,
-     1002,  1017,  1017,  1031,  1032,  1035,  1036,  1039,  1040,  1041,
-     1042,  1043,  1044,  1045,  1046,  1049,  1051,  1056,  1058,  1058,
-     1066,  1066,  1074,  1074,  1082,  1084,  1084,  1092,  1101,  1101,
-     1113,  1114,  1119,  1120,  1125,  1125,  1137,  1137,  1149,  1150,
-     1155,  1156,  1161,  1162,  1163,  1164,  1165,  1166,  1167,  1170,
-     1172,  1172,  1180,  1182,  1184,  1189,  1197,  1197,  1209,  1210,
-     1213,  1214,  1217,  1217,  1227,  1227,  1236,  1237,  1240,  1241,
-     1242,  1243,  1246,  1246,  1254,  1254,  1264,  1264,  1276,  1277,
-     1280,  1281,  1284,  1284,  1296,  1296,  1308,  1309,  1312,  1313,
-     1314,  1315,  1316,  1317,  1318,  1319,  1322,  1322,  1330,  1335,
-     1335,  1343,  1348,  1356,  1356,  1366,  1367,  1370,  1371,  1374,
-     1374,  1383,  1383,  1392,  1393,  1396,  1397,  1401,  1402,  1403,
-     1404,  1405,  1406,  1407,  1408,  1409,  1412,  1412,  1422,  1422,
-     1432,  1432,  1440,  1440,  1448,  1448,  1456,  1456,  1464,  1464,
-     1477,  1477,  1487,  1487,  1498,  1498,  1508,  1509,  1512,  1512,
-     1522,  1523,  1526,  1527,  1530,  1531,  1532,  1533,  1536,  1538,
-     1538,  1549,  1549,  1561,  1562,  1565,  1566,  1567,  1568,  1569,
-     1570,  1571,  1574,  1574,  1581,  1582,  1583,  1586,  1591,  1591,
-     1599,  1604,  1611,  1618,  1618,  1628,  1629,  1632,  1633,  1636,
-     1636,  1644,  1644,  1654,  1654,  1666,  1666,  1676,  1677,  1680,
-     1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,  1689,  1690,
-     1691,  1692,  1693,  1694,  1697,  1702,  1702,  1710,  1710,  1718,
-     1723,  1723,  1731,  1736,  1741,  1741,  1749,  1750,  1753,  1753,
-     1761,  1766,  1771,  1776,  1776,  1784,  1787,  1790,  1793,  1796,
-     1802,  1802,  1812,  1812,  1819,  1819,  1826,  1826,  1839,  1839,
-     1852,  1853,  1857,  1861,  1861,  1873,  1874,  1878,  1878,  1886,
-     1887,  1890,  1891,  1892,  1893,  1894,  1897,  1902,  1902,  1910,
-     1910,  1920,  1921,  1924,  1924,  1932,  1933,  1936,  1937,  1938,
-     1939,  1942,  1942,  1950,  1955,  1960
 -     244,   244,   245,   245,   246,   246,   254,   255,   256,   257,
 -     258,   259,   260,   263,   268,   268,   279,   282,   283,   286,
 -     290,   297,   297,   304,   305,   308,   312,   319,   319,   326,
 -     327,   330,   334,   345,   355,   355,   367,   368,   372,   373,
 -     374,   375,   376,   377,   380,   380,   397,   397,   405,   406,
 -     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
 -     421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
 -     431,   432,   433,   436,   441,   446,   451,   456,   461,   461,
 -     471,   471,   479,   480,   483,   484,   487,   487,   497,   503,
 -     503,   513,   513,   523,   524,   527,   528,   529,   530,   531,
 -     532,   533,   534,   535,   536,   537,   538,   539,   542,   542,
 -     549,   550,   551,   552,   555,   555,   563,   563,   571,   571,
 -     579,   584,   584,   592,   597,   602,   607,   612,   612,   620,
 -     620,   629,   629,   639,   640,   643,   644,   647,   652,   657,
 -     657,   667,   668,   671,   672,   673,   676,   681,   688,   688,
 -     698,   698,   708,   709,   712,   713,   716,   716,   724,   724,
 -     732,   733,   734,   737,   738,   741,   741,   749,   749,   757,
 -     757,   767,   768,   771,   772,   773,   774,   775,   776,   779,
 -     784,   789,   794,   799,   804,   812,   812,   825,   826,   829,
 -     830,   837,   837,   860,   860,   869,   870,   874,   875,   876,
 -     877,   878,   879,   880,   881,   882,   883,   884,   885,   886,
 -     887,   888,   889,   890,   893,   893,   901,   901,   909,   909,
 -     917,   917,   925,   925,   932,   933,   934,   937,   942,   950,
 -     950,   961,   962,   966,   967,   970,   970,   978,   979,   982,
 -     983,   984,   985,   986,   987,   988,   989,   990,   991,   992,
 -     993,   994,   995,  1002,  1002,  1014,  1015,  1018,  1019,  1024,
 -    1024,  1035,  1035,  1045,  1046,  1049,  1050,  1053,  1054,  1055,
 -    1056,  1057,  1058,  1059,  1060,  1063,  1065,  1070,  1072,  1072,
 -    1080,  1080,  1088,  1088,  1096,  1098,  1098,  1106,  1115,  1115,
 -    1127,  1128,  1133,  1134,  1139,  1139,  1150,  1150,  1161,  1162,
 -    1167,  1168,  1173,  1174,  1175,  1176,  1177,  1178,  1179,  1182,
 -    1184,  1184,  1192,  1194,  1196,  1201,  1209,  1209,  1221,  1222,
 -    1225,  1226,  1229,  1229,  1237,  1237,  1245,  1246,  1249,  1250,
 -    1251,  1252,  1255,  1255,  1263,  1263,  1273,  1273,  1285,  1286,
 -    1289,  1290,  1293,  1293,  1301,  1301,  1309,  1310,  1313,  1314,
 -    1315,  1316,  1317,  1318,  1319,  1320,  1323,  1323,  1331,  1336,
 -    1336,  1344,  1349,  1357,  1357,  1367,  1368,  1371,  1372,  1375,
 -    1375,  1383,  1383,  1391,  1392,  1395,  1396,  1400,  1401,  1402,
 -    1403,  1404,  1405,  1406,  1407,  1408,  1411,  1411,  1421,  1421,
 -    1431,  1431,  1439,  1439,  1447,  1447,  1455,  1455,  1463,  1463,
 -    1476,  1476,  1486,  1486,  1497,  1497,  1507,  1508,  1511,  1511,
 -    1519,  1520,  1523,  1524,  1527,  1528,  1529,  1530,  1533,  1535,
 -    1535,  1546,  1546,  1556,  1557,  1560,  1561,  1562,  1563,  1564,
 -    1565,  1566,  1569,  1569,  1576,  1577,  1578,  1581,  1586,  1586,
 -    1594,  1599,  1606,  1613,  1613,  1623,  1624,  1627,  1628,  1631,
 -    1631,  1639,  1639,  1649,  1649,  1659,  1659,  1667,  1668,  1671,
 -    1672,  1673,  1674,  1675,  1676,  1677,  1678,  1679,  1680,  1681,
 -    1682,  1683,  1684,  1685,  1688,  1693,  1693,  1701,  1701,  1709,
 -    1714,  1714,  1722,  1727,  1732,  1732,  1740,  1741,  1744,  1744,
 -    1752,  1757,  1762,  1767,  1767,  1775,  1778,  1781,  1784,  1787,
 -    1793,  1793,  1803,  1803,  1810,  1810,  1817,  1817,  1830,  1830,
 -    1843,  1844,  1848,  1852,  1852,  1864,  1865,  1869,  1869,  1877,
 -    1878,  1881,  1882,  1883,  1884,  1885,  1888,  1893,  1893,  1901,
 -    1901,  1911,  1912,  1915,  1915,  1923,  1924,  1927,  1928,  1929,
 -    1930,  1933,  1933,  1941,  1946,  1951
++       0,   236,   236,   236,   237,   237,   238,   238,   239,   239,
++     240,   240,   241,   241,   242,   242,   243,   243,   244,   244,
++     245,   245,   246,   246,   247,   247,   248,   248,   256,   257,
++     258,   259,   260,   261,   262,   265,   270,   270,   281,   284,
++     285,   288,   292,   299,   299,   306,   307,   310,   314,   321,
++     321,   328,   329,   332,   336,   347,   357,   357,   372,   373,
++     377,   378,   379,   380,   381,   382,   385,   385,   400,   400,
++     409,   410,   415,   416,   417,   418,   419,   420,   421,   422,
++     423,   424,   425,   426,   427,   428,   429,   430,   431,   432,
++     433,   434,   435,   436,   437,   440,   445,   450,   455,   460,
++     465,   465,   476,   476,   485,   486,   489,   490,   493,   493,
++     503,   509,   509,   521,   521,   533,   534,   537,   538,   539,
++     540,   541,   542,   543,   544,   545,   546,   547,   548,   549,
++     552,   552,   559,   560,   561,   562,   565,   565,   573,   573,
++     581,   581,   589,   594,   594,   602,   607,   612,   617,   622,
++     622,   630,   630,   639,   639,   649,   650,   653,   654,   657,
++     662,   667,   667,   677,   678,   681,   682,   683,   686,   691,
++     698,   698,   708,   708,   718,   719,   722,   723,   726,   726,
++     736,   736,   746,   747,   748,   751,   752,   755,   755,   763,
++     763,   771,   771,   782,   783,   786,   787,   788,   789,   790,
++     791,   794,   799,   804,   809,   814,   819,   827,   827,   840,
++     841,   844,   845,   852,   852,   878,   878,   889,   890,   894,
++     895,   896,   897,   898,   899,   900,   901,   902,   903,   904,
++     905,   906,   907,   908,   909,   910,   911,   914,   914,   922,
++     922,   930,   930,   938,   938,   946,   946,   953,   954,   955,
++     958,   963,   971,   971,   982,   983,   987,   988,   991,   991,
++     999,  1000,  1003,  1004,  1005,  1006,  1007,  1008,  1009,  1010,
++    1011,  1012,  1013,  1014,  1015,  1016,  1023,  1023,  1036,  1036,
++    1045,  1046,  1049,  1050,  1055,  1055,  1070,  1070,  1084,  1085,
++    1088,  1089,  1092,  1093,  1094,  1095,  1096,  1097,  1098,  1099,
++    1102,  1104,  1109,  1111,  1111,  1119,  1119,  1127,  1127,  1135,
++    1137,  1137,  1145,  1154,  1154,  1166,  1167,  1172,  1173,  1178,
++    1178,  1190,  1190,  1202,  1203,  1208,  1209,  1214,  1215,  1216,
++    1217,  1218,  1219,  1220,  1223,  1225,  1225,  1233,  1235,  1237,
++    1242,  1250,  1250,  1262,  1263,  1266,  1267,  1270,  1270,  1280,
++    1280,  1289,  1290,  1293,  1294,  1295,  1296,  1299,  1299,  1307,
++    1307,  1317,  1317,  1329,  1330,  1333,  1334,  1337,  1337,  1349,
++    1349,  1361,  1362,  1365,  1366,  1367,  1368,  1369,  1370,  1371,
++    1372,  1375,  1375,  1383,  1388,  1388,  1396,  1401,  1409,  1409,
++    1419,  1420,  1423,  1424,  1427,  1427,  1436,  1436,  1445,  1446,
++    1449,  1450,  1454,  1455,  1456,  1457,  1458,  1459,  1460,  1461,
++    1462,  1465,  1465,  1475,  1475,  1485,  1485,  1493,  1493,  1501,
++    1501,  1509,  1509,  1517,  1517,  1530,  1530,  1540,  1540,  1551,
++    1551,  1561,  1562,  1565,  1565,  1575,  1576,  1579,  1580,  1583,
++    1584,  1585,  1586,  1589,  1591,  1591,  1602,  1602,  1614,  1615,
++    1618,  1619,  1620,  1621,  1622,  1623,  1624,  1627,  1627,  1634,
++    1635,  1636,  1639,  1644,  1644,  1652,  1657,  1664,  1671,  1671,
++    1681,  1682,  1685,  1686,  1689,  1689,  1697,  1697,  1707,  1707,
++    1719,  1719,  1729,  1730,  1733,  1734,  1735,  1736,  1737,  1738,
++    1739,  1740,  1741,  1742,  1743,  1744,  1745,  1746,  1747,  1750,
++    1755,  1755,  1763,  1763,  1771,  1776,  1776,  1784,  1789,  1794,
++    1794,  1802,  1803,  1806,  1806,  1814,  1819,  1824,  1829,  1829,
++    1837,  1840,  1843,  1846,  1849,  1855,  1855,  1865,  1865,  1872,
++    1872,  1879,  1879,  1892,  1892,  1905,  1906,  1910,  1914,  1914,
++    1926,  1927,  1931,  1931,  1939,  1940,  1943,  1944,  1945,  1946,
++    1947,  1950,  1955,  1955,  1963,  1963,  1973,  1974,  1977,  1977,
++    1985,  1986,  1989,  1990,  1991,  1992,  1995,  1995,  2003,  2008,
++    2013
    };
  
    // Print the state stack on the debug stream.
  
  #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
  } } // isc::dhcp
- #line 4400 "dhcp6_parser.cc" // lalr1.cc:1167
- #line 1965 "dhcp6_parser.yy" // lalr1.cc:1168
 -#line 4391 "dhcp6_parser.cc" // lalr1.cc:1167
 -#line 1956 "dhcp6_parser.yy" // lalr1.cc:1168
++#line 4467 "dhcp6_parser.cc" // lalr1.cc:1167
++#line 2018 "dhcp6_parser.yy" // lalr1.cc:1168
  
  
  void
index 36ef25107bff1c87fff81a7213d67dcc664979b5,5b20252f1649b3d0910b522b54b01cc5330eb4e1..74da4209829f65e4238adbd577d6a3cf32062ac0
@@@ -410,94 -410,94 +410,95 @@@ namespace isc { namespace dhcp 
          TOKEN_DISABLED = 318,
          TOKEN_OUT_OF_POOL = 319,
          TOKEN_ALL = 320,
-         TOKEN_MAC_SOURCES = 321,
-         TOKEN_RELAY_SUPPLIED_OPTIONS = 322,
-         TOKEN_HOST_RESERVATION_IDENTIFIERS = 323,
-         TOKEN_CLIENT_CLASSES = 324,
-         TOKEN_TEST = 325,
-         TOKEN_CLIENT_CLASS = 326,
-         TOKEN_RESERVATIONS = 327,
-         TOKEN_IP_ADDRESSES = 328,
-         TOKEN_PREFIXES = 329,
-         TOKEN_DUID = 330,
-         TOKEN_HW_ADDRESS = 331,
-         TOKEN_HOSTNAME = 332,
-         TOKEN_FLEX_ID = 333,
-         TOKEN_RELAY = 334,
-         TOKEN_IP_ADDRESS = 335,
-         TOKEN_HOOKS_LIBRARIES = 336,
-         TOKEN_LIBRARY = 337,
-         TOKEN_PARAMETERS = 338,
-         TOKEN_EXPIRED_LEASES_PROCESSING = 339,
-         TOKEN_RECLAIM_TIMER_WAIT_TIME = 340,
-         TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 341,
-         TOKEN_HOLD_RECLAIMED_TIME = 342,
-         TOKEN_MAX_RECLAIM_LEASES = 343,
-         TOKEN_MAX_RECLAIM_TIME = 344,
-         TOKEN_UNWARNED_RECLAIM_CYCLES = 345,
-         TOKEN_SERVER_ID = 346,
-         TOKEN_LLT = 347,
-         TOKEN_EN = 348,
-         TOKEN_LL = 349,
-         TOKEN_IDENTIFIER = 350,
-         TOKEN_HTYPE = 351,
-         TOKEN_TIME = 352,
-         TOKEN_ENTERPRISE_ID = 353,
-         TOKEN_DHCP4O6_PORT = 354,
-         TOKEN_CONTROL_SOCKET = 355,
-         TOKEN_SOCKET_TYPE = 356,
-         TOKEN_SOCKET_NAME = 357,
-         TOKEN_DHCP_DDNS = 358,
-         TOKEN_ENABLE_UPDATES = 359,
-         TOKEN_QUALIFYING_SUFFIX = 360,
-         TOKEN_SERVER_IP = 361,
-         TOKEN_SERVER_PORT = 362,
-         TOKEN_SENDER_IP = 363,
-         TOKEN_SENDER_PORT = 364,
-         TOKEN_MAX_QUEUE_SIZE = 365,
-         TOKEN_NCR_PROTOCOL = 366,
-         TOKEN_NCR_FORMAT = 367,
-         TOKEN_ALWAYS_INCLUDE_FQDN = 368,
-         TOKEN_OVERRIDE_NO_UPDATE = 369,
-         TOKEN_OVERRIDE_CLIENT_UPDATE = 370,
-         TOKEN_REPLACE_CLIENT_NAME = 371,
-         TOKEN_GENERATED_PREFIX = 372,
-         TOKEN_UDP = 373,
-         TOKEN_TCP = 374,
-         TOKEN_JSON = 375,
-         TOKEN_WHEN_PRESENT = 376,
-         TOKEN_NEVER = 377,
-         TOKEN_ALWAYS = 378,
-         TOKEN_WHEN_NOT_PRESENT = 379,
-         TOKEN_LOGGING = 380,
-         TOKEN_LOGGERS = 381,
-         TOKEN_OUTPUT_OPTIONS = 382,
-         TOKEN_OUTPUT = 383,
-         TOKEN_DEBUGLEVEL = 384,
-         TOKEN_SEVERITY = 385,
-         TOKEN_FLUSH = 386,
-         TOKEN_MAXSIZE = 387,
-         TOKEN_MAXVER = 388,
-         TOKEN_DHCP4 = 389,
-         TOKEN_DHCPDDNS = 390,
-         TOKEN_CONTROL_AGENT = 391,
-         TOKEN_TOPLEVEL_JSON = 392,
-         TOKEN_TOPLEVEL_DHCP6 = 393,
-         TOKEN_SUB_DHCP6 = 394,
-         TOKEN_SUB_INTERFACES6 = 395,
-         TOKEN_SUB_SUBNET6 = 396,
-         TOKEN_SUB_POOL6 = 397,
-         TOKEN_SUB_PD_POOL = 398,
-         TOKEN_SUB_RESERVATION = 399,
-         TOKEN_SUB_OPTION_DEFS = 400,
-         TOKEN_SUB_OPTION_DEF = 401,
-         TOKEN_SUB_OPTION_DATA = 402,
-         TOKEN_SUB_HOOKS_LIBRARY = 403,
-         TOKEN_SUB_DHCP_DDNS = 404,
-         TOKEN_STRING = 405,
-         TOKEN_INTEGER = 406,
-         TOKEN_FLOAT = 407,
-         TOKEN_BOOLEAN = 408
+         TOKEN_SHARED_NETWORKS = 321,
+         TOKEN_MAC_SOURCES = 322,
+         TOKEN_RELAY_SUPPLIED_OPTIONS = 323,
+         TOKEN_HOST_RESERVATION_IDENTIFIERS = 324,
+         TOKEN_CLIENT_CLASSES = 325,
+         TOKEN_TEST = 326,
+         TOKEN_CLIENT_CLASS = 327,
+         TOKEN_RESERVATIONS = 328,
+         TOKEN_IP_ADDRESSES = 329,
+         TOKEN_PREFIXES = 330,
+         TOKEN_DUID = 331,
+         TOKEN_HW_ADDRESS = 332,
+         TOKEN_HOSTNAME = 333,
+         TOKEN_FLEX_ID = 334,
+         TOKEN_RELAY = 335,
+         TOKEN_IP_ADDRESS = 336,
+         TOKEN_HOOKS_LIBRARIES = 337,
+         TOKEN_LIBRARY = 338,
+         TOKEN_PARAMETERS = 339,
+         TOKEN_EXPIRED_LEASES_PROCESSING = 340,
+         TOKEN_RECLAIM_TIMER_WAIT_TIME = 341,
+         TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 342,
+         TOKEN_HOLD_RECLAIMED_TIME = 343,
+         TOKEN_MAX_RECLAIM_LEASES = 344,
+         TOKEN_MAX_RECLAIM_TIME = 345,
+         TOKEN_UNWARNED_RECLAIM_CYCLES = 346,
+         TOKEN_SERVER_ID = 347,
+         TOKEN_LLT = 348,
+         TOKEN_EN = 349,
+         TOKEN_LL = 350,
+         TOKEN_IDENTIFIER = 351,
+         TOKEN_HTYPE = 352,
+         TOKEN_TIME = 353,
+         TOKEN_ENTERPRISE_ID = 354,
+         TOKEN_DHCP4O6_PORT = 355,
+         TOKEN_CONTROL_SOCKET = 356,
+         TOKEN_SOCKET_TYPE = 357,
+         TOKEN_SOCKET_NAME = 358,
+         TOKEN_DHCP_DDNS = 359,
+         TOKEN_ENABLE_UPDATES = 360,
+         TOKEN_QUALIFYING_SUFFIX = 361,
+         TOKEN_SERVER_IP = 362,
+         TOKEN_SERVER_PORT = 363,
+         TOKEN_SENDER_IP = 364,
+         TOKEN_SENDER_PORT = 365,
+         TOKEN_MAX_QUEUE_SIZE = 366,
+         TOKEN_NCR_PROTOCOL = 367,
+         TOKEN_NCR_FORMAT = 368,
+         TOKEN_ALWAYS_INCLUDE_FQDN = 369,
+         TOKEN_OVERRIDE_NO_UPDATE = 370,
+         TOKEN_OVERRIDE_CLIENT_UPDATE = 371,
+         TOKEN_REPLACE_CLIENT_NAME = 372,
+         TOKEN_GENERATED_PREFIX = 373,
+         TOKEN_UDP = 374,
+         TOKEN_TCP = 375,
+         TOKEN_JSON = 376,
+         TOKEN_WHEN_PRESENT = 377,
+         TOKEN_NEVER = 378,
+         TOKEN_ALWAYS = 379,
+         TOKEN_WHEN_NOT_PRESENT = 380,
+         TOKEN_LOGGING = 381,
+         TOKEN_LOGGERS = 382,
+         TOKEN_OUTPUT_OPTIONS = 383,
+         TOKEN_OUTPUT = 384,
+         TOKEN_DEBUGLEVEL = 385,
+         TOKEN_SEVERITY = 386,
+         TOKEN_FLUSH = 387,
+         TOKEN_MAXSIZE = 388,
+         TOKEN_MAXVER = 389,
+         TOKEN_DHCP4 = 390,
+         TOKEN_DHCPDDNS = 391,
+         TOKEN_CONTROL_AGENT = 392,
+         TOKEN_TOPLEVEL_JSON = 393,
+         TOKEN_TOPLEVEL_DHCP6 = 394,
+         TOKEN_SUB_DHCP6 = 395,
+         TOKEN_SUB_INTERFACES6 = 396,
+         TOKEN_SUB_SUBNET6 = 397,
+         TOKEN_SUB_POOL6 = 398,
+         TOKEN_SUB_PD_POOL = 399,
+         TOKEN_SUB_RESERVATION = 400,
 -        TOKEN_SUB_OPTION_DEF = 401,
 -        TOKEN_SUB_OPTION_DATA = 402,
 -        TOKEN_SUB_HOOKS_LIBRARY = 403,
 -        TOKEN_SUB_DHCP_DDNS = 404,
 -        TOKEN_STRING = 405,
 -        TOKEN_INTEGER = 406,
 -        TOKEN_FLOAT = 407,
 -        TOKEN_BOOLEAN = 408
++        TOKEN_SUB_OPTION_DEFS = 401,
++        TOKEN_SUB_OPTION_DEF = 402,
++        TOKEN_SUB_OPTION_DATA = 403,
++        TOKEN_SUB_HOOKS_LIBRARY = 404,
++        TOKEN_SUB_DHCP_DDNS = 405,
++        TOKEN_STRING = 406,
++        TOKEN_INTEGER = 407,
++        TOKEN_FLOAT = 408,
++        TOKEN_BOOLEAN = 409
        };
      };
  
      enum
      {
        yyeof_ = 0,
-       yylast_ = 804,     ///< Last index in yytable_.
-       yynnts_ = 338,  ///< Number of nonterminal symbols.
+       yylast_ = 836,     ///< Last index in yytable_.
 -      yynnts_ = 343,  ///< Number of nonterminal symbols.
 -      yyfinal_ = 26, ///< Termination state number.
++      yynnts_ = 346,  ///< Number of nonterminal symbols.
 +      yyfinal_ = 28, ///< Termination state number.
        yyterror_ = 1,
        yyerrcode_ = 256,
--      yyntokens_ = 154  ///< Number of tokens.
++      yyntokens_ = 155  ///< Number of tokens.
      };
  
  
       115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
       125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
       135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
--     145,   146,   147,   148,   149,   150,   151,   152,   153
++     145,   146,   147,   148,   149,   150,   151,   152,   153,   154
      };
--    const unsigned int user_token_number_max_ = 408;
++    const unsigned int user_token_number_max_ = 409;
      const token_number_type undef_token_ = 2;
  
      if (static_cast<int>(t) <= yyeof_)
    {
        switch (other.type_get ())
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.copy< ElementPtr > (other.value);
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.copy< bool > (other.value);
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.copy< double > (other.value);
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.copy< int64_t > (other.value);
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.copy< std::string > (other.value);
          break;
  
      (void) v;
        switch (this->type_get ())
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.copy< ElementPtr > (v);
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.copy< bool > (v);
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.copy< double > (v);
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.copy< int64_t > (v);
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.copy< std::string > (v);
          break;
  
      // Type destructor.
      switch (yytype)
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.template destroy< ElementPtr > ();
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.template destroy< bool > ();
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.template destroy< double > ();
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.template destroy< int64_t > ();
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.template destroy< std::string > ();
          break;
  
      super_type::move(s);
        switch (this->type_get ())
      {
-       case 169: // value
-       case 173: // map_value
-       case 217: // db_type
-       case 293: // hr_mode
-       case 416: // duid_type
-       case 449: // ncr_protocol_value
-       case 457: // replace_client_name_value
 -      case 168: // value
 -      case 172: // map_value
 -      case 216: // db_type
 -      case 292: // hr_mode
 -      case 421: // duid_type
 -      case 454: // ncr_protocol_value
 -      case 462: // replace_client_name_value
++      case 170: // value
++      case 174: // map_value
++      case 218: // db_type
++      case 294: // hr_mode
++      case 425: // duid_type
++      case 458: // ncr_protocol_value
++      case 466: // replace_client_name_value
          value.move< ElementPtr > (s.value);
          break;
  
--      case 153: // "boolean"
++      case 154: // "boolean"
          value.move< bool > (s.value);
          break;
  
--      case 152: // "floating point"
++      case 153: // "floating point"
          value.move< double > (s.value);
          break;
  
--      case 151: // "integer"
++      case 152: // "integer"
          value.move< int64_t > (s.value);
          break;
  
--      case 150: // "constant string"
++      case 151: // "constant string"
          value.move< std::string > (s.value);
          break;
  
       375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
       385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
       395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
--     405,   406,   407,   408
++     405,   406,   407,   408,   409
      };
      return static_cast<token_type> (yytoken_number_[type]);
    }
  
  #line 14 "dhcp6_parser.yy" // lalr1.cc:377
  } } // isc::dhcp
--#line 2736 "dhcp6_parser.h" // lalr1.cc:377
++#line 2747 "dhcp6_parser.h" // lalr1.cc:377
  
  
  
Simple merge
Simple merge
Simple merge