]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#35,!517] Rework kea-dhcp6 parsing and server
authorThomas Markwalder <tmark@isc.org>
Fri, 4 Oct 2019 18:23:55 +0000 (14:23 -0400)
committerThomas Markwalder <tmark@isc.org>
Thu, 10 Oct 2019 12:34:39 +0000 (08:34 -0400)
src/bin/dhcp6/ctrl_dhcp6_srv.cc
    Removed setting D2ClientCfg fetch function

src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.yy
    ddns-send-updates
    ddns-override-no-update
    ddns-override-client-update
    ddns-replace-client-name
    ddns-generated-prefix
    ddns-qualifying-suffix
    - added to DHCP4,SHARED_NETWORK,SUBNET4

    hostname-char-set
    hostname-char-replacement
    - added to SHARED_NETWORK,SUBNET4

src/bin/dhcp6/dhcp6_srv.cc
    Dhcpv6Srv::processClientFqdn()
    Dhcpv6Srv::createNameChangeRequests()
    Dhcpv6Srv::updateReservedFqdn()
    - use cxt.getDdnsParams()

src/bin/dhcp6/json_config_parser.cc
    configureDhcp6Server()
    - use SrvConfig::moveDdnsParams() to move dhcp-ddns parameters
    - handle new "ddns-" globals

src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/fqdn_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc
    Updated tests

18 files changed:
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/fqdn_unittest.cc
src/bin/dhcp6/ctrl_dhcp6_srv.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/dhcp6_srv.cc
src/bin/dhcp6/dhcp6_srv.h
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/fqdn_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc
src/lib/dhcpsrv/alloc_engine.cc

index 087225a679611840e80cb9420d5da5cfe66c6c9e..e2d3011c78d9836c9c110a2306d62c0540214f2c 100644 (file)
@@ -796,6 +796,9 @@ public:
         EXPECT_TRUE(pool);
     }
 
+    /// @brief Tests if the current config has a given global parameter value
+    /// @param name name of the global parameter expected to exist
+    /// @param value expected value of the global parameter
     template <typename ValueType>
     void checkGlobal(const std::string name, ValueType value) {
         ConstElementPtr param;
@@ -4281,6 +4284,9 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigValid) {
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
 
+    // ddns-send-updates should be global default
+    checkGlobal("ddns-send-updates", true);
+
     // The following, deprecated dhcp-ddns parameters,
     // should all have global default values.
     checkGlobal("ddns-send-updates", true);
index 09ff3431af8116ead89eaf28dd49d06103d979be..047964ef4427ad10e03f7592dc5b4fd253b35915 100644 (file)
@@ -332,8 +332,8 @@ public:
         subnet_->setDdnsOverrideNoUpdate(mask & OVERRIDE_NO_UPDATE);
         subnet_->setDdnsOverrideClientUpdate(mask & OVERRIDE_CLIENT_UPDATE);
         subnet_->setDdnsReplaceClientNameMode((mask & REPLACE_CLIENT_NAME) ?
-                                    D2ClientConfig::RCM_WHEN_PRESENT
-                                   : D2ClientConfig::RCM_NEVER);
+                                              D2ClientConfig::RCM_WHEN_PRESENT
+                                              : D2ClientConfig::RCM_NEVER);
         subnet_->setDdnsGeneratedPrefix("myhost");
         subnet_->setDdnsQualifyingSuffix("example.com");
 
index f113106a2a26ac59a96128e9d3a73e2319f3ec2e..755619e1581801b0119dbc93c2e2aa7aa9d8c29b 100644 (file)
@@ -375,13 +375,6 @@ ControlledDhcpv6Srv::commandConfigSetHandler(const string&,
     isc::config::parseAnswer(rcode, result);
     if (rcode == CONTROL_RESULT_SUCCESS) {
         CfgMgr::instance().getStagingCfg()->applyLoggingCfg();
-
-        // Update the fetch globals callback.
-        auto cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
-        cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-            return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
-        });
-
         // Use new configuration.
         CfgMgr::instance().commit();
     } else {
index 761fb4c1841e39d3f9418be30fdd35bdfef2196a..647b45c6ec246f53a2673939c9358bb3fa31e433 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "dhcp6_lexer.cc"
+#line 2 "dhcp6_lexer.cc"
 
-#line 3 "dhcp6_lexer.cc"
+#line 4 "dhcp6_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 192
-#define YY_END_OF_BUFFER 193
+#define YY_NUM_RULES 198
+#define YY_END_OF_BUFFER 199
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,187 +700,199 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1631] =
+static const flex_int16_t yy_accept[1736] =
     {   0,
-      185,  185,    0,    0,    0,    0,    0,    0,    0,    0,
-      193,  191,   10,   11,  191,    1,  185,  182,  185,  185,
-      191,  184,  183,  191,  191,  191,  191,  191,  178,  179,
-      191,  191,  191,  180,  181,    5,    5,    5,  191,  191,
-      191,   10,   11,    0,    0,  174,    0,    0,    0,    0,
+      191,  191,    0,    0,    0,    0,    0,    0,    0,    0,
+      199,  197,   10,   11,  197,    1,  191,  188,  191,  191,
+      197,  190,  189,  197,  197,  197,  197,  197,  184,  185,
+      197,  197,  197,  186,  187,    5,    5,    5,  197,  197,
+      197,   10,   11,    0,    0,  180,    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,    1,  185,
-      185,    0,  184,  185,    3,    2,    6,    0,  185,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  191,
+      191,    0,  190,  191,    3,    2,    6,    0,  191,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      175,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  177,    0,    0,    0,
+      181,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  183,    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,    2,    0,    0,    0,    0,    0,    0,    0,    8,
-        0,    0,    0,    0,  152,    0,    0,  153,    0,    0,
+        0,    0,    2,    0,    0,    0,    0,    0,    0,    0,
+        8,    0,    0,    0,    0,  158,    0,    0,  159,    0,
 
-        0,    0,    0,    0,    0,    0,  176,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  182,    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,  103,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  109,    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,  190,
-
-      188,    0,  187,  186,    0,    0,    0,    0,    0,    0,
-        0,  151,    0,    0,   28,    0,   27,    0,    0,  110,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       55,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,  196,  194,    0,  193,  192,    0,    0,    0,    0,
+        0,    0,    0,  157,    0,    0,   28,    0,   27,    0,
+        0,  116,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   55,    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,  107,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  113,    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,  189,  186,    0,    0,
-        0,    0,    0,    0,    0,    0,   29,    0,    0,   31,
-        0,    0,    0,    0,    0,    0,  111,    0,    0,    0,
-        0,    0,    0,    0,   88,    0,    0,    0,    0,    0,
-        0,    0,  136,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   58,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  195,
+      192,    0,    0,    0,    0,    0,    0,    0,    0,   29,
+        0,    0,   31,    0,    0,    0,    0,    0,    0,  117,
+        0,    0,    0,    0,    0,    0,    0,   94,    0,    0,
+        0,    0,    0,    0,    0,    0,  142,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   58,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   87,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   93,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   97,    0,   59,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  103,    0,   59,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  131,  156,   51,    0,
-       56,    0,    0,    0,    0,    0,    0,  171,   37,    0,
-       34,    0,   33,    0,    0,    0,  144,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      122,    0,    0,    0,    0,    0,    0,    0,    0,  155,
+      137,  162,   51,    0,   56,    0,    0,    0,    0,    0,
+        0,  177,   37,    0,   34,    0,   33,    0,    0,    0,
+      150,    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,  128,
+        0,    0,    0,    0,    0,    0,    0,    0,  161,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       53,    0,    0,   32,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   90,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  145,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   53,
+        0,    0,   32,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   96,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  151,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  146,
+        0,    0,    0,    0,    0,    0,    0,    0,    7,   35,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      140,    0,    0,    0,    0,    0,    0,    0,    0,    7,
-       35,    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,  109,    0,    0,    0,    0,    0,    0,    0,
 
+        0,    0,    0,    0,    0,    0,  115,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  130,
+        0,    0,    0,    0,    0,    0,    0,    0,  127,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   98,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  124,    0,    0,    0,    0,
-        0,    0,    0,    0,  121,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   92,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  100,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  118,
-        0,    0,    0,    0,    0,   99,    0,    0,    0,    0,
+        0,    0,  106,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  124,    0,    0,    0,    0,    0,  105,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  139,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  149,  119,    0,    0,    0,    0,    0,
-        0,    0,  123,   52,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  125,    0,   60,    0,    0,
+        0,    0,    0,    0,    0,    0,  145,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  155,  125,    0,    0,    0,    0,    0,    0,
+        0,  129,   52,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  131,    0,   60,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   83,    0,    0,
-        0,    0,    0,    0,    0,    0,  172,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  106,    0,    0,
+        0,    0,    0,    0,    0,    0,   89,    0,    0,    0,
+        0,    0,    0,    0,    0,  178,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,  138,    0,
-        0,    0,    0,    0,    0,   63,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   57,   91,    0,
-        0,    0,  135,    0,    0,    0,   50,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  127,    0,    0,    0,    0,
+        0,  112,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  144,    0,    0,    0,    0,    0,    0,   63,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  170,    0,    0,    0,    0,    0,
+        0,   57,   97,    0,    0,    0,  141,    0,    0,    0,
+       50,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  133,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  101,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  176,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   41,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   16,    0,    0,  150,   14,    0,
+      107,    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,  141,    0,  126,    0,    0,    0,
+        0,   41,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   16,    0,    0,  156,   14,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  137,  154,    0,   40,    0,  146,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   20,    0,    0,    0,   85,    0,    0,    0,
-        0,  148,   54,    0,   93,    0,    0,    0,    0,    0,
+        0,    0,    0,  147,    0,    0,    0,    0,    0,    0,
+      132,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  143,  160,    0,
+       40,    0,  152,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   20,    0,    0,    0,
+       91,    0,    0,    0,    0,  154,   54,    0,   99,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   82,    0,    0,    0,  116,  117,    0,    0,    0,
-        0,    0,    0,    0,    0,   89,    0,    0,    0,    0,
-        0,    0,   64,    0,    0,    0,    0,    0,    0,    0,
-        0,  143,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   86,
-      108,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   79,    0,    0,    0,    0,    0,    0,   17,
-        0,   15,    0,  168,  167,    0,   69,    0,    0,    0,
-        0,    0,   30,    0,  130,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  165,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,    0,
-      134,   43,    0,   61,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   19,    0,    0,    0,    0,    0,    0,
-      104,   80,    0,    0,  142,    0,    0,    0,    0,    0,
-
-      133,    0,    0,    0,    0,    0,   98,    0,  173,    0,
+        0,    0,    0,    0,    0,   82,    0,    0,    0,  122,
+      123,    0,    0,    0,    0,    0,    0,    0,    0,   95,
+
+        0,    0,    0,    0,    0,    0,   64,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       96,    0,    0,  157,    0,    0,    0,    0,    0,    0,
+      149,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  118,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   92,  114,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   79,    0,    0,    0,    0,    0,    0,   17,    0,
+       15,    0,  174,  173,    0,   69,    0,    0,    0,    0,
+        0,   30,    0,  136,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   42,    0,    0,
-       68,    0,    0,    0,    0,  128,   47,    0,    0,    0,
-       70,  166,   38,    0,    0,   12,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   45,    0,    0,   44,    0,
-       18,    0,    0,    0,   72,    0,    0,    0,    0,  120,
 
+      171,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  108,    0,  140,   43,    0,   61,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   19,    0,    0,
+        0,    0,    0,    0,  110,   80,    0,    0,  148,    0,
+        0,    0,    0,    0,  139,    0,    0,    0,    0,    0,
+      104,    0,  179,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  102,
+        0,    0,  163,    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,   76,    0,    0,    0,    0,   62,
-        0,    0,   94,    0,    0,    0,    0,    0,  147,    0,
-        0,    0,   46,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,   42,    0,    0,   68,
+        0,    0,    0,    0,  134,   47,    0,    0,    0,   70,
+      172,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+       12,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       45,    0,    0,   44,    0,   18,    0,    0,    0,   72,
+        0,    0,    0,    0,  126,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   76,
+        0,    0,    0,    0,   62,    0,    0,    0,    0,    0,
+        0,    0,    0,  100,    0,    0,    0,    0,    0,  153,
+        0,    0,    0,   46,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       67,    0,    0,    0,   84,    0,   36,    0,   48,    0,
-        0,    0,    0,    0,    0,   24,    0,    0,    0,    0,
-        0,    0,    0,  163,    0,    0,    0,    0,  132,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  105,    0,
+        0,   67,    0,    0,    0,   90,    0,   36,    0,   48,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   24,    0,    0,    0,    0,    0,    0,    0,
+      169,    0,    0,    0,    0,  138,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  111,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   83,    0,    0,    0,    0,
+        0,    0,    0,    0,   25,   39,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   13,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,   25,   39,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   13,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  169,    0,    0,    0,    0,    0,    0,
-        0,  162,    0,   78,    0,   77,    0,   21,   73,    0,
-        0,    0,    0,    0,   65,    0,  115,    0,    0,   95,
-        0,    0,  161,    0,    0,    0,   71,    0,    0,    0,
-       66,    0,   23,    0,    0,    0,    0,    0,    0,    0,
+        0,  175,    0,    0,    0,    0,    0,    0,    0,  168,
+        0,   78,    0,   77,    0,   21,   73,    0,    0,    0,
+        0,    0,   65,    0,  121,    0,    0,    0,    0,    0,
+        0,    0,  101,    0,    0,  167,    0,    0,    0,   71,
+        0,    0,    0,   66,    0,   23,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   87,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   49,    0,    0,    0,    0,    0,   75,   74,   22,
+        0,    0,    0,    0,   49,    0,    0,   88,    0,    0,
+        0,    0,    0,    0,   75,   74,   22,    0,  119,  135,
 
-        0,  113,  129,    0,    0,    0,    0,    0,    0,  159,
-      164,   81,    0,    0,    0,    0,  158,    0,    0,   26,
-        0,    0,    0,    0,    0,  114,    0,    0,  160,    0
+        0,    0,   84,    0,    0,    0,    0,    0,    0,  165,
+      170,    0,   86,   81,    0,    0,    0,    0,    0,  164,
+        0,    0,   26,    0,    0,    0,   85,    0,    0,    0,
+      120,    0,    0,  166,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -927,394 +939,416 @@ static const YY_CHAR yy_meta[74] =
         3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[1643] =
+static const flex_int16_t yy_base[1748] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     2032, 2033,   34, 2028,  145,    0,  207, 2033,  214,  221,
-       13,  228, 2033, 2008,  118,   25,    2,    6, 2033, 2033,
-       73,   11,   17, 2033, 2033, 2033,  104, 2016, 1969,    0,
-     2006,  108, 2023,   24,  256, 2033,   67, 1965, 1971, 1991,
+     2137, 2138,   34, 2133,  145,    0,  207, 2138,  214,  221,
+       13,  228, 2138, 2113,  118,   25,    2,    6, 2138, 2138,
+       73,   11,   17, 2138, 2138, 2138,  104, 2121, 2074,    0,
+     2111,  108, 2128,   24,  256, 2138,   67, 2070, 2076, 2096,
        84,   75,  189,   88,  226,   91,   89,  284,  196,  206,
-      219,  191,  210,  197,   60,  242, 1972,  278,  287,  298,
-      294,  313, 1955,  212,  318,  350,  328, 1974,    0,  379,
-      400,  417,  424,  429, 2033,    0, 2033,  393,  407,  269,
-      299,  301,  406,  418,  304, 2033, 1971, 2012, 2033,  293,
-
-     2033,  442,  312, 1958, 1968, 2009,  421,   10,  345, 1962,
-      319,  338,  336,  369,  248, 2007,    0,  495,  413, 1949,
-     1954, 1956,  332, 1952, 1941, 1942,  410, 1958, 1941, 1950,
-      418,  340,  226, 1944, 1942,  405, 1931, 1989,  448, 1934,
-     1987, 1927, 1950, 1947, 1947, 1941,  411, 1934, 1932, 1926,
-     1931, 1925,  421, 1936, 1929, 1920, 1919, 1933,  408, 1971,
-     1918,  427, 1930, 1933, 1917,  491, 1918,  433, 1930, 1927,
-     1928, 1926, 1961, 1960,  434, 1906, 1911, 1907, 1899, 1916,
-     1908,    0,  440,  446,  434,  450,  468,  467, 1907, 2033,
-        0,  483, 1898, 1901, 2033,  490,  465, 2033, 1955, 1908,
-
-      501, 1953,  506, 1952,  498, 1951, 2033,  544, 1950,  517,
-     1909, 1906, 1903, 1902, 1893,  514, 1944, 1938, 1902, 1881,
-     1889, 1895, 1883, 1897, 1893, 1894, 1894, 1889, 1881, 1883,
-     1867, 1871, 1884, 1886, 1883, 1875, 1865, 1868, 1882, 2033,
-     1868, 1876, 1879, 1860, 1859, 1911, 1858, 1868, 1908,  516,
-     1867, 1906, 1854, 1865, 1903,  537, 1907, 1842, 1857,  358,
-     1847, 1863, 1844, 1842, 1845, 1841, 1847, 1838, 1837, 1850,
-     1843, 1845, 1849, 1848, 1842,  220, 1849, 1844, 1836, 1826,
-     1841, 1836, 1840,  480, 1838, 1824, 1830, 1837, 1825, 1822,
-     1821,  525, 1816, 1830, 1829, 1832, 1814, 1822,  539, 2033,
-
-     2033,  547, 2033, 2033, 1809,    0,  534, 1811,  559,  555,
-     1867, 2033, 1818,  546, 2033, 1865, 2033, 1859,  596, 2033,
-      545, 1799, 1802, 1808, 1860, 1815, 1810, 1813, 1808,   80,
-     2033, 1810,  590, 1808, 1805, 1806,  323, 1810, 1850, 1798,
-     1793, 1790, 1786, 1788, 1839, 1796, 1785, 1801, 1835, 1781,
-      592, 1794, 1794, 1777, 1778, 1791, 1778, 1788, 1783, 1790,
-     1785, 1770,  564, 1779, 1782, 1777,  322, 1773, 1823,  555,
-      565, 2033, 1817, 1767, 1766, 1759, 1761, 1765, 1754, 1771,
-     1760, 1765,  543, 1812, 1765,  534, 1762, 1766, 1764, 1753,
-     1753, 1765,  570, 1740, 1741, 1762,  580, 1744, 1741, 1755,
-
-     1758, 1753, 1739, 1751, 1750, 1749, 1748, 1747, 1746,  476,
-     1789, 1788, 1787, 1729,  626, 1742, 2033, 2033, 1741,    0,
-      572, 1729, 1782, 1781, 1737, 1779, 2033, 1725, 1777, 2033,
-      606,  654,  599, 1776, 1724, 1715, 2033, 1720, 1726, 1729,
-     1712, 1727, 1714, 1713, 2033, 1723, 1714, 1711, 1723,  590,
-     1708, 1710, 2033, 1716, 1701, 1703, 1714, 1712, 1707,  642,
-     1714, 1702, 1695, 1746, 2033, 1693, 1709, 1743, 1747, 1703,
-     1697, 1699, 1700, 1702, 1736, 1687, 1682, 1681, 1683, 1679,
-     1675,  599, 1694, 1668, 1675, 1680, 1673, 1689, 1728, 2033,
-     1673, 1669, 1725, 1676, 1670, 1677, 1662, 1672, 1675, 1664,
-
-     1660, 1662, 1657, 2033, 1714, 2033, 1656, 1655, 1648, 1665,
-     1704, 1649, 1654, 1663, 1657, 1651, 1660,  644, 1697, 1659,
-     1642, 1642, 1637, 1633, 1639, 1644, 1637, 1645, 1649, 1632,
-     1690, 1630, 1631, 1630, 1642, 1631, 2033, 2033, 2033, 1631,
-     2033, 1641, 1677, 1637,    0, 1680, 1628, 2033, 2033, 1625,
-     2033, 1631, 2033,  624,  623,  655, 2033, 1636, 1670, 1615,
-     1668, 1613, 1612, 1611, 1618, 1611, 1619, 1622, 1621, 1605,
-     1620, 1602, 1649, 1616, 1654, 1598, 1600, 1612, 1612, 1611,
-     2033, 1596, 1593, 1651, 1606, 1598, 1604, 1595, 1603, 2033,
-     1588, 1599, 1603, 1585, 1599,  467, 1581, 1575, 1580, 1577,
-
-     1592, 1591, 1592, 1571, 1581, 1587, 1630, 1585, 1584, 1576,
-     2033, 1569, 1571, 2033, 1579, 1618, 1617,   16, 1578, 1561,
-     1562, 1565, 1566, 1557, 2033, 1571, 1557,  677, 1549, 1570,
-     1567, 1559, 1604, 1556, 1563, 1601, 2033, 1547, 1545, 1559,
-     1543, 1557, 1560, 1594, 1593, 1592, 1591, 1536, 1589, 1588,
-     2033,  656, 1550, 1549, 1546, 1546, 1544, 1533, 1535, 2033,
-     2033, 1580, 1526, 1583,  627,  591, 1524, 1522, 1538, 1579,
-      642, 1573, 1533, 1571, 1570, 1522, 1516, 1511, 1566, 1526,
-     1516, 1524, 1562, 1523, 1505, 1513, 1515, 1519, 1556, 1560,
-     1515, 1514, 2033, 1515, 1508, 1497, 1510, 1513, 1508, 1503,
-
-     1508, 1505, 1504, 1500, 1506, 1501, 1544, 1543, 1485, 1496,
-     1480,  542, 1534, 1490, 1537, 2033, 1536, 1490, 1486, 1481,
-     1473, 1526, 1487, 1474, 2033, 1474,   91,  245,  356,  476,
-      553,  648,  596,  623, 2033,  618,  612,  631,  627,  641,
-      624,  630,  685,  649,  633,  633,  652,  696,  697,  698,
-      645,  663,  658,  665,  660,  645,  657,  658, 2033,  712,
-      670,  672,  663,  676,  679,  670,  676,  685,  726, 2033,
-      722,  698,  685,  686,  680, 2033,  678,  693,  690,  676,
-      683,  682,  680,  699,  696,  697,  687,  700,  686,  685,
-      691,  747,  693,  709,  692,  746,  701, 2033,  711,  711,
-
-      704,  716,  714,  759,  701,  703,  718,  719,  707,  766,
-      723,  709,  712, 2033, 2033,  728,  727,  728,  733,  721,
-      731,  733, 2033, 2033,  733,  735,  739,  726,  724,  742,
-      729,  729,  780,  730,  788, 2033,  789, 2033,  734,  748,
-      748,  793,  741,  743,  737,  797,  750,  740,  741,  737,
-      747,  751,  762,  746,  764,  759,  761,  754,  756,  757,
-      769,  759,  774,  815,  772,  777,  754, 2033,  766,  767,
-      781,  771,  818,  766,  781,  781, 2033,  800,  808,  777,
-      826,  792,  780,  775,  776,  788,  795,  784,  785,  781,
-      799,  791,  786,  839,  845,  802,  793, 2033,  805,  790,
-
-      806,  796,  809,  803,  851,  817,  801,  802, 2033,  818,
-      821,  804,  806,  864,  807, 2033,  824,  827,  807,  826,
-      814,  867,  825,  821,  818,  871,  820,  873,  820,  838,
-      837,  823,  838,  830,  826,  844,  829, 2033, 2033,  837,
-      884,  837, 2033,  845,  840,  893, 2033,  842,  847,  891,
-      843,  844,  856,  850,  854,  852,  850,  861,  906,  850,
-      855,  909,  910,  854,  866, 2033,  854,  862,  860,  857,
-      858,  867,  879,  863,  877,  879,  880,  896,  901,  883,
-      869,  871,  871,  891,  890,  881,  870,  887,  894,  937,
-      879,  939,  886,  890, 2033,  937,  886,  904,  901,  941,
-
-      890,  908,  909,  895,  903,  912,  894,  909,  916,  958,
-      959, 2033,  912,  961,  962,  913,  923,  925,  909,  911,
-      911,  918,  927,  915,  922,  917,  924,  976,  923,  922,
-      939,  980,  930,  934,  932,  930,  985,  986,  936,  988,
-      984,  942, 2033,  947,  940,  931,  950,  944,  939,  949,
-      946,  951,  947,  959, 2033,  943,  945, 2033, 2033,  945,
-     1005,  945,  964,  965, 1010, 1011,  964,  949,  970,  952,
-      957,  964,  997,  988, 1020,  977,  964,  966,  983,  978,
-      982, 1027,  975,  979, 2033,  976, 2033,  990,  988,  991,
-      975,  976, 1036,  989,  994,  981,  992,  985,  991,  987,
-
-     1005, 1006, 1008, 2033, 2033, 1006, 2033, 1008, 2033,  993,
-      994, 1013, 1003, 1055, 1012, 1009, 1053, 1017, 1006, 1013,
-     1018, 1015, 2033, 1013, 1005, 1066, 2033, 1067, 1014, 1021,
-     1065, 2033, 2033, 1023, 2033, 1014, 1014, 1017, 1031, 1036,
-     1019, 1030, 1079, 1036, 1037, 1038, 1078, 1034, 1085, 1038,
-     1087, 2033, 1034, 1089, 1090, 2033, 2033, 1030, 1092, 1051,
-     1035, 1047, 1037, 1067, 1098, 2033, 1055, 1100, 1047, 1062,
-     1098, 1050, 2033, 1046, 1062, 1050, 1068, 1056, 1056, 1111,
-     1068, 2033, 1070, 1069, 1071, 1064, 1073, 1074, 1071, 1061,
-     1064, 1064, 1123, 1070, 1126, 1127, 1070, 1129, 2033, 1087,
-
-     1066, 1081, 1074, 1077, 1090, 1094, 1093, 1139, 1093, 2033,
-     2033, 1089, 1099, 1085, 1101, 1087, 1148, 1149, 1093, 1103,
-     1152, 1109, 2033, 1101, 1101, 1103, 1105, 1158, 1101, 2033,
-     1102, 2033, 1104, 2033, 2033, 1118, 2033, 1112, 1164, 1113,
-     1166, 1146, 2033, 1163, 2033, 1111, 1119, 1113, 1110, 1113,
-     1116, 1116, 1112, 1118, 1178, 1126, 2033, 1122, 1181, 1134,
-     1125, 1140, 1140, 1143, 1143, 1140, 1184, 1147, 2033, 1139,
-     2033, 2033, 1149, 2033, 1189, 1151, 1152, 1149, 1193, 1141,
-     1156, 1196, 1158, 2033, 1146, 1146, 1152, 1151, 1163, 1163,
-     2033, 2033, 1204, 1151, 2033, 1168, 1153, 1153, 1155, 1161,
-
-     2033, 1216, 1158, 1168, 1219, 1180, 2033, 1177, 2033, 1196,
-     1164, 1224, 1225, 1182, 1187, 1169, 1229, 1230, 1231, 1184,
-     2033, 1174, 1234, 2033, 1172, 1231, 1194, 1190, 1234, 1182,
-     1187, 1185, 1244, 1200, 1246, 1196, 1248, 1210, 1199, 1193,
-     1253, 1195, 1204, 1197, 1213, 1258, 1200, 1217, 1202, 1217,
-     1201, 1259, 1260, 1261, 1208, 1263, 1226, 2033, 1226, 1213,
-     2033, 1224, 1273, 1244, 1226, 2033, 2033, 1218, 1229, 1278,
-     2033, 2033, 2033, 1225, 1223, 2033, 1281, 1227, 1278, 1221,
-     1226, 1287, 1235, 1245, 1246, 2033, 1291, 1244, 2033, 1245,
-     2033, 1236, 1251, 1239, 2033, 1249, 1250, 1251, 1257, 2033,
-
-     1296, 1264, 1257, 1258, 1267, 1249, 1255, 1257, 1311, 1270,
-     1269, 1261, 1315, 1264, 2033, 1317, 1266, 1319, 1261, 2033,
-     1268, 1268, 2033, 1272, 1267, 1266, 1326, 1279, 2033, 1323,
-     1274, 1271, 2033, 1285, 1287, 1289, 1334, 1287, 1284, 1292,
-     1286, 1339, 1280, 1282, 1290, 1280, 1296, 1297, 1291, 1307,
-     2033, 1297, 1349, 1308, 2033, 1346, 2033, 1308, 2033, 1348,
-     1349, 1304, 1312, 1303, 1310, 2033, 1307, 1312, 1310, 1362,
-     1363, 1320, 1307, 2033, 1322, 1323, 1324, 1325, 2033, 1315,
-     1327, 1328, 1373, 1315, 1323, 1317, 1325, 1338, 2033, 1315,
-     1338, 1323, 1323, 1328, 1384, 1332, 1344, 1335, 1344, 1346,
-
-     1350, 2033, 2033, 1332, 1392, 1335, 1394, 1336, 1396, 1354,
-     1398, 1399, 2033, 1395, 1357, 1354, 1359, 1346, 1405, 1342,
-     1407, 1360, 1365, 2033, 1410, 1367, 1368, 1413, 1370, 1373,
-     1368, 2033, 1417, 2033, 1370, 2033, 1379, 2033, 2033, 1361,
-     1421, 1368, 1423, 1366, 2033, 1383, 2033, 1374, 1370, 2033,
-     1370, 1372, 2033, 1377, 1387, 1380, 2033, 1381, 1375, 1387,
-     2033, 1383, 2033, 1393, 1387, 1395, 1392, 1383, 1437, 1384,
-     1392, 1401, 1402, 1403, 1396, 1391, 1392, 1407, 1452, 1399,
-     1406, 1393, 1408, 1413, 1458, 1459, 1460, 1417, 1462, 1463,
-     1406, 2033, 1422, 1413, 1427, 1423, 1416, 2033, 2033, 2033,
-
-     1470, 2033, 2033, 1471, 1472, 1427, 1426, 1427, 1417, 2033,
-     2033, 2033, 1477, 1419, 1435, 1480, 2033, 1476, 1425, 2033,
-     1424, 1426, 1437, 1486, 1435, 2033, 1444, 1489, 2033, 2033,
-     1495, 1500, 1505, 1510, 1515, 1520, 1525, 1528, 1502, 1507,
-     1509, 1522
+      279,  191,  210,  197,   60,  216, 2077,  241,  284,  309,
+      297,  316, 2060,  212,  321,  345,  326, 2079,    0,  386,
+      402,  416,  423,  428, 2138,    0, 2138,  442,  447,  241,
+      242,  302,  269,  315,  303, 2138, 2076, 2117, 2138,  345,
+
+     2138,  441,  337, 2063, 2073, 2114,  352,   10,  336, 2067,
+      339,  242,  346,  360,  399, 2112,    0,  494,  411, 2054,
+     2059, 2061,  417, 2057, 2046, 2047, 2052,  350, 2062, 2045,
+     2054,  421,  362,  219, 2048, 2046,  332, 2035, 2093,  422,
+     2038, 2091, 2031, 2054, 2051, 2051, 2045,  405, 2038, 2036,
+     2030, 2035, 2029,  431, 2040, 2033, 2024, 2023, 2037,  417,
+     2075, 2022,  427, 2034, 2037, 2021,  490, 2022,  426, 2034,
+     2031, 2032, 2030, 2065, 2064,  462, 2010, 2015, 2011, 2003,
+     2020, 2012,    0,  435,  391,  475,  441,  472,  489, 2011,
+     2138,    0,  504, 2002, 2005, 2138,  492,  465, 2138, 2059,
+
+     2012,  503, 2057,  505, 2056,  499, 2055, 2138,  545, 2054,
+      511, 2013, 2010, 2007, 2006, 1997,  515, 2048, 2042, 2006,
+     1987, 1984, 1992, 1998, 1986, 2000, 1996, 1997, 1997, 1992,
+     1984, 1986, 1970, 1974, 1987, 1989, 1986, 1978, 1968, 1971,
+     1985, 2138, 1971, 1979, 1982, 1963, 1962, 2014, 1961, 1971,
+     2011,  522, 1970, 2009, 1957, 1968, 2006,  537, 2010, 1945,
+     1960,  504, 1950, 1966, 1947, 1945, 1948, 1944, 1950, 1941,
+     1940, 1953, 1946, 1948, 1952, 1951, 1945,  518, 1952, 1947,
+     1939, 1929, 1944, 1939, 1943,  357, 1941, 1927, 1933, 1940,
+     1928, 1925, 1924,  333, 1919, 1933, 1932, 1935, 1917, 1925,
+
+      540, 2138, 2138,  549, 2138, 2138, 1912,    0,  507, 1914,
+      580,  554, 1970, 2138, 1921,  547, 2138, 1968, 2138, 1962,
+      597, 2138,  547, 1902, 1905, 1911, 1963, 1918, 1913, 1916,
+     1911,   80, 2138, 1913,  380, 1952, 1910, 1907, 1908,  590,
+     1912, 1952, 1900, 1895, 1892, 1888, 1890, 1941, 1898, 1887,
+     1903, 1937, 1883,  594, 1896, 1896, 1879, 1880, 1893, 1880,
+     1890, 1885, 1892, 1887, 1872,  565, 1881, 1884, 1879,  541,
+     1875, 1925,  558,  568, 2138, 1919, 1869, 1868, 1861, 1863,
+     1867, 1856, 1873, 1862, 1867,  520, 1914, 1867,  579, 1864,
+     1868, 1866, 1855, 1855, 1867,  571, 1842, 1843, 1864,  585,
+
+     1846, 1843, 1857, 1860, 1855, 1841, 1853, 1852, 1851, 1850,
+     1849, 1848,  581, 1891, 1890, 1889, 1831,  630, 1844, 2138,
+     2138, 1843,    0,  602, 1831, 1884, 1883, 1839, 1881, 2138,
+     1827, 1879, 2138,  617,  665,  606, 1878, 1826, 1817, 2138,
+     1822, 1828, 1831, 1814, 1829, 1816, 1815, 2138, 1825,  600,
+     1816, 1813, 1825,  605, 1810, 1812, 2138, 1818, 1803, 1805,
+     1816, 1814, 1809,  644, 1816, 1804, 1797, 1848, 2138, 1795,
+     1811, 1845, 1849, 1805, 1799, 1801, 1802, 1804, 1838, 1789,
+     1784, 1783, 1785, 1781, 1777,  609, 1796, 1770, 1777, 1782,
+     1775, 1791, 1830, 2138, 1775, 1771, 1827, 1778, 1772, 1779,
+
+     1764, 1774, 1777, 1766, 1762, 1764, 1759, 2138, 1816, 2138,
+     1758, 1757, 1750, 1767, 1806, 1751, 1756, 1765, 1759, 1753,
+     1762,  650, 1799, 1761, 1744, 1744, 1739, 1735, 1741, 1746,
+     1739, 1747, 1751, 1734, 1792, 1732, 1733, 1732, 1744, 1733,
+     2138, 2138, 2138, 1733, 2138, 1743, 1779, 1739,    0, 1782,
+     1730, 2138, 2138, 1727, 2138, 1733, 2138,  624,  633,  666,
+     2138, 1738, 1772, 1717, 1770, 1715, 1714, 1713, 1720, 1713,
+     1721, 1724, 1706, 1706, 1721, 1720, 1719, 1718, 1702, 1717,
+     1699, 1746, 1713, 1751, 1695, 1697, 1709, 1709, 1708, 2138,
+     1693, 1690, 1748, 1703, 1695, 1701, 1692, 1700, 2138, 1685,
+
+     1696, 1700, 1682, 1696,  446, 1678, 1672, 1677, 1674, 1689,
+     1688, 1689, 1668, 1678, 1684, 1727, 1682, 1681, 1673, 2138,
+     1666, 1668, 2138, 1676, 1715, 1714,   16, 1675, 1658, 1659,
+     1662, 1663, 1654, 2138, 1668, 1654,  688, 1646, 1667, 1664,
+     1656, 1701, 1653, 1660, 1698, 2138, 1644, 1642, 1656, 1640,
+     1654, 1657, 1691, 1690, 1689, 1688, 1633, 1686, 1685, 2138,
+      667, 1647, 1646, 1643, 1643, 1641, 1630, 1632, 2138, 2138,
+     1677, 1623, 1680,  637,  648, 1621, 1619, 1635, 1676,  652,
+     1670, 1630, 1668, 1667, 1619, 1613, 1616, 1624, 1627, 1611,
+     1612, 1603, 1658, 1618, 1608, 1616, 1654, 1615, 1597, 1605,
+
+     1607, 1611, 1648, 1652, 1607, 1606, 2138, 1607, 1600, 1589,
+     1602, 1605, 1600, 1595, 1600, 1597, 1596, 1592, 1598, 1593,
+     1636, 1635, 1577, 1588,   75,  647,  269,  283,  347, 2138,
+      477,  462,  460,  477,  481,  572,  536,  555, 2138,  558,
+      615,  621,  637,  681,  631,  691,  641,  656, 2138,  651,
+      645,  656,  657,  670,  649,  655,  710,  674,  658,  658,
+      671,  715,  716,  717,  664,  682,  678,  683,  679,  664,
+      676,  677, 2138,  731,  691,  693,  684,  696,  698,  689,
+      695,  704,  745, 2138,  741,  717,  704,  705,  699, 2138,
+      697,  712,  709,  695,  702,  701,  699,  718,  715,  716,
+
+      704,  711,  712,  721,  721,  711,  724,  710,  709,  715,
+      771,  717,  733,  716,  771,  726, 2138,  736,  736,  729,
+      740,  738,  783,  725,  727,  742,  743,  731,  790,  747,
+      733,  736, 2138, 2138,  752,  751,  752,  757,  745,  755,
+      757, 2138, 2138,  757,  759,  763,  750,  748,  766,  753,
+      753,  804,  754,  812, 2138,  813, 2138,  758,  772,  772,
+      817,  765,  767,  761,  821,  774,  764,  765,  761,  771,
+      775,  786,  770,  788,  783,  785,  778,  780,  781,  793,
+      783,  798,  839,  796,  801,  778, 2138,  790,  791,  805,
+      795,  842,  790,  805,  805, 2138,  824,  832,  801,  850,
+
+      816,  804,  799,  800,  812,  819,  808,  809,  805,  823,
+      809,  810,  820,  829,  865,  820,  815,  868,  874,  831,
+      823, 2138,  835,  821,  837,  827,  839,  833,  880,  846,
+      830,  831, 2138,  847,  850,  833,  835,  893,  836, 2138,
+      853,  856,  836,  855,  843,  896,  854,  850,  847,  900,
+      849,  902,  849,  867,  866,  852,  867,  859,  855,  873,
+      858, 2138, 2138,  866,  913,  866, 2138,  874,  869,  922,
+     2138,  871,  876,  920,  872,  873,  885,  879,  883,  881,
+      879,  890,  935,  879,  884,  938,  939,  883,  895, 2138,
+      883,  891,  889,  886,  887,  896,  908,  892,  906,  908,
+
+      909,  925,  930,  912,  898,  900,  900,  920,  919,  910,
+      899,  916,  923,  966,  908,  928,  921,  925,  929,  912,
+      973,  920,  924, 2138,  971,  920,  938,  935,  975,  924,
+      944,  945,  931,  939,  948,  928,  943,  950,  992,  993,
+     2138,  946,  995,  996,  947,  957,  959,  943,  945,  945,
+      952,  961,  949,  956,  951,  958, 1010,  957,  956,  973,
+     1014,  964,  968,  966,  964, 1019, 1020,  970, 1022, 1018,
+      976, 2138,  981,  974,  965,  984,  978,  973,  983,  980,
+      985,  981,  993, 2138,  977,  979, 2138, 2138,  979, 1039,
+      979,  998,  999, 1044, 1045,  998,  983, 1004,  986,  991,
+
+      998, 1031, 1022, 1054, 1011,  998, 1000, 1017, 1012, 1016,
+     1061, 1009, 1013, 2138, 1010, 1006, 1023, 1003, 1024, 1014,
+     2138, 1029, 1027, 1030, 1014, 1015, 1076, 1029, 1034, 1021,
+     1032, 1025, 1031, 1027, 1045, 1046, 1047, 2138, 2138, 1045,
+     2138, 1047, 2138, 1032, 1033, 1052, 1042, 1094, 1051, 1048,
+     1092, 1056, 1045, 1052, 1057, 1054, 2138, 1052, 1044, 1105,
+     2138, 1106, 1053, 1060, 1104, 2138, 2138, 1062, 2138, 1053,
+     1053, 1056, 1070, 1075, 1058, 1069, 1118, 1075, 1076, 1077,
+     1117, 1073, 1124, 1077, 1126, 2138, 1073, 1128, 1129, 2138,
+     2138, 1069, 1131, 1090, 1074, 1086, 1076, 1106, 1137, 2138,
+
+     1094, 1139, 1086, 1101, 1137, 1089, 2138, 1085, 1101, 1089,
+     1103, 1104, 1101, 1145, 1108, 1112, 1100, 1100, 1155, 1112,
+     2138, 1114, 1113, 1115, 1108, 1117, 1118, 1115, 1106, 1109,
+     1109, 1168, 1115, 1170, 1171, 1114, 1173, 2138, 1131, 1111,
+     1126, 1119, 1122, 1135, 1138, 1137, 1184, 1138, 2138, 2138,
+     1134, 1144, 1129, 1145, 1131, 1192, 1193, 1137, 1147, 1196,
+     1153, 2138, 1145, 1145, 1147, 1149, 1202, 1145, 2138, 1146,
+     2138, 1148, 2138, 2138, 1162, 2138, 1156, 1208, 1157, 1210,
+     1190, 2138, 1207, 2138, 1155, 1163, 1157, 1154, 1157, 1160,
+     1160, 1156, 1178, 1217, 1170, 1182, 1185, 1167, 1227, 1175,
+
+     2138, 1171, 1230, 1183, 1174, 1189, 1190, 1193, 1193, 1190,
+     1234, 1196, 2138, 1188, 2138, 2138, 1198, 2138, 1238, 1200,
+     1201, 1198, 1242, 1190, 1205, 1245, 1207, 2138, 1195, 1195,
+     1201, 1200, 1212, 1212, 2138, 2138, 1253, 1200, 2138, 1217,
+     1202, 1202, 1204, 1210, 2138, 1265, 1207, 1217, 1268, 1229,
+     2138, 1226, 2138, 1245, 1213, 1273, 1274, 1231, 1236, 1218,
+     1278, 1279, 1280, 1276, 1240, 1237, 1233, 1226, 1238, 2138,
+     1228, 1288, 2138, 1226, 1285, 1248, 1244, 1289, 1237, 1242,
+     1242, 1297, 1256, 1302, 1252, 1304, 1265, 1254, 1248, 1308,
+     1250, 1259, 1252, 1268, 1313, 1255, 1272, 1257, 1272, 1256,
+
+     1314, 1315, 1316, 1263, 1318, 1281, 2138, 1281, 1268, 2138,
+     1279, 1328, 1298, 1282, 2138, 2138, 1273, 1284, 1333, 2138,
+     2138, 2138, 1279, 1284, 1282, 1332, 1290, 1295, 1286, 1284,
+     2138, 1342, 1288, 1339, 1282, 1287, 1348, 1296, 1306, 1307,
+     2138, 1352, 1305, 2138, 1306, 2138, 1298, 1314, 1302, 2138,
+     1312, 1313, 1314, 1320, 2138, 1359, 1325, 1318, 1319, 1328,
+     1310, 1316, 1318, 1372, 1331, 1330, 1322, 1376, 1325, 2138,
+     1378, 1327, 1380, 1322, 2138, 1325, 1335, 1379, 1327, 1342,
+     1329, 1335, 1335, 2138, 1339, 1334, 1333, 1393, 1346, 2138,
+     1390, 1341, 1338, 2138, 1352, 1354, 1356, 1401, 1354, 1351,
+
+     1359, 1353, 1406, 1347, 1349, 1357, 1347, 1363, 1364, 1358,
+     1374, 2138, 1364, 1416, 1375, 2138, 1413, 2138, 1375, 2138,
+     1415, 1377, 1378, 1363, 1364, 1372, 1426, 1422, 1377, 1385,
+     1376, 1383, 2138, 1380, 1385, 1383, 1435, 1436, 1393, 1380,
+     2138, 1395, 1396, 1397, 1398, 2138, 1388, 1400, 1401, 1446,
+     1388, 1396, 1390, 1398, 1411, 2138, 1388, 1411, 1396, 1396,
+     1411, 1404, 1403, 1414, 1401, 2138, 1406, 1462, 1410, 1422,
+     1413, 1422, 1424, 1428, 2138, 2138, 1410, 1470, 1413, 1472,
+     1414, 1474, 1432, 1476, 1477, 2138, 1473, 1435, 1432, 1437,
+     1424, 1483, 1420, 1485, 1438, 1439, 1429, 1446, 1445, 1486,
+
+     1448, 2138, 1493, 1450, 1451, 1496, 1453, 1456, 1451, 2138,
+     1500, 2138, 1453, 2138, 1462, 2138, 2138, 1444, 1504, 1451,
+     1506, 1449, 2138, 1466, 2138, 1457, 1447, 1506, 1472, 1465,
+     1461, 1458, 2138, 1458, 1460, 2138, 1465, 1475, 1468, 2138,
+     1469, 1463, 1475, 2138, 1471, 2138, 1481, 1475, 1483, 1528,
+     1469, 1471, 1468, 1492, 1485, 1476, 1530, 1477, 1485, 1494,
+     1495, 1496, 1489, 1484, 1485, 1500, 1545, 2138, 1491, 1503,
+     1548, 1497, 1496, 1503, 1490, 1505, 1510, 1555, 1556, 1557,
+     1514, 1559, 1560, 1503, 2138, 1519, 1563, 2138, 1520, 1522,
+     1513, 1527, 1523, 1516, 2138, 2138, 2138, 1570, 2138, 2138,
+
+     1571, 1532, 2138, 1573, 1574, 1529, 1528, 1529, 1519, 2138,
+     2138, 1520, 2138, 2138, 1580, 1522, 1538, 1583, 1540, 2138,
+     1580, 1529, 2138, 1587, 1529, 1531, 2138, 1542, 1591, 1540,
+     2138, 1549, 1594, 2138, 2138, 1600, 1605, 1610, 1615, 1620,
+     1625, 1630, 1633, 1607, 1612, 1614, 1627
     } ;
 
-static const flex_int16_t yy_def[1643] =
+static const flex_int16_t yy_def[1748] =
     {   0,
-     1631, 1631, 1632, 1632, 1631, 1631, 1631, 1631, 1631, 1631,
-     1630, 1630, 1630, 1630, 1630, 1633, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1634,
-     1630, 1630, 1630, 1635,   15, 1630,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1636,   45,   45,
+     1736, 1736, 1737, 1737, 1736, 1736, 1736, 1736, 1736, 1736,
+     1735, 1735, 1735, 1735, 1735, 1738, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1739,
+     1735, 1735, 1735, 1740,   15, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1741,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1633, 1630,
-     1630, 1630, 1630, 1630, 1630, 1637, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1634, 1630, 1635,
+       45,   45,   45,   45,   45,   45,   45,   45, 1738, 1735,
+     1735, 1735, 1735, 1735, 1735, 1742, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1739, 1735, 1740,
 
-     1630, 1630,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1638,   45, 1636,   45,   45,
+     1735, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1743,   45, 1741,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1637, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1639,   45,   45,   45, 1630,   45,   45, 1630,   45,   45,
+       45,   45, 1742, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1744,   45,   45,   45, 1735,   45,   45, 1735,   45,
 
-       45,   45,   45,   45,   45, 1638, 1630, 1636,   45,   45,
+       45,   45,   45,   45,   45,   45, 1743, 1735, 1741,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1630, 1630,
-
-     1630, 1630, 1630, 1630, 1630, 1640,   45,   45,   45,   45,
-       45, 1630,   45,   45, 1630,   45, 1630,   45, 1636, 1630,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1745,   45,   45,
+       45,   45,   45, 1735,   45,   45, 1735,   45, 1735,   45,
+     1741, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1735,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1630, 1630, 1630, 1641,
-       45,   45,   45,   45,   45,   45, 1630,   45,   45, 1630,
-       45, 1636,   45,   45,   45,   45, 1630,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+     1735, 1735, 1746,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45, 1735,   45, 1741,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45,   45,   45,   45, 1735,   45,   45,
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1630,   45, 1630,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1735,   45, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1630, 1630, 1630,   45,
-     1630,   45,   45, 1630, 1642,   45,   45, 1630, 1630,   45,
-     1630,   45, 1630,   45,   45,   45, 1630,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1735, 1735, 1735,   45, 1735,   45,   45, 1735, 1747,   45,
+       45, 1735, 1735,   45, 1735,   45, 1735,   45,   45,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45, 1630,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1630,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
-     1630,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
 
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1630,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1630,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1630, 1630,   45,   45,   45,   45,   45,
-       45,   45, 1630, 1630,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1630,   45, 1630,   45,   45,
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1735, 1735,   45,   45,   45,   45,   45,   45,
+       45, 1735, 1735,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1735,   45, 1735,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1630,   45,   45,
-       45,   45,   45,   45,   45,   45, 1630,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1630,   45,   45,
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 1630,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1630, 1630,   45,
-       45,   45, 1630,   45,   45,   45, 1630,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
+       45, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45,   45,
+       45, 1735, 1735,   45,   45,   45, 1735,   45,   45,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45, 1630, 1630,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45, 1630,   45,   45,   45,
+       45, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45, 1735, 1735,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1630, 1630,   45, 1630,   45, 1630,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45, 1630,   45,   45,   45,
-       45, 1630, 1630,   45, 1630,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1735, 1735,   45,
+     1735,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
+     1735,   45,   45,   45,   45, 1735, 1735,   45, 1735,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45,   45,   45, 1630, 1630,   45,   45,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1630,   45,
-
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1630,
-     1630,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45, 1630,
-       45, 1630,   45, 1630, 1630,   45, 1630,   45,   45,   45,
-       45,   45, 1630,   45, 1630,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1630,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1630,   45,
-     1630, 1630,   45, 1630,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1630,   45,   45,   45,   45,   45,   45,
-     1630, 1630,   45,   45, 1630,   45,   45,   45,   45,   45,
-
-     1630,   45,   45,   45,   45,   45, 1630,   45, 1630,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45, 1735,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+
+       45,   45,   45,   45,   45,   45, 1735,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45, 1630,   45,   45,   45,   45,   45,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1735,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1735, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1735,   45,   45,   45,   45,   45,   45, 1735,   45,
+     1735,   45, 1735, 1735,   45, 1735,   45,   45,   45,   45,
+       45, 1735,   45, 1735,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1630,   45,   45,
-     1630,   45,   45,   45,   45, 1630, 1630,   45,   45,   45,
-     1630, 1630, 1630,   45,   45, 1630,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45, 1630,   45,
-     1630,   45,   45,   45, 1630,   45,   45,   45,   45, 1630,
 
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1735,   45, 1735, 1735,   45, 1735,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1735,   45,   45,
+       45,   45,   45,   45, 1735, 1735,   45,   45, 1735,   45,
+       45,   45,   45,   45, 1735,   45,   45,   45,   45,   45,
+     1735,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1630,   45,   45,   45,   45, 1630,
-       45,   45, 1630,   45,   45,   45,   45,   45, 1630,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1630,   45,   45,   45, 1630,   45, 1630,   45, 1630,   45,
-       45,   45,   45,   45,   45, 1630,   45,   45,   45,   45,
-       45,   45,   45, 1630,   45,   45,   45,   45, 1630,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1630,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45, 1630, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1630,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45, 1630,   45, 1630,   45, 1630, 1630,   45,
-       45,   45,   45,   45, 1630,   45, 1630,   45,   45, 1630,
-       45,   45, 1630,   45,   45,   45, 1630,   45,   45,   45,
-     1630,   45, 1630,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1735,   45,   45, 1735,
+       45,   45,   45,   45, 1735, 1735,   45,   45,   45, 1735,
+     1735, 1735,   45,   45,   45,   45,   45,   45,   45,   45,
+     1735,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1735,   45,   45, 1735,   45, 1735,   45,   45,   45, 1735,
+       45,   45,   45,   45, 1735,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45,   45, 1735,   45,   45,   45,   45,   45,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45, 1735,
+       45,   45,   45, 1735,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1735,   45,   45,   45, 1735,   45, 1735,   45, 1735,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1735,   45,   45,   45,   45,   45,   45,   45,
+     1735,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45, 1735, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1735,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1630,   45,   45,   45,   45,   45, 1630, 1630, 1630,
 
-       45, 1630, 1630,   45,   45,   45,   45,   45,   45, 1630,
-     1630, 1630,   45,   45,   45,   45, 1630,   45,   45, 1630,
-       45,   45,   45,   45,   45, 1630,   45,   45, 1630,    0,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630
+       45, 1735,   45,   45,   45,   45,   45,   45,   45, 1735,
+       45, 1735,   45, 1735,   45, 1735, 1735,   45,   45,   45,
+       45,   45, 1735,   45, 1735,   45,   45,   45,   45,   45,
+       45,   45, 1735,   45,   45, 1735,   45,   45,   45, 1735,
+       45,   45,   45, 1735,   45, 1735,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1735,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1735,   45,   45, 1735,   45,   45,
+       45,   45,   45,   45, 1735, 1735, 1735,   45, 1735, 1735,
+
+       45,   45, 1735,   45,   45,   45,   45,   45,   45, 1735,
+     1735,   45, 1735, 1735,   45,   45,   45,   45,   45, 1735,
+       45,   45, 1735,   45,   45,   45, 1735,   45,   45,   45,
+     1735,   45,   45, 1735,    0, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735
     } ;
 
-static const flex_int16_t yy_nxt[2107] =
+static const flex_int16_t yy_nxt[2212] =
     {   0,
-     1630,   13,   14,   13, 1630,   15,   16, 1630,   17,   18,
+     1735,   13,   14,   13, 1735,   15,   16, 1735,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
-       85,  725,   37,   14,   37,   86,   25,   26,   38,  101,
-     1630,   27,   37,   14,   37,   42,   28,   42,   38,   91,
-       92,   29,  197,   30,   13,   14,   13,   90,   91,   25,
+       85,  739,   37,   14,   37,   86,   25,   26,   38,  101,
+     1735,   27,   37,   14,   37,   42,   28,   42,   38,   91,
+       92,   29,  198,   30,   13,   14,   13,   90,   91,   25,
        31,   92,   13,   14,   13,   13,   14,   13,   32,   40,
-      726,   13,   14,   13,   33,   40,  102,   91,   92,  197,
+      740,   13,   14,   13,   33,   40,  102,   91,   92,  198,
        90,   34,   35,   13,   14,   13,   94,   15,   16,   95,
        17,   18,   19,   20,   21,   22,   22,   22,   22,   22,
        23,   24,   13,   14,   13,   90,   39,  103,   25,   26,
 
        13,   14,   13,   27,   39,   42,  107,   42,   28,   42,
-      108,   42,   41,   29,  111,   30,  114,  115,   93,  136,
-       41,   25,   31,  103,  137,  442,   88,  138,   88,  107,
+      108,   42,   41,   29,  111,   30,  114,  115,   93,  137,
+       41,   25,   31,  103,  138,  445,   88,  139,   88,  107,
        32,   89,   89,   89,   89,   89,   33,  111,  108,  114,
-      833,  115,  443,   34,   35,   44,   44,   44,   45,   45,
+      837,  115,  446,   34,   35,   44,   44,   44,   45,   45,
        46,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   47,   45,   48,
        49,   50,   51,   45,   52,   53,   54,   45,   45,   45,
@@ -1325,130 +1359,130 @@ static const flex_int16_t yy_nxt[2107] =
        77,   78,   57,   45,   45,   45,   45,   45,   80,  109,
        81,   81,   81,   81,   81,   80,  103,   83,   83,   83,
        83,   83,  107,   82,   84,   84,   84,   84,   84,   80,
-       82,   83,   83,   83,   83,   83,  134,   82,  110,  131,
-      112,  121,  119,  135,   82,  107,   82,  165,  120,  132,
-      113,  166,  122,   82,  126,  123,  133,  124,  127,  125,
-       82,  128,  129,  112,  205,  231,  392,   82,   45,  393,
-       45,   45,   45,   45,  130,   45,   45,   45,  113,  117,
-      139,  232,   45,   45,  834,   45,   45,  205,  101,  183,
-
-      140,   45,  141,   45,   45,   45,   45,   45,   45,   45,
+       82,   83,   83,   83,   83,   83,  135,   82,  110,  132,
+      112,  121,  119,  136,   82,  107,   82,  166,  120,  133,
+      113,  167,  122,   82,  140,  123,  134,  124,  233,  125,
+       82,  184,  185,  112,  141,  203,  142,   82,   45,  840,
+       45,   45,   45,   45,  234,   45,   45,   45,  113,  117,
+      144,  145,   45,   45,  146,   45,   45,  184,  185,  184,
+
+      147,   45,  203,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  111,  183,   45,  143,  144,  184,
-       45,  145,  147,  450,   45,  102,  148,  146,  185,  451,
-      149,  185,   45,  151,  154,  152,   45,  153,   45,  118,
-      198,  192,  155,  114,  156,  184,  150,  201,  159,  157,
-      158,  160,  161,  167,  173,  174,  185,  168,  375,  188,
-      169,  202,  162,  203,  112,  163,  114,  170,  171,  192,
-      214,  199,  487,  172,  113,  201,  179,  229,  488,  215,
-      216,  180,   84,   84,   84,   84,   84,  175,  202,  176,
-
-      230,  203,  204,  177,  835,   82,   89,   89,   89,   89,
-       89,   80,  113,   81,   81,   81,   81,   81,  376,  178,
-       89,   89,   89,   89,   89,   88,   82,   88,   82,  204,
-       89,   89,   89,   89,   89,   80,  183,   83,   83,   83,
-       83,   83,   84,   84,   84,   84,   84,  100,  184,   82,
-       82,  196,  192,  240,  100,   82,  220,  221,  249,  201,
-      301,  235,  186,  226,  236,  227,  222,  202,  237,  209,
-      262,  263,  264,   82,  187,  299,  300,  196,   82,  250,
-      210,  836,  228,  301,  100,  299,  267,  256,  100,  268,
-      269,  283,  100,  301,  292,  284,  311,  241,  300,  285,
-
-      100,  273,  300,  299,  100,  307,  100,  191,  208,  208,
-      208,  208,  208,  302,  704,  705,  304,  208,  208,  208,
-      208,  208,  208,  311,  303,  310,  363,  314,  307,  318,
-      315,  535,  316,  401,  536,  410,  274,  275,  276,  307,
-      208,  208,  208,  208,  208,  208,  402,  277,  504,  278,
-      314,  279,  280,  310,  281,  316,  318,  319,  319,  319,
-      319,  319,  321,  314,  327,  417,  319,  319,  319,  319,
-      319,  319,  328,  417,  421,  423,  424,  329,  330,  364,
-      429,  426,  365,  508,  425,  421,  371,  509,  417,  319,
-      319,  319,  319,  319,  319,  445,  418,  465,  819,  429,
-
-      446,  820,  466,  421,  426,  491,  505,  546,  429,  432,
-      432,  432,  432,  432,  433,  492,  837,  772,  432,  432,
-      432,  432,  432,  432,  480,  481,  482,  493,  516,  521,
-      483,  541,  517,  522,  546,  546,  542,  554,  571,  555,
-      772,  432,  432,  432,  432,  432,  432,  581,  603,  637,
-      467,  572,  582,  838,  638,  468,  665,  666,  604,  839,
-      661,  759,  556,  771,  554,  667,  555,   45,   45,   45,
-       45,   45,  840,  760,  841,  842,   45,   45,   45,   45,
-       45,   45,  735,  665,  843,  666,  844,  736,  845,  777,
-      778,  771,  779,  846,  847,  848,  849,  850,  851,   45,
-
-       45,   45,   45,   45,   45,  852,  853,  854,  855,  856,
-      857,  858,  860,  861,  864,  865,  866,  868,  859,  869,
-      862,  870,  867,  871,  863,  872,  737,  873,  874,  875,
-      876,  877,  878,  879,  880,  881,  882,  883,  884,  885,
-      886,  887,  888,  889,  890,  891,  892,  893,  894,  895,
+       45,   45,   45,   45,  126,  187,   45,  127,  128,  148,
+       45,  129,  130,  149,   45,  111,  841,  150,  317,  186,
+      186,  199,   45,  413,  131,  185,   45,  155,   45,  118,
+      101,  114,  842,  151,  152,  156,  153,  157,  154,  174,
+      175,  160,  158,  159,  161,  162,  168,  186,  189,  112,
+      169,  188,  200,  170,  114,  163,  193,  202,  164,  113,
+      171,  172,  197,  204,  180,  448,  173,  102,  237,  181,
+      449,  238,  176,  205,  177,  239,  222,  223,  178,   84,
+
+       84,   84,   84,   84,  193,  202,  224,  113,  197,  231,
+      404,  204,   82,   80,  179,   81,   81,   81,   81,   81,
+      205,  302,  232,  405,   88,  206,   88,  242,   82,   89,
+       89,   89,   89,   89,   80,   82,   83,   83,   83,   83,
+       83,   84,   84,   84,   84,   84,  100,  302,  206,   82,
+      193,   82,  251,  100,   82,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,  215,  228,  210,  229,  202,
+      301,  243,   82,  252,  216,  217,  301,   82,  211,  264,
+      265,  266,  843,  100,  285,  230,  269,  100,  286,  270,
+      271,  100,  287,  718,  719,  203,  313,  258,  301,  100,
+
+      275,  303,  302,  100,  304,  100,  192,  209,  209,  209,
+      209,  209,  844,  845,  378,  303,  209,  209,  209,  209,
+      209,  209,  294,  313,  303,  508,  309,  312,  305,  316,
+      320,  318,  366,  309,  846,  276,  277,  278,  306,  209,
+      209,  209,  209,  209,  209,  847,  279,  424,  280,  309,
+      281,  282,  316,  283,  318,  312,  323,  320,  321,  321,
+      321,  321,  321,  316,  379,  329,  420,  321,  321,  321,
+      321,  321,  321,  330,  395,  420,  424,  396,  331,  332,
+      429,  432,  848,  509,  849,  367,  374,  424,  368,  420,
+      321,  321,  321,  321,  321,  321,  426,  427,  421,  469,
+
+      454,  491,  432,  429,  470,  428,  455,  492,  495,  432,
+      435,  435,  435,  435,  435,  850,  436,  851,  496,  435,
+      435,  435,  435,  435,  435,  484,  485,  486,  512,  520,
+      497,  487,  513,  521,  525,  545,  539,  550,  526,  540,
+      546,  550,  435,  435,  435,  435,  435,  435,  558,  590,
+      559,  572,  471,  580,  591,  646,  674,  472,  612,  573,
+      647,  574,  575,  576,  852,  550,  581,  675,  613,  560,
+      853,  670,  773,  785,  786,  558,  676,  559,   45,   45,
+       45,   45,   45,  674,  774,  854,  855,   45,   45,   45,
+       45,   45,   45,  749,  856,  675,  857,  786,  750,  791,
+
+      792,  785,  793,  838,  858,  859,  839,  860,  861,  862,
+       45,   45,   45,   45,   45,   45,  863,  864,  865,  866,
+      867,  868,  869,  870,  871,  872,  873,  874,  875,  876,
+      879,  877,  880,  883,  884,  885,  887,  751,  878,  881,
+      888,  886,  889,  882,  890,  891,  892,  893,  894,  895,
       896,  897,  898,  899,  900,  901,  902,  903,  904,  905,
-      906,  879,  907,  908,  909,  911,  912,  913,  914,  910,
-      915,  916,  917,  918,  919,  920,  921,  922,  923,  924,
-      925,  926,  927,  928,  929,  930,  931,  932,  934,  935,
-      936,  933,  937,  938,  939,  940,  941,  942,  943,  944,
+      906,  907,  908,  909,  910,  911,  912,  913,  914,  915,
+      916,  917,  918,  919,  920,  921,  922,  923,  924,  925,
+      898,  926,  927,  928,  929,  930,  931,  932,  933,  935,
+      936,  937,  938,  934,  939,  940,  941,  942,  943,  944,
 
       945,  946,  947,  948,  949,  950,  951,  952,  953,  954,
-      955,  956,  957,  958,  959,  960,  961,  962,  964,  965,
-      966,  967,  968,  969,  970,  971,  972,  973,  974,  963,
+      955,  956,  958,  959,  960,  957,  961,  962,  963,  964,
+      965,  966,  967,  968,  969,  970,  971,  972,  973,  974,
       975,  976,  977,  978,  979,  980,  981,  982,  983,  984,
-      985,  986,  987,  988,  989,  990,  991,  992,  993,  994,
-      995,  996,  997,  998,  999, 1000, 1001,  979, 1002, 1003,
-      978, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
-     1015, 1016, 1017, 1018, 1013, 1019, 1020, 1021, 1022, 1023,
-     1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033,
-     1034, 1035, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044,
-
-     1045, 1046, 1036, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
+      985,  986,  988,  989,  990,  991,  992,  993,  994,  995,
+      996,  997,  998,  987,  999, 1000, 1001, 1002, 1003, 1004,
+     1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+     1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024,
+     1025, 1003, 1026, 1027, 1002, 1028, 1029, 1030, 1031, 1032,
+     1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1044,
+
+     1045, 1046, 1047, 1042, 1048, 1049, 1050, 1051, 1052, 1053,
      1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
-     1064, 1065, 1066, 1067, 1068, 1069, 1070, 1014, 1071, 1072,
-     1073, 1075, 1074, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
-     1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092,
-     1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1073, 1074,
-     1101, 1102, 1103, 1104, 1105, 1106, 1107, 1109, 1111, 1112,
-     1113, 1108, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121,
-     1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131,
-     1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141,
-
-     1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151,
-     1152, 1110, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160,
-     1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
-     1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
-     1181, 1182, 1183, 1184, 1185, 1186, 1164, 1187, 1188, 1189,
-     1190, 1191, 1165, 1192, 1193, 1194, 1195, 1196, 1197, 1198,
-     1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208,
-     1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218,
-     1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1229,
-     1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239,
-
-     1240, 1241, 1242, 1243, 1244, 1245, 1247, 1248, 1249, 1250,
-     1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260,
-     1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
-     1242, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1279, 1280,
-     1281, 1228, 1282, 1283, 1284, 1278, 1285, 1286, 1287, 1246,
-     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297,
-     1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307,
-     1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
-     1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
-     1328, 1329, 1330, 1331, 1332, 1310, 1333, 1334, 1335, 1336,
-
-     1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
-     1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356,
-     1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366,
-     1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376,
+     1064, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074,
+     1075, 1065, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+     1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093,
+     1094, 1095, 1096, 1097, 1098, 1099, 1043, 1100, 1101, 1102,
+     1104, 1103, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112,
+     1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122,
+     1123, 1124, 1125, 1126, 1127, 1128, 1129, 1102, 1103, 1130,
+     1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140,
+
+     1141, 1143, 1145, 1146, 1147, 1142, 1148, 1149, 1150, 1151,
+     1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+     1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171,
+     1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
+     1182, 1183, 1184, 1185, 1186, 1144, 1187, 1188, 1189, 1190,
+     1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200,
+     1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210,
+     1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
+     1198, 1221, 1222, 1223, 1224, 1225, 1199, 1226, 1227, 1228,
+     1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238,
+
+     1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248,
+     1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258,
+     1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1268, 1269,
+     1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279,
+     1280, 1281, 1282, 1283, 1284, 1286, 1287, 1288, 1289, 1290,
+     1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300,
+     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1281,
+     1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
+     1267, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1285, 1328,
+     1322, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337,
+
+     1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347,
+     1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+     1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
+     1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1354,
      1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386,
-     1388, 1389, 1390, 1391, 1364, 1392, 1393, 1394, 1395, 1396,
+     1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
      1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406,
-     1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1417,
-     1416, 1418, 1419, 1420, 1421, 1422, 1423, 1425, 1426, 1427,
-     1428, 1424, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436,
-
-     1437, 1438, 1439, 1440, 1441, 1442, 1443, 1387, 1416, 1444,
-     1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454,
-     1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464,
-     1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474,
-     1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484,
-     1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494,
-     1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504,
+     1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416,
+     1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1426, 1427,
+     1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1425, 1436,
+
+     1437, 1438, 1441, 1413, 1439, 1440, 1443, 1444, 1445, 1446,
+     1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456,
+     1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466,
+     1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476,
+     1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1486, 1487,
+     1488, 1489, 1485, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+     1442, 1497, 1471, 1498, 1499, 1500, 1501, 1502, 1503, 1504,
      1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514,
      1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524,
      1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534,
@@ -1462,95 +1496,107 @@ static const flex_int16_t yy_nxt[2107] =
      1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604,
      1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614,
      1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624,
-     1625, 1626, 1627, 1628, 1629,   12,   12,   12,   12,   12,
-
-       36,   36,   36,   36,   36,   79,  306,   79,   79,   79,
-       98,  420,   98,  545,   98,  100,  100,  100,  100,  100,
-      116,  116,  116,  116,  116,  182,  100,  182,  182,  182,
-      206,  206,  206,  832,  831,  830,  829,  828,  827,  826,
-      825,  824,  823,  822,  821,  818,  817,  816,  815,  814,
-      813,  812,  811,  810,  809,  808,  807,  806,  805,  804,
-      803,  802,  801,  800,  799,  798,  797,  796,  795,  794,
-      793,  792,  791,  790,  789,  788,  787,  786,  785,  784,
-      783,  782,  781,  780,  776,  775,  774,  773,  770,  769,
-      768,  767,  766,  765,  764,  763,  762,  761,  758,  757,
-
-      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  734,
-      733,  732,  731,  730,  729,  728,  727,  724,  723,  722,
-      721,  720,  719,  718,  717,  716,  715,  714,  713,  712,
-      711,  710,  709,  708,  707,  706,  703,  702,  701,  700,
-      699,  698,  697,  696,  695,  694,  693,  692,  691,  690,
-      689,  688,  687,  686,  685,  684,  683,  682,  681,  680,
-      679,  678,  677,  676,  675,  674,  673,  672,  671,  670,
-      669,  668,  664,  663,  662,  661,  660,  659,  658,  657,
-      656,  655,  654,  653,  652,  651,  650,  649,  648,  647,
-
-      646,  645,  644,  643,  642,  641,  640,  639,  636,  635,
-      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
-      624,  623,  622,  621,  620,  619,  618,  617,  616,  615,
-      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
-      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
-      592,  591,  590,  589,  588,  587,  586,  585,  584,  583,
-      580,  579,  578,  577,  576,  575,  574,  573,  570,  569,
-      568,  567,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  557,  553,  552,  551,  550,  549,  548,  547,  544,
-      543,  540,  539,  538,  537,  534,  533,  532,  531,  530,
-
-      529,  528,  527,  526,  525,  524,  523,  520,  519,  518,
-      515,  514,  513,  512,  511,  510,  507,  506,  503,  502,
-      501,  500,  499,  498,  497,  496,  495,  494,  490,  489,
-      486,  485,  484,  479,  478,  477,  476,  475,  474,  473,
-      472,  471,  470,  469,  464,  463,  462,  461,  460,  459,
-      458,  457,  456,  455,  454,  453,  452,  449,  448,  447,
-      444,  441,  440,  439,  438,  437,  436,  435,  434,  431,
-      430,  428,  427,  422,  419,  416,  415,  414,  413,  412,
-      411,  409,  408,  407,  406,  405,  404,  403,  400,  399,
-      398,  397,  396,  395,  394,  391,  390,  389,  388,  387,
-
-      386,  385,  384,  383,  382,  381,  380,  379,  378,  377,
-      374,  373,  372,  370,  369,  368,  367,  366,  362,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-      350,  349,  348,  347,  346,  345,  344,  343,  342,  341,
-      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
-      326,  325,  324,  323,  322,  320,  207,  317,  315,  313,
-      312,  309,  308,  305,  298,  297,  296,  295,  294,  293,
-      291,  290,  289,  288,  287,  286,  282,  272,  271,  270,
-      266,  265,  261,  260,  259,  258,  257,  255,  254,  253,
-      252,  251,  248,  247,  246,  245,  244,  243,  242,  239,
-
-      238,  234,  233,  225,  224,  223,  219,  218,  217,  213,
-      212,  211,  207,  200,  195,  194,  193,  190,  189,  181,
-      164,  142,  106,  105,  104,   43,   99,   97,   96,   87,
-       43, 1630,   11, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-
-     1630, 1630, 1630, 1630, 1630, 1630
+     1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634,
+
+     1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644,
+     1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
+     1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664,
+     1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674,
+     1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684,
+     1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694,
+     1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704,
+     1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714,
+     1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724,
+     1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734,
+
+       12,   12,   12,   12,   12,   36,   36,   36,   36,   36,
+       79,  308,   79,   79,   79,   98,  423,   98,  549,   98,
+      100,  100,  100,  100,  100,  116,  116,  116,  116,  116,
+      183,  100,  183,  183,  183,  207,  207,  207,  836,  835,
+      834,  833,  832,  831,  830,  829,  828,  827,  826,  825,
+      824,  823,  822,  821,  820,  819,  818,  817,  816,  815,
+      814,  813,  812,  811,  810,  809,  808,  807,  806,  805,
+      804,  803,  802,  801,  800,  799,  798,  797,  796,  795,
+      794,  790,  789,  788,  787,  784,  783,  782,  781,  780,
+      779,  778,  777,  776,  775,  772,  771,  770,  769,  768,
+
+      767,  766,  765,  764,  763,  762,  761,  760,  759,  758,
+      757,  756,  755,  754,  753,  752,  748,  747,  746,  745,
+      744,  743,  742,  741,  738,  737,  736,  735,  734,  733,
+      732,  731,  730,  729,  728,  727,  726,  725,  724,  723,
+      722,  721,  720,  717,  716,  715,  714,  713,  712,  711,
+      710,  709,  708,  707,  706,  705,  704,  703,  702,  701,
+      700,  699,  698,  697,  696,  695,  694,  693,  692,  691,
+      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
+      680,  679,  678,  677,  673,  672,  671,  670,  669,  668,
+      667,  666,  665,  664,  663,  662,  661,  660,  659,  658,
+
+      657,  656,  655,  654,  653,  652,  651,  650,  649,  648,
+      645,  644,  643,  642,  641,  640,  639,  638,  637,  636,
+      635,  634,  633,  632,  631,  630,  629,  628,  627,  626,
+      625,  624,  623,  622,  621,  620,  619,  618,  617,  616,
+      615,  614,  611,  610,  609,  608,  607,  606,  605,  604,
+      603,  602,  601,  600,  599,  598,  597,  596,  595,  594,
+      593,  592,  589,  588,  587,  586,  585,  584,  583,  582,
+      579,  578,  577,  571,  570,  569,  568,  567,  566,  565,
+      564,  563,  562,  561,  557,  556,  555,  554,  553,  552,
+      551,  548,  547,  544,  543,  542,  541,  538,  537,  536,
+
+      535,  534,  533,  532,  531,  530,  529,  528,  527,  524,
+      523,  522,  519,  518,  517,  516,  515,  514,  511,  510,
+      507,  506,  505,  504,  503,  502,  501,  500,  499,  498,
+      494,  493,  490,  489,  488,  483,  482,  481,  480,  479,
+      478,  477,  476,  475,  474,  473,  468,  467,  466,  465,
+      464,  463,  462,  461,  460,  459,  458,  457,  456,  453,
+      452,  451,  450,  447,  444,  443,  442,  441,  440,  439,
+      438,  437,  434,  433,  431,  430,  425,  422,  419,  418,
+      417,  416,  415,  414,  412,  411,  410,  409,  408,  407,
+      406,  403,  402,  401,  400,  399,  398,  397,  394,  393,
+
+      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
+      382,  381,  380,  377,  376,  375,  373,  372,  371,  370,
+      369,  365,  364,  363,  362,  361,  360,  359,  358,  357,
+      356,  355,  354,  353,  352,  351,  350,  349,  348,  347,
+      346,  345,  344,  343,  342,  341,  340,  339,  338,  337,
+      336,  335,  334,  333,  328,  327,  326,  325,  324,  322,
+      208,  319,  317,  315,  314,  311,  310,  307,  300,  299,
+      298,  297,  296,  295,  293,  292,  291,  290,  289,  288,
+      284,  274,  273,  272,  268,  267,  263,  262,  261,  260,
+      259,  257,  256,  255,  254,  253,  250,  249,  248,  247,
+
+      246,  245,  244,  241,  240,  236,  235,  227,  226,  225,
+      221,  220,  219,  218,  214,  213,  212,  208,  201,  196,
+      195,  194,  191,  190,  182,  165,  143,  106,  105,  104,
+       43,   99,   97,   96,   87,   43, 1735,   11, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735
     } ;
 
-static const flex_int16_t yy_chk[2107] =
+static const flex_int16_t yy_chk[2212] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-       21,  618,    3,    3,    3,   21,    1,    1,    3,   44,
+       21,  627,    3,    3,    3,   21,    1,    1,    3,   44,
         0,    1,    4,    4,    4,   13,    1,   13,    4,   27,
        28,    1,  108,    1,    5,    5,    5,   26,   32,    1,
         1,   33,    6,    6,    6,    7,    7,    7,    1,    7,
-      618,    8,    8,    8,    1,    8,   44,   27,   28,  108,
+      627,    8,    8,    8,    1,    8,   44,   27,   28,  108,
        26,    1,    1,    2,    2,    2,   32,    2,    2,   33,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
         2,    2,    9,    9,    9,   31,    5,   47,    2,    2,
 
        10,   10,   10,    2,    6,   37,   51,   37,    2,   42,
        52,   42,    9,    2,   54,    2,   56,   57,   31,   65,
-       10,    2,    2,   47,   65,  330,   25,   65,   25,   51,
+       10,    2,    2,   47,   65,  332,   25,   65,   25,   51,
         2,   25,   25,   25,   25,   25,    2,   54,   52,   56,
-      727,   57,  330,    2,    2,   15,   15,   15,   15,   15,
+      725,   57,  332,    2,    2,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1563,210 +1609,222 @@ static const flex_int16_t yy_chk[2107] =
        19,   19,   63,   17,   20,   20,   20,   20,   20,   22,
        19,   22,   22,   22,   22,   22,   64,   20,   53,   62,
        55,   60,   59,   64,   22,   63,   17,   74,   59,   62,
-       55,   74,   60,   19,   61,   60,   63,   60,   61,   60,
-       20,   61,   61,   55,  115,  133,  276,   22,   45,  276,
-       45,   45,   45,   45,   61,   45,   45,   45,   55,   58,
-       66,  133,   45,   45,  728,   45,   58,  115,  100,   90,
+       55,   74,   60,   19,   66,   60,   63,   60,  134,   60,
+       20,   90,   91,   55,   66,  112,   66,   22,   45,  727,
+       45,   45,   45,   45,  134,   45,   45,   45,   55,   58,
+       68,   68,   45,   45,   68,   45,   58,   90,   91,   93,
 
-       66,   45,   66,   45,   45,   45,   45,   45,   45,   45,
+       68,   45,  112,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   70,   90,   58,   68,   68,   91,
-       58,   68,   69,  337,   58,  100,   69,   68,   92,  337,
-       69,   95,   58,   70,   71,   70,   58,   70,   58,   58,
-      109,  103,   71,   77,   71,   91,   69,  111,   72,   71,
-       71,   72,   72,   75,   76,   76,   92,   75,  260,   95,
-       75,  112,   72,  113,   76,   72,   77,   75,   75,  103,
-      123,  109,  367,   75,   76,  111,   77,  132,  367,  123,
-      123,   77,   80,   80,   80,   80,   80,   76,  112,   76,
-
-      132,  113,  114,   76,  729,   80,   88,   88,   88,   88,
-       88,   81,   76,   81,   81,   81,   81,   81,  260,   76,
-       89,   89,   89,   89,   89,   82,   81,   82,   80,  114,
-       82,   82,   82,   82,   82,   83,   93,   83,   83,   83,
-       83,   83,   84,   84,   84,   84,   84,  102,   94,   81,
-       83,  107,  119,  139,  102,   84,  127,  127,  147,  153,
-      185,  136,   93,  131,  136,  131,  127,  175,  136,  119,
-      159,  159,  159,   83,   94,  183,  184,  107,   84,  147,
-      119,  730,  131,  185,  102,  186,  162,  153,  102,  162,
-      162,  168,  102,  188,  175,  168,  197,  139,  187,  168,
-
-      102,  166,  184,  183,  102,  192,  102,  102,  118,  118,
-      118,  118,  118,  186,  596,  596,  188,  118,  118,  118,
-      118,  118,  118,  197,  187,  196,  250,  201,  192,  205,
-      292,  410,  203,  284,  410,  292,  166,  166,  166,  210,
-      118,  118,  118,  118,  118,  118,  284,  166,  383,  166,
-      201,  166,  166,  196,  166,  203,  205,  208,  208,  208,
-      208,  208,  210,  256,  216,  299,  208,  208,  208,  208,
-      208,  208,  216,  302,  307,  309,  309,  216,  216,  250,
-      314,  310,  250,  386,  309,  321,  256,  386,  299,  208,
-      208,  208,  208,  208,  208,  333,  302,  351,  712,  371,
-
-      333,  712,  351,  307,  310,  370,  383,  421,  314,  319,
-      319,  319,  319,  319,  321,  370,  731,  666,  319,  319,
-      319,  319,  319,  319,  363,  363,  363,  371,  393,  397,
-      363,  415,  393,  397,  433,  421,  415,  431,  450,  431,
-      666,  319,  319,  319,  319,  319,  319,  460,  482,  518,
-      351,  450,  460,  732,  518,  351,  554,  555,  482,  733,
-      556,  652,  433,  665,  431,  556,  431,  432,  432,  432,
-      432,  432,  734,  652,  736,  737,  432,  432,  432,  432,
-      432,  432,  628,  554,  738,  555,  739,  628,  740,  671,
-      671,  665,  671,  741,  742,  743,  744,  745,  746,  432,
-
-      432,  432,  432,  432,  432,  747,  748,  749,  750,  751,
-      752,  753,  754,  755,  756,  757,  758,  760,  753,  761,
-      755,  762,  758,  763,  755,  764,  628,  765,  766,  767,
-      768,  769,  771,  772,  773,  774,  775,  777,  778,  779,
-      780,  781,  782,  783,  784,  785,  786,  787,  788,  789,
-      790,  791,  792,  793,  794,  795,  796,  797,  799,  800,
-      801,  772,  802,  803,  804,  805,  806,  807,  808,  804,
-      809,  810,  811,  812,  813,  816,  817,  818,  819,  820,
-      821,  822,  825,  826,  827,  828,  829,  830,  831,  832,
-      833,  830,  834,  835,  837,  839,  840,  841,  842,  843,
-
-      844,  845,  846,  847,  848,  849,  850,  851,  852,  853,
-      854,  855,  856,  857,  858,  859,  860,  861,  862,  863,
-      864,  865,  866,  867,  869,  870,  871,  872,  873,  861,
-      874,  875,  876,  878,  879,  880,  881,  882,  883,  884,
-      885,  886,  887,  888,  889,  890,  891,  892,  893,  894,
-      895,  896,  897,  899,  900,  901,  902,  879,  903,  904,
-      878,  905,  906,  907,  908,  910,  911,  912,  913,  914,
-      915,  917,  918,  919,  914,  920,  921,  922,  923,  924,
-      925,  926,  927,  928,  929,  930,  931,  932,  933,  934,
-      935,  936,  937,  940,  941,  942,  944,  945,  946,  948,
-
-      949,  950,  936,  951,  952,  953,  954,  955,  956,  957,
-      958,  959,  960,  961,  962,  963,  964,  965,  967,  968,
-      969,  970,  971,  972,  973,  974,  975,  914,  976,  977,
-      978,  980,  979,  981,  982,  983,  984,  985,  986,  987,
-      988,  989,  990,  991,  992,  993,  994,  996,  997,  998,
-      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,  978,  979,
-     1007, 1008, 1009, 1010, 1011, 1013, 1014, 1015, 1016, 1017,
-     1018, 1014, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026,
-     1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036,
-     1037, 1038, 1039, 1040, 1041, 1042, 1044, 1045, 1046, 1047,
-
-     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1056, 1057, 1060,
-     1061, 1015, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
-     1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
-     1080, 1081, 1082, 1083, 1084, 1086, 1088, 1089, 1090, 1091,
-     1092, 1093, 1094, 1095, 1096, 1097, 1073, 1098, 1099, 1100,
-     1101, 1102, 1074, 1103, 1106, 1108, 1110, 1111, 1112, 1113,
-     1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1124,
-     1125, 1126, 1128, 1129, 1130, 1131, 1134, 1136, 1137, 1138,
-     1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
-     1149, 1150, 1151, 1153, 1154, 1155, 1158, 1159, 1160, 1161,
-
-     1162, 1163, 1164, 1165, 1167, 1168, 1169, 1170, 1171, 1172,
-     1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1183, 1184,
-     1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
-     1164, 1195, 1196, 1197, 1198, 1200, 1201, 1202, 1203, 1204,
-     1205, 1147, 1206, 1207, 1208, 1202, 1209, 1212, 1213, 1168,
-     1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1224,
-     1225, 1226, 1227, 1228, 1229, 1231, 1233, 1236, 1238, 1239,
-     1240, 1241, 1242, 1244, 1246, 1247, 1248, 1249, 1250, 1251,
-     1252, 1253, 1254, 1255, 1256, 1258, 1259, 1260, 1261, 1262,
-     1263, 1264, 1265, 1266, 1267, 1242, 1268, 1270, 1273, 1275,
-
-     1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1285, 1286,
-     1287, 1288, 1289, 1290, 1293, 1294, 1296, 1297, 1298, 1299,
-     1300, 1302, 1303, 1304, 1305, 1306, 1308, 1310, 1311, 1312,
-     1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1322, 1323,
-     1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1332, 1333,
-     1334, 1335, 1336, 1337, 1310, 1338, 1339, 1340, 1341, 1342,
-     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
-     1353, 1354, 1355, 1356, 1357, 1359, 1360, 1362, 1363, 1365,
-     1364, 1368, 1369, 1370, 1374, 1375, 1377, 1378, 1379, 1380,
-     1381, 1377, 1382, 1383, 1384, 1385, 1387, 1388, 1390, 1392,
-
-     1393, 1394, 1396, 1397, 1398, 1399, 1401, 1333, 1364, 1402,
-     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412,
-     1413, 1414, 1416, 1417, 1418, 1419, 1421, 1422, 1424, 1425,
-     1426, 1427, 1428, 1430, 1431, 1432, 1434, 1435, 1436, 1437,
-     1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447,
-     1448, 1449, 1450, 1452, 1453, 1454, 1456, 1458, 1460, 1461,
-     1462, 1463, 1464, 1465, 1467, 1468, 1469, 1470, 1471, 1472,
-     1473, 1475, 1476, 1477, 1478, 1480, 1481, 1482, 1483, 1484,
-     1485, 1486, 1487, 1488, 1490, 1491, 1492, 1493, 1494, 1495,
-     1496, 1497, 1498, 1499, 1500, 1501, 1504, 1505, 1506, 1507,
-
-     1508, 1509, 1510, 1511, 1512, 1514, 1515, 1516, 1517, 1518,
-     1519, 1520, 1521, 1522, 1523, 1525, 1526, 1527, 1528, 1529,
-     1530, 1531, 1533, 1535, 1537, 1540, 1541, 1542, 1543, 1544,
-     1546, 1548, 1549, 1551, 1552, 1554, 1555, 1556, 1558, 1559,
-     1560, 1562, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,
-     1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
-     1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591,
-     1593, 1594, 1595, 1596, 1597, 1601, 1604, 1605, 1606, 1607,
-     1608, 1609, 1613, 1614, 1615, 1616, 1618, 1619, 1621, 1622,
-     1623, 1624, 1625, 1627, 1628, 1631, 1631, 1631, 1631, 1631,
-
-     1632, 1632, 1632, 1632, 1632, 1633, 1639, 1633, 1633, 1633,
-     1634, 1640, 1634, 1641, 1634, 1635, 1635, 1635, 1635, 1635,
-     1636, 1636, 1636, 1636, 1636, 1637, 1642, 1637, 1637, 1637,
-     1638, 1638, 1638,  726,  724,  723,  722,  721,  720,  719,
-      718,  717,  715,  714,  713,  711,  710,  709,  708,  707,
-      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
-      696,  695,  694,  692,  691,  690,  689,  688,  687,  686,
-      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
-      675,  674,  673,  672,  670,  669,  668,  667,  664,  663,
-      662,  659,  658,  657,  656,  655,  654,  653,  650,  649,
-
-      648,  647,  646,  645,  644,  643,  642,  641,  640,  639,
-      638,  636,  635,  634,  633,  632,  631,  630,  629,  627,
-      626,  624,  623,  622,  621,  620,  619,  617,  616,  615,
-      613,  612,  610,  609,  608,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  595,  594,  593,  592,
-      591,  589,  588,  587,  586,  585,  584,  583,  582,  580,
-      579,  578,  577,  576,  575,  574,  573,  572,  571,  570,
-      569,  568,  567,  566,  565,  564,  563,  562,  561,  560,
-      559,  558,  552,  550,  547,  546,  544,  543,  542,  540,
-      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
-
-      526,  525,  524,  523,  522,  521,  520,  519,  517,  516,
-      515,  514,  513,  512,  511,  510,  509,  508,  507,  505,
-      503,  502,  501,  500,  499,  498,  497,  496,  495,  494,
-      493,  492,  491,  489,  488,  487,  486,  485,  484,  483,
-      481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
-      471,  470,  469,  468,  467,  466,  464,  463,  462,  461,
-      459,  458,  457,  456,  455,  454,  452,  451,  449,  448,
-      447,  446,  444,  443,  442,  441,  440,  439,  438,  436,
-      435,  434,  429,  428,  426,  425,  424,  423,  422,  419,
-      416,  414,  413,  412,  411,  409,  408,  407,  406,  405,
-
-      404,  403,  402,  401,  400,  399,  398,  396,  395,  394,
-      392,  391,  390,  389,  388,  387,  385,  384,  382,  381,
-      380,  379,  378,  377,  376,  375,  374,  373,  369,  368,
-      366,  365,  364,  362,  361,  360,  359,  358,  357,  356,
-      355,  354,  353,  352,  350,  349,  348,  347,  346,  345,
-      344,  343,  342,  341,  340,  339,  338,  336,  335,  334,
-      332,  329,  328,  327,  326,  325,  324,  323,  322,  318,
-      316,  313,  311,  308,  305,  298,  297,  296,  295,  294,
-      293,  291,  290,  289,  288,  287,  286,  285,  283,  282,
-      281,  280,  279,  278,  277,  275,  274,  273,  272,  271,
-
-      270,  269,  268,  267,  266,  265,  264,  263,  262,  261,
-      259,  258,  257,  255,  254,  253,  252,  251,  249,  248,
-      247,  246,  245,  244,  243,  242,  241,  239,  238,  237,
-      236,  235,  234,  233,  232,  231,  230,  229,  228,  227,
-      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
-      215,  214,  213,  212,  211,  209,  206,  204,  202,  200,
-      199,  194,  193,  189,  181,  180,  179,  178,  177,  176,
-      174,  173,  172,  171,  170,  169,  167,  165,  164,  163,
-      161,  160,  158,  157,  156,  155,  154,  152,  151,  150,
-      149,  148,  146,  145,  144,  143,  142,  141,  140,  138,
-
-      137,  135,  134,  130,  129,  128,  126,  125,  124,  122,
-      121,  120,  116,  110,  106,  105,  104,   98,   97,   78,
-       73,   67,   50,   49,   48,   43,   41,   39,   38,   24,
-       14,   11, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-     1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
-
-     1630, 1630, 1630, 1630, 1630, 1630
+       45,   45,   45,   45,   61,   93,   58,   61,   61,   69,
+       58,   61,   61,   69,   58,   70,  728,   69,  294,   92,
+       95,  109,   58,  294,   61,   94,   58,   71,   58,   58,
+      100,   77,  729,   69,   70,   71,   70,   71,   70,   76,
+       76,   72,   71,   71,   72,   72,   75,   92,   95,   76,
+       75,   94,  109,   75,   77,   72,  103,  111,   72,   76,
+       75,   75,  107,  113,   77,  335,   75,  100,  137,   77,
+      335,  137,   76,  114,   76,  137,  128,  128,   76,   80,
+
+       80,   80,   80,   80,  103,  111,  128,   76,  107,  133,
+      286,  113,   80,   81,   76,   81,   81,   81,   81,   81,
+      114,  185,  133,  286,   82,  115,   82,  140,   81,   82,
+       82,   82,   82,   82,   83,   80,   83,   83,   83,   83,
+       83,   84,   84,   84,   84,   84,  102,  185,  115,   83,
+      119,   81,  148,  102,   84,   88,   88,   88,   88,   88,
+       89,   89,   89,   89,   89,  123,  132,  119,  132,  154,
+      184,  140,   83,  148,  123,  123,  187,   84,  119,  160,
+      160,  160,  731,  102,  169,  132,  163,  102,  169,  163,
+      163,  102,  169,  605,  605,  176,  198,  154,  184,  102,
+
+      167,  186,  188,  102,  187,  102,  102,  118,  118,  118,
+      118,  118,  732,  733,  262,  189,  118,  118,  118,  118,
+      118,  118,  176,  198,  186,  386,  193,  197,  188,  202,
+      206,  204,  252,  211,  734,  167,  167,  167,  189,  118,
+      118,  118,  118,  118,  118,  735,  167,  309,  167,  193,
+      167,  167,  202,  167,  204,  197,  211,  206,  209,  209,
+      209,  209,  209,  258,  262,  217,  301,  209,  209,  209,
+      209,  209,  209,  217,  278,  304,  309,  278,  217,  217,
+      312,  316,  736,  386,  737,  252,  258,  323,  252,  301,
+      209,  209,  209,  209,  209,  209,  311,  311,  304,  354,
+
+      340,  370,  374,  312,  354,  311,  340,  370,  373,  316,
+      321,  321,  321,  321,  321,  738,  323,  740,  373,  321,
+      321,  321,  321,  321,  321,  366,  366,  366,  389,  396,
+      374,  366,  389,  396,  400,  418,  413,  424,  400,  413,
+      418,  436,  321,  321,  321,  321,  321,  321,  434,  464,
+      434,  450,  354,  454,  464,  522,  558,  354,  486,  450,
+      522,  450,  450,  450,  741,  424,  454,  559,  486,  436,
+      742,  560,  661,  674,  675,  434,  560,  434,  435,  435,
+      435,  435,  435,  558,  661,  743,  744,  435,  435,  435,
+      435,  435,  435,  637,  745,  559,  746,  675,  637,  680,
+
+      680,  674,  680,  726,  747,  748,  726,  750,  751,  752,
+      435,  435,  435,  435,  435,  435,  753,  754,  755,  756,
+      757,  758,  759,  760,  761,  762,  763,  764,  765,  766,
+      768,  767,  769,  770,  771,  772,  774,  637,  767,  769,
+      775,  772,  776,  769,  777,  778,  779,  780,  781,  782,
+      783,  785,  786,  787,  788,  789,  791,  792,  793,  794,
+      795,  796,  797,  798,  799,  800,  801,  802,  803,  804,
+      805,  806,  807,  808,  809,  810,  811,  812,  813,  814,
+      786,  815,  816,  818,  819,  820,  821,  822,  823,  824,
+      825,  826,  827,  823,  828,  829,  830,  831,  832,  835,
+
+      836,  837,  838,  839,  840,  841,  844,  845,  846,  847,
+      848,  849,  850,  851,  852,  849,  853,  854,  856,  858,
+      859,  860,  861,  862,  863,  864,  865,  866,  867,  868,
+      869,  870,  871,  872,  873,  874,  875,  876,  877,  878,
+      879,  880,  881,  882,  883,  884,  885,  886,  888,  889,
+      890,  891,  892,  880,  893,  894,  895,  897,  898,  899,
+      900,  901,  902,  903,  904,  905,  906,  907,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
+      920,  898,  921,  923,  897,  924,  925,  926,  927,  928,
+      929,  930,  931,  932,  934,  935,  936,  937,  938,  939,
+
+      941,  942,  943,  938,  944,  945,  946,  947,  948,  949,
+      950,  951,  952,  953,  954,  955,  956,  957,  958,  959,
+      960,  961,  964,  965,  966,  968,  969,  970,  972,  973,
+      974,  960,  975,  976,  977,  978,  979,  980,  981,  982,
+      983,  984,  985,  986,  987,  988,  989,  991,  992,  993,
+      994,  995,  996,  997,  998,  999,  938, 1000, 1001, 1002,
+     1004, 1003, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
+     1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
+     1023, 1025, 1026, 1027, 1028, 1029, 1030, 1002, 1003, 1031,
+     1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1042,
+
+     1043, 1044, 1045, 1046, 1047, 1043, 1048, 1049, 1050, 1051,
+     1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061,
+     1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071,
+     1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
+     1083, 1085, 1086, 1089, 1090, 1044, 1091, 1092, 1093, 1094,
+     1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
+     1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1115,
+     1116, 1117, 1118, 1119, 1120, 1122, 1123, 1124, 1125, 1126,
+     1102, 1127, 1128, 1129, 1130, 1131, 1103, 1132, 1133, 1134,
+     1135, 1136, 1137, 1140, 1142, 1144, 1145, 1146, 1147, 1148,
+
+     1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1158, 1159,
+     1160, 1162, 1163, 1164, 1165, 1168, 1170, 1171, 1172, 1173,
+     1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183,
+     1184, 1185, 1187, 1188, 1189, 1192, 1193, 1194, 1195, 1196,
+     1197, 1198, 1199, 1201, 1202, 1203, 1204, 1205, 1206, 1208,
+     1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218,
+     1219, 1220, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1198,
+     1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1239,
+     1181, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1202, 1247,
+     1241, 1248, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258,
+
+     1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1270,
+     1272, 1275, 1277, 1278, 1279, 1280, 1281, 1283, 1285, 1286,
+     1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296,
+     1297, 1298, 1299, 1300, 1302, 1303, 1304, 1305, 1306, 1281,
+     1307, 1308, 1309, 1310, 1311, 1312, 1314, 1317, 1319, 1320,
+     1321, 1322, 1323, 1324, 1325, 1326, 1327, 1329, 1330, 1331,
+     1332, 1333, 1334, 1337, 1338, 1340, 1341, 1342, 1343, 1344,
+     1346, 1347, 1348, 1349, 1350, 1352, 1354, 1355, 1356, 1357,
+     1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367,
+     1368, 1369, 1371, 1372, 1374, 1375, 1376, 1377, 1365, 1378,
+
+     1379, 1380, 1382, 1354, 1381, 1381, 1383, 1384, 1385, 1386,
+     1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
+     1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406,
+     1408, 1409, 1411, 1412, 1413, 1414, 1417, 1418, 1419, 1423,
+     1424, 1425, 1426, 1427, 1428, 1429, 1430, 1432, 1433, 1434,
+     1435, 1436, 1432, 1437, 1438, 1439, 1440, 1442, 1443, 1445,
+     1382, 1447, 1413, 1448, 1449, 1451, 1452, 1453, 1454, 1456,
+     1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466,
+     1467, 1468, 1469, 1471, 1472, 1473, 1474, 1476, 1477, 1478,
+     1479, 1480, 1481, 1482, 1483, 1485, 1486, 1487, 1488, 1489,
+
+     1491, 1492, 1493, 1495, 1496, 1497, 1498, 1499, 1500, 1501,
+     1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511,
+     1513, 1514, 1515, 1517, 1519, 1521, 1522, 1523, 1524, 1525,
+     1526, 1527, 1528, 1529, 1530, 1531, 1532, 1534, 1535, 1536,
+     1537, 1538, 1539, 1540, 1542, 1543, 1544, 1545, 1547, 1548,
+     1549, 1550, 1551, 1552, 1553, 1554, 1555, 1557, 1558, 1559,
+     1560, 1561, 1562, 1563, 1564, 1565, 1567, 1568, 1569, 1570,
+     1571, 1572, 1573, 1574, 1577, 1578, 1579, 1580, 1581, 1582,
+     1583, 1584, 1585, 1587, 1588, 1589, 1590, 1591, 1592, 1593,
+     1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1603, 1604,
+
+     1605, 1606, 1607, 1608, 1609, 1611, 1613, 1615, 1618, 1619,
+     1620, 1621, 1622, 1624, 1626, 1627, 1628, 1629, 1630, 1631,
+     1632, 1634, 1635, 1637, 1638, 1639, 1641, 1642, 1643, 1645,
+     1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656,
+     1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666,
+     1667, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677,
+     1678, 1679, 1680, 1681, 1682, 1683, 1684, 1686, 1687, 1689,
+     1690, 1691, 1692, 1693, 1694, 1698, 1701, 1702, 1704, 1705,
+     1706, 1707, 1708, 1709, 1712, 1715, 1716, 1717, 1718, 1719,
+     1721, 1722, 1724, 1725, 1726, 1728, 1729, 1730, 1732, 1733,
+
+     1736, 1736, 1736, 1736, 1736, 1737, 1737, 1737, 1737, 1737,
+     1738, 1744, 1738, 1738, 1738, 1739, 1745, 1739, 1746, 1739,
+     1740, 1740, 1740, 1740, 1740, 1741, 1741, 1741, 1741, 1741,
+     1742, 1747, 1742, 1742, 1742, 1743, 1743, 1743,  724,  723,
+      722,  721,  720,  719,  718,  717,  716,  715,  714,  713,
+      712,  711,  710,  709,  708,  706,  705,  704,  703,  702,
+      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
+      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
+      681,  679,  678,  677,  676,  673,  672,  671,  668,  667,
+      666,  665,  664,  663,  662,  659,  658,  657,  656,  655,
+
+      654,  653,  652,  651,  650,  649,  648,  647,  645,  644,
+      643,  642,  641,  640,  639,  638,  636,  635,  633,  632,
+      631,  630,  629,  628,  626,  625,  624,  622,  621,  619,
+      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  604,  603,  602,  601,  600,  598,  597,
+      596,  595,  594,  593,  592,  591,  589,  588,  587,  586,
+      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
+      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
+      565,  564,  563,  562,  556,  554,  551,  550,  548,  547,
+      546,  544,  540,  539,  538,  537,  536,  535,  534,  533,
+
+      532,  531,  530,  529,  528,  527,  526,  525,  524,  523,
+      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
+      511,  509,  507,  506,  505,  504,  503,  502,  501,  500,
+      499,  498,  497,  496,  495,  493,  492,  491,  490,  489,
+      488,  487,  485,  484,  483,  482,  481,  480,  479,  478,
+      477,  476,  475,  474,  473,  472,  471,  470,  468,  467,
+      466,  465,  463,  462,  461,  460,  459,  458,  456,  455,
+      453,  452,  451,  449,  447,  446,  445,  444,  443,  442,
+      441,  439,  438,  437,  432,  431,  429,  428,  427,  426,
+      425,  422,  419,  417,  416,  415,  414,  412,  411,  410,
+
+      409,  408,  407,  406,  405,  404,  403,  402,  401,  399,
+      398,  397,  395,  394,  393,  392,  391,  390,  388,  387,
+      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
+      372,  371,  369,  368,  367,  365,  364,  363,  362,  361,
+      360,  359,  358,  357,  356,  355,  353,  352,  351,  350,
+      349,  348,  347,  346,  345,  344,  343,  342,  341,  339,
+      338,  337,  336,  334,  331,  330,  329,  328,  327,  326,
+      325,  324,  320,  318,  315,  313,  310,  307,  300,  299,
+      298,  297,  296,  295,  293,  292,  291,  290,  289,  288,
+      287,  285,  284,  283,  282,  281,  280,  279,  277,  276,
+
+      275,  274,  273,  272,  271,  270,  269,  268,  267,  266,
+      265,  264,  263,  261,  260,  259,  257,  256,  255,  254,
+      253,  251,  250,  249,  248,  247,  246,  245,  244,  243,
+      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
+      231,  230,  229,  228,  227,  226,  225,  224,  223,  222,
+      221,  220,  219,  218,  216,  215,  214,  213,  212,  210,
+      207,  205,  203,  201,  200,  195,  194,  190,  182,  181,
+      180,  179,  178,  177,  175,  174,  173,  172,  171,  170,
+      168,  166,  165,  164,  162,  161,  159,  158,  157,  156,
+      155,  153,  152,  151,  150,  149,  147,  146,  145,  144,
+
+      143,  142,  141,  139,  138,  136,  135,  131,  130,  129,
+      127,  126,  125,  124,  122,  121,  120,  116,  110,  106,
+      105,  104,   98,   97,   78,   73,   67,   50,   49,   48,
+       43,   41,   39,   38,   24,   14,   11, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1775,29 +1833,29 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[192] =
+static const flex_int16_t yy_rule_linenum[198] =
     {   0,
       149,  151,  153,  158,  159,  164,  165,  166,  178,  181,
       186,  193,  202,  211,  220,  229,  238,  247,  256,  265,
-      274,  283,  292,  301,  310,  320,  330,  340,  350,  360,
-      370,  380,  389,  399,  409,  419,  429,  438,  447,  456,
-      465,  474,  483,  492,  501,  510,  519,  528,  537,  546,
-      555,  568,  577,  586,  595,  604,  615,  626,  637,  648,
-      660,  671,  682,  693,  704,  715,  726,  737,  748,  759,
-      770,  781,  790,  801,  812,  823,  834,  845,  856,  867,
-      878,  887,  896,  906,  915,  924,  939,  955,  964,  973,
-      982,  991, 1000, 1009, 1018, 1027, 1036, 1045, 1067, 1089,
-
-     1098, 1108, 1118, 1127, 1137, 1148, 1157, 1166, 1175, 1184,
-     1193, 1203, 1212, 1221, 1230, 1241, 1252, 1263, 1272, 1282,
-     1291, 1300, 1309, 1318, 1327, 1336, 1345, 1354, 1364, 1376,
-     1389, 1398, 1407, 1417, 1427, 1436, 1447, 1457, 1466, 1476,
-     1486, 1495, 1504, 1513, 1522, 1532, 1541, 1551, 1560, 1569,
-     1578, 1587, 1596, 1605, 1614, 1623, 1632, 1641, 1650, 1659,
-     1668, 1677, 1686, 1695, 1704, 1713, 1722, 1731, 1740, 1749,
-     1758, 1767, 1776, 1786, 1885, 1890, 1895, 1900, 1901, 1902,
-     1903, 1904, 1905, 1907, 1925, 1938, 1943, 1947, 1949, 1951,
-     1953
+      274,  283,  292,  301,  310,  322,  334,  344,  354,  364,
+      374,  384,  393,  403,  413,  423,  433,  442,  451,  460,
+      469,  478,  487,  496,  505,  514,  523,  532,  541,  550,
+      559,  572,  581,  590,  599,  608,  619,  630,  641,  652,
+      664,  675,  686,  697,  708,  719,  730,  741,  752,  763,
+      774,  785,  794,  805,  816,  827,  838,  849,  860,  871,
+      882,  891,  900,  911,  922,  933,  944,  955,  966,  976,
+      985,  994, 1009, 1025, 1034, 1043, 1052, 1061, 1070, 1079,
+
+     1088, 1097, 1106, 1115, 1137, 1159, 1168, 1178, 1188, 1197,
+     1207, 1218, 1227, 1236, 1245, 1254, 1263, 1273, 1282, 1291,
+     1300, 1311, 1322, 1333, 1342, 1352, 1361, 1370, 1379, 1388,
+     1397, 1406, 1415, 1424, 1434, 1446, 1459, 1468, 1477, 1487,
+     1497, 1506, 1517, 1527, 1536, 1546, 1556, 1565, 1574, 1583,
+     1592, 1602, 1611, 1621, 1630, 1639, 1648, 1657, 1666, 1675,
+     1684, 1693, 1702, 1711, 1720, 1729, 1738, 1747, 1756, 1765,
+     1774, 1783, 1792, 1801, 1810, 1819, 1828, 1837, 1846, 1856,
+     1955, 1960, 1965, 1970, 1971, 1972, 1973, 1974, 1975, 1977,
+     1995, 2008, 2013, 2017, 2019, 2021, 2023
 
     } ;
 
@@ -1851,7 +1909,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 1854 "dhcp6_lexer.cc"
+#line 1913 "dhcp6_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1877,8 +1935,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1880 "dhcp6_lexer.cc"
-#line 1881 "dhcp6_lexer.cc"
+#line 1939 "dhcp6_lexer.cc"
+#line 1940 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2210,7 +2268,7 @@ YY_DECL
     }
 
 
-#line 2213 "dhcp6_lexer.cc"
+#line 2272 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2239,13 +2297,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 1631 )
+                               if ( yy_current_state >= 1736 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1630 );
+               while ( yy_current_state != 1735 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2264,13 +2322,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 192 )
+                       else if ( yy_act < 198 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 192 )
+                       else if ( yy_act == 198 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 193 )
+                       else if ( yy_act == 199 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2537,6 +2595,8 @@ YY_RULE_SETUP
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
     case isc::dhcp::Parser6Context::DHCP_DDNS:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-set", driver.loc_);
@@ -2545,11 +2605,13 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 320 "dhcp6_lexer.ll"
+#line 322 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
     case isc::dhcp::Parser6Context::DHCP_DDNS:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-replacement", driver.loc_);
@@ -2558,7 +2620,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 330 "dhcp6_lexer.ll"
+#line 334 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2571,7 +2633,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 340 "dhcp6_lexer.ll"
+#line 344 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
@@ -2584,7 +2646,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 350 "dhcp6_lexer.ll"
+#line 354 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) {
@@ -2597,7 +2659,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 360 "dhcp6_lexer.ll"
+#line 364 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2610,7 +2672,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 370 "dhcp6_lexer.ll"
+#line 374 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2623,7 +2685,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 380 "dhcp6_lexer.ll"
+#line 384 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME:
@@ -2635,7 +2697,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 389 "dhcp6_lexer.ll"
+#line 393 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2648,7 +2710,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 399 "dhcp6_lexer.ll"
+#line 403 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2661,7 +2723,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 409 "dhcp6_lexer.ll"
+#line 413 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2674,7 +2736,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 419 "dhcp6_lexer.ll"
+#line 423 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
@@ -2687,7 +2749,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 429 "dhcp6_lexer.ll"
+#line 433 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2699,7 +2761,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 438 "dhcp6_lexer.ll"
+#line 442 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2711,7 +2773,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 447 "dhcp6_lexer.ll"
+#line 451 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2723,7 +2785,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 456 "dhcp6_lexer.ll"
+#line 460 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2735,7 +2797,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 465 "dhcp6_lexer.ll"
+#line 469 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2747,7 +2809,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 474 "dhcp6_lexer.ll"
+#line 478 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2759,7 +2821,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 483 "dhcp6_lexer.ll"
+#line 487 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SANITY_CHECKS:
@@ -2771,7 +2833,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 492 "dhcp6_lexer.ll"
+#line 496 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2783,7 +2845,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 501 "dhcp6_lexer.ll"
+#line 505 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2795,7 +2857,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 510 "dhcp6_lexer.ll"
+#line 514 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2807,7 +2869,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 519 "dhcp6_lexer.ll"
+#line 523 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2819,7 +2881,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 528 "dhcp6_lexer.ll"
+#line 532 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG_CONTROL:
@@ -2831,7 +2893,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 537 "dhcp6_lexer.ll"
+#line 541 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG_CONTROL:
@@ -2843,7 +2905,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 546 "dhcp6_lexer.ll"
+#line 550 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2855,7 +2917,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 555 "dhcp6_lexer.ll"
+#line 559 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2871,7 +2933,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 568 "dhcp6_lexer.ll"
+#line 572 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2883,7 +2945,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 577 "dhcp6_lexer.ll"
+#line 581 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2895,7 +2957,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 586 "dhcp6_lexer.ll"
+#line 590 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2907,7 +2969,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 595 "dhcp6_lexer.ll"
+#line 599 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2919,7 +2981,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 604 "dhcp6_lexer.ll"
+#line 608 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2933,7 +2995,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 615 "dhcp6_lexer.ll"
+#line 619 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2947,7 +3009,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 626 "dhcp6_lexer.ll"
+#line 630 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2961,7 +3023,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 637 "dhcp6_lexer.ll"
+#line 641 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2975,7 +3037,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 648 "dhcp6_lexer.ll"
+#line 652 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2990,7 +3052,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 660 "dhcp6_lexer.ll"
+#line 664 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3004,7 +3066,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 671 "dhcp6_lexer.ll"
+#line 675 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3018,7 +3080,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 682 "dhcp6_lexer.ll"
+#line 686 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3032,7 +3094,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 693 "dhcp6_lexer.ll"
+#line 697 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3046,7 +3108,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 704 "dhcp6_lexer.ll"
+#line 708 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3060,7 +3122,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 715 "dhcp6_lexer.ll"
+#line 719 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3074,7 +3136,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 726 "dhcp6_lexer.ll"
+#line 730 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3088,7 +3150,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 737 "dhcp6_lexer.ll"
+#line 741 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3102,7 +3164,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 748 "dhcp6_lexer.ll"
+#line 752 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3116,7 +3178,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 759 "dhcp6_lexer.ll"
+#line 763 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3130,7 +3192,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 770 "dhcp6_lexer.ll"
+#line 774 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3144,7 +3206,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 781 "dhcp6_lexer.ll"
+#line 785 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3156,7 +3218,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 790 "dhcp6_lexer.ll"
+#line 794 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3170,7 +3232,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 801 "dhcp6_lexer.ll"
+#line 805 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3184,7 +3246,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 812 "dhcp6_lexer.ll"
+#line 816 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3198,7 +3260,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 823 "dhcp6_lexer.ll"
+#line 827 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3212,7 +3274,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 834 "dhcp6_lexer.ll"
+#line 838 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3226,7 +3288,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 845 "dhcp6_lexer.ll"
+#line 849 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3240,7 +3302,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 856 "dhcp6_lexer.ll"
+#line 860 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3254,7 +3316,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 867 "dhcp6_lexer.ll"
+#line 871 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3268,7 +3330,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 878 "dhcp6_lexer.ll"
+#line 882 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3280,7 +3342,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 887 "dhcp6_lexer.ll"
+#line 891 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3292,7 +3354,91 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 896 "dhcp6_lexer.ll"
+#line 900 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_);
+    }
+}
+       YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 911 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_);
+    }
+}
+       YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 922 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_);
+    }
+}
+       YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 933 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_);
+    }
+}
+       YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 944 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_);
+    }
+}
+       YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 955 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_);
+    }
+}
+       YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 966 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3303,9 +3449,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 90:
 YY_RULE_SETUP
-#line 906 "dhcp6_lexer.ll"
+#line 976 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3315,9 +3461,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 91:
 YY_RULE_SETUP
-#line 915 "dhcp6_lexer.ll"
+#line 985 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3327,9 +3473,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 92:
 YY_RULE_SETUP
-#line 924 "dhcp6_lexer.ll"
+#line 994 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3345,9 +3491,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 93:
 YY_RULE_SETUP
-#line 939 "dhcp6_lexer.ll"
+#line 1009 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3364,9 +3510,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 94:
 YY_RULE_SETUP
-#line 955 "dhcp6_lexer.ll"
+#line 1025 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3376,9 +3522,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 95:
 YY_RULE_SETUP
-#line 964 "dhcp6_lexer.ll"
+#line 1034 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3388,9 +3534,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 96:
 YY_RULE_SETUP
-#line 973 "dhcp6_lexer.ll"
+#line 1043 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3400,9 +3546,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 97:
 YY_RULE_SETUP
-#line 982 "dhcp6_lexer.ll"
+#line 1052 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3412,9 +3558,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 98:
 YY_RULE_SETUP
-#line 991 "dhcp6_lexer.ll"
+#line 1061 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3424,9 +3570,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 99:
 YY_RULE_SETUP
-#line 1000 "dhcp6_lexer.ll"
+#line 1070 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3436,9 +3582,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 100:
 YY_RULE_SETUP
-#line 1009 "dhcp6_lexer.ll"
+#line 1079 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3448,9 +3594,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 101:
 YY_RULE_SETUP
-#line 1018 "dhcp6_lexer.ll"
+#line 1088 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3460,9 +3606,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 102:
 YY_RULE_SETUP
-#line 1027 "dhcp6_lexer.ll"
+#line 1097 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3472,9 +3618,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 103:
 YY_RULE_SETUP
-#line 1036 "dhcp6_lexer.ll"
+#line 1106 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -3484,9 +3630,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 104:
 YY_RULE_SETUP
-#line 1045 "dhcp6_lexer.ll"
+#line 1115 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3509,9 +3655,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 105:
 YY_RULE_SETUP
-#line 1067 "dhcp6_lexer.ll"
+#line 1137 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3534,9 +3680,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 106:
 YY_RULE_SETUP
-#line 1089 "dhcp6_lexer.ll"
+#line 1159 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3546,9 +3692,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 107:
 YY_RULE_SETUP
-#line 1098 "dhcp6_lexer.ll"
+#line 1168 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3559,9 +3705,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 108:
 YY_RULE_SETUP
-#line 1108 "dhcp6_lexer.ll"
+#line 1178 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3572,9 +3718,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 109:
 YY_RULE_SETUP
-#line 1118 "dhcp6_lexer.ll"
+#line 1188 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3584,9 +3730,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 110:
 YY_RULE_SETUP
-#line 1127 "dhcp6_lexer.ll"
+#line 1197 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3597,9 +3743,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 111:
 YY_RULE_SETUP
-#line 1137 "dhcp6_lexer.ll"
+#line 1207 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3611,9 +3757,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 112:
 YY_RULE_SETUP
-#line 1148 "dhcp6_lexer.ll"
+#line 1218 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3623,9 +3769,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 113:
 YY_RULE_SETUP
-#line 1157 "dhcp6_lexer.ll"
+#line 1227 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3635,9 +3781,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 114:
 YY_RULE_SETUP
-#line 1166 "dhcp6_lexer.ll"
+#line 1236 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3647,9 +3793,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 115:
 YY_RULE_SETUP
-#line 1175 "dhcp6_lexer.ll"
+#line 1245 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3659,9 +3805,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 116:
 YY_RULE_SETUP
-#line 1184 "dhcp6_lexer.ll"
+#line 1254 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3671,9 +3817,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 117:
 YY_RULE_SETUP
-#line 1193 "dhcp6_lexer.ll"
+#line 1263 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3684,9 +3830,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 118:
 YY_RULE_SETUP
-#line 1203 "dhcp6_lexer.ll"
+#line 1273 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3696,9 +3842,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 119:
 YY_RULE_SETUP
-#line 1212 "dhcp6_lexer.ll"
+#line 1282 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3708,9 +3854,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 120:
 YY_RULE_SETUP
-#line 1221 "dhcp6_lexer.ll"
+#line 1291 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3720,9 +3866,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 121:
 YY_RULE_SETUP
-#line 1230 "dhcp6_lexer.ll"
+#line 1300 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3734,9 +3880,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 122:
 YY_RULE_SETUP
-#line 1241 "dhcp6_lexer.ll"
+#line 1311 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3748,9 +3894,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 123:
 YY_RULE_SETUP
-#line 1252 "dhcp6_lexer.ll"
+#line 1322 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3762,9 +3908,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 124:
 YY_RULE_SETUP
-#line 1263 "dhcp6_lexer.ll"
+#line 1333 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3774,9 +3920,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 125:
 YY_RULE_SETUP
-#line 1272 "dhcp6_lexer.ll"
+#line 1342 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3787,9 +3933,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 126:
 YY_RULE_SETUP
-#line 1282 "dhcp6_lexer.ll"
+#line 1352 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3799,9 +3945,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 127:
 YY_RULE_SETUP
-#line 1291 "dhcp6_lexer.ll"
+#line 1361 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3811,9 +3957,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 128:
 YY_RULE_SETUP
-#line 1300 "dhcp6_lexer.ll"
+#line 1370 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3823,9 +3969,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 129:
 YY_RULE_SETUP
-#line 1309 "dhcp6_lexer.ll"
+#line 1379 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3835,9 +3981,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 130:
 YY_RULE_SETUP
-#line 1318 "dhcp6_lexer.ll"
+#line 1388 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3847,9 +3993,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 131:
 YY_RULE_SETUP
-#line 1327 "dhcp6_lexer.ll"
+#line 1397 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3859,9 +4005,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 132:
 YY_RULE_SETUP
-#line 1336 "dhcp6_lexer.ll"
+#line 1406 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3871,9 +4017,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 133:
 YY_RULE_SETUP
-#line 1345 "dhcp6_lexer.ll"
+#line 1415 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3883,9 +4029,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 134:
 YY_RULE_SETUP
-#line 1354 "dhcp6_lexer.ll"
+#line 1424 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3896,9 +4042,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 135:
 YY_RULE_SETUP
-#line 1364 "dhcp6_lexer.ll"
+#line 1434 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3911,9 +4057,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 136:
 YY_RULE_SETUP
-#line 1376 "dhcp6_lexer.ll"
+#line 1446 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3927,9 +4073,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 137:
 YY_RULE_SETUP
-#line 1389 "dhcp6_lexer.ll"
+#line 1459 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3939,9 +4085,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 138:
 YY_RULE_SETUP
-#line 1398 "dhcp6_lexer.ll"
+#line 1468 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3951,9 +4097,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 139:
 YY_RULE_SETUP
-#line 1407 "dhcp6_lexer.ll"
+#line 1477 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3964,9 +4110,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 134:
+case 140:
 YY_RULE_SETUP
-#line 1417 "dhcp6_lexer.ll"
+#line 1487 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3977,9 +4123,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 135:
+case 141:
 YY_RULE_SETUP
-#line 1427 "dhcp6_lexer.ll"
+#line 1497 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3989,9 +4135,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 136:
+case 142:
 YY_RULE_SETUP
-#line 1436 "dhcp6_lexer.ll"
+#line 1506 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -4003,9 +4149,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 137:
+case 143:
 YY_RULE_SETUP
-#line 1447 "dhcp6_lexer.ll"
+#line 1517 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4016,9 +4162,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 138:
+case 144:
 YY_RULE_SETUP
-#line 1457 "dhcp6_lexer.ll"
+#line 1527 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4028,9 +4174,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 145:
 YY_RULE_SETUP
-#line 1466 "dhcp6_lexer.ll"
+#line 1536 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4041,9 +4187,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 146:
 YY_RULE_SETUP
-#line 1476 "dhcp6_lexer.ll"
+#line 1546 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4054,9 +4200,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 147:
 YY_RULE_SETUP
-#line 1486 "dhcp6_lexer.ll"
+#line 1556 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -4066,9 +4212,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 148:
 YY_RULE_SETUP
-#line 1495 "dhcp6_lexer.ll"
+#line 1565 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4078,9 +4224,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 149:
 YY_RULE_SETUP
-#line 1504 "dhcp6_lexer.ll"
+#line 1574 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4090,9 +4236,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 150:
 YY_RULE_SETUP
-#line 1513 "dhcp6_lexer.ll"
+#line 1583 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4102,9 +4248,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 145:
+case 151:
 YY_RULE_SETUP
-#line 1522 "dhcp6_lexer.ll"
+#line 1592 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4115,9 +4261,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 146:
+case 152:
 YY_RULE_SETUP
-#line 1532 "dhcp6_lexer.ll"
+#line 1602 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -4127,9 +4273,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 147:
+case 153:
 YY_RULE_SETUP
-#line 1541 "dhcp6_lexer.ll"
+#line 1611 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4139,9 +4285,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 148:
+case 154:
 YY_RULE_SETUP
-#line 1551 "dhcp6_lexer.ll"
+#line 1621 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4151,9 +4297,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 149:
+case 155:
 YY_RULE_SETUP
-#line 1560 "dhcp6_lexer.ll"
+#line 1630 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4163,9 +4309,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 150:
+case 156:
 YY_RULE_SETUP
-#line 1569 "dhcp6_lexer.ll"
+#line 1639 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4175,9 +4321,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 151:
+case 157:
 YY_RULE_SETUP
-#line 1578 "dhcp6_lexer.ll"
+#line 1648 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4187,9 +4333,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 152:
+case 158:
 YY_RULE_SETUP
-#line 1587 "dhcp6_lexer.ll"
+#line 1657 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4199,9 +4345,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 153:
+case 159:
 YY_RULE_SETUP
-#line 1596 "dhcp6_lexer.ll"
+#line 1666 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4211,9 +4357,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 154:
+case 160:
 YY_RULE_SETUP
-#line 1605 "dhcp6_lexer.ll"
+#line 1675 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4223,9 +4369,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 155:
+case 161:
 YY_RULE_SETUP
-#line 1614 "dhcp6_lexer.ll"
+#line 1684 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4235,9 +4381,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 156:
+case 162:
 YY_RULE_SETUP
-#line 1623 "dhcp6_lexer.ll"
+#line 1693 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4247,9 +4393,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 157:
+case 163:
 YY_RULE_SETUP
-#line 1632 "dhcp6_lexer.ll"
+#line 1702 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4259,9 +4405,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 158:
+case 164:
 YY_RULE_SETUP
-#line 1641 "dhcp6_lexer.ll"
+#line 1711 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4271,9 +4417,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 159:
+case 165:
 YY_RULE_SETUP
-#line 1650 "dhcp6_lexer.ll"
+#line 1720 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4283,9 +4429,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 160:
+case 166:
 YY_RULE_SETUP
-#line 1659 "dhcp6_lexer.ll"
+#line 1729 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4295,9 +4441,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 161:
+case 167:
 YY_RULE_SETUP
-#line 1668 "dhcp6_lexer.ll"
+#line 1738 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4307,9 +4453,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 162:
+case 168:
 YY_RULE_SETUP
-#line 1677 "dhcp6_lexer.ll"
+#line 1747 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4319,9 +4465,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 163:
+case 169:
 YY_RULE_SETUP
-#line 1686 "dhcp6_lexer.ll"
+#line 1756 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4331,9 +4477,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 164:
+case 170:
 YY_RULE_SETUP
-#line 1695 "dhcp6_lexer.ll"
+#line 1765 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4343,9 +4489,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 165:
+case 171:
 YY_RULE_SETUP
-#line 1704 "dhcp6_lexer.ll"
+#line 1774 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4355,9 +4501,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 166:
+case 172:
 YY_RULE_SETUP
-#line 1713 "dhcp6_lexer.ll"
+#line 1783 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4367,9 +4513,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 167:
+case 173:
 YY_RULE_SETUP
-#line 1722 "dhcp6_lexer.ll"
+#line 1792 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4379,9 +4525,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 168:
+case 174:
 YY_RULE_SETUP
-#line 1731 "dhcp6_lexer.ll"
+#line 1801 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4391,9 +4537,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 169:
+case 175:
 YY_RULE_SETUP
-#line 1740 "dhcp6_lexer.ll"
+#line 1810 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4403,9 +4549,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 170:
+case 176:
 YY_RULE_SETUP
-#line 1749 "dhcp6_lexer.ll"
+#line 1819 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4415,9 +4561,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 171:
+case 177:
 YY_RULE_SETUP
-#line 1758 "dhcp6_lexer.ll"
+#line 1828 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4427,9 +4573,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 172:
+case 178:
 YY_RULE_SETUP
-#line 1767 "dhcp6_lexer.ll"
+#line 1837 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4439,9 +4585,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 173:
+case 179:
 YY_RULE_SETUP
-#line 1776 "dhcp6_lexer.ll"
+#line 1846 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4451,9 +4597,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 174:
+case 180:
 YY_RULE_SETUP
-#line 1786 "dhcp6_lexer.ll"
+#line 1856 "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.
@@ -4553,65 +4699,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 175:
-/* rule 175 can match eol */
+case 181:
+/* rule 181 can match eol */
 YY_RULE_SETUP
-#line 1885 "dhcp6_lexer.ll"
+#line 1955 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 176:
-/* rule 176 can match eol */
+case 182:
+/* rule 182 can match eol */
 YY_RULE_SETUP
-#line 1890 "dhcp6_lexer.ll"
+#line 1960 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 177:
+case 183:
 YY_RULE_SETUP
-#line 1895 "dhcp6_lexer.ll"
+#line 1965 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 178:
+case 184:
 YY_RULE_SETUP
-#line 1900 "dhcp6_lexer.ll"
+#line 1970 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 179:
+case 185:
 YY_RULE_SETUP
-#line 1901 "dhcp6_lexer.ll"
+#line 1971 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 180:
+case 186:
 YY_RULE_SETUP
-#line 1902 "dhcp6_lexer.ll"
+#line 1972 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 181:
+case 187:
 YY_RULE_SETUP
-#line 1903 "dhcp6_lexer.ll"
+#line 1973 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 182:
+case 188:
 YY_RULE_SETUP
-#line 1904 "dhcp6_lexer.ll"
+#line 1974 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 183:
+case 189:
 YY_RULE_SETUP
-#line 1905 "dhcp6_lexer.ll"
+#line 1975 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 184:
+case 190:
 YY_RULE_SETUP
-#line 1907 "dhcp6_lexer.ll"
+#line 1977 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -4630,9 +4776,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 185:
+case 191:
 YY_RULE_SETUP
-#line 1925 "dhcp6_lexer.ll"
+#line 1995 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -4646,43 +4792,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 186:
+case 192:
 YY_RULE_SETUP
-#line 1938 "dhcp6_lexer.ll"
+#line 2008 "dhcp6_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 187:
+case 193:
 YY_RULE_SETUP
-#line 1943 "dhcp6_lexer.ll"
+#line 2013 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 188:
+case 194:
 YY_RULE_SETUP
-#line 1947 "dhcp6_lexer.ll"
+#line 2017 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 189:
+case 195:
 YY_RULE_SETUP
-#line 1949 "dhcp6_lexer.ll"
+#line 2019 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 190:
+case 196:
 YY_RULE_SETUP
-#line 1951 "dhcp6_lexer.ll"
+#line 2021 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 191:
+case 197:
 YY_RULE_SETUP
-#line 1953 "dhcp6_lexer.ll"
+#line 2023 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1955 "dhcp6_lexer.ll"
+#line 2025 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -4706,12 +4852,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 192:
+case 198:
 YY_RULE_SETUP
-#line 1978 "dhcp6_lexer.ll"
+#line 2048 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4714 "dhcp6_lexer.cc"
+#line 4861 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -5030,7 +5176,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1631 )
+                       if ( yy_current_state >= 1736 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5063,11 +5209,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1631 )
+               if ( yy_current_state >= 1736 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1630);
+       yy_is_jam = (yy_current_state == 1735);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5816,7 +5962,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1978 "dhcp6_lexer.ll"
+#line 2048 "dhcp6_lexer.ll"
 
 
 using namespace isc::dhcp;
index 1fcea99e1324a3ddd4b0f04fa7a064cde94a7b8e..5b474efd2593b63d8c30f1b7f012ddc1e13bca39 100644 (file)
@@ -310,6 +310,8 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
     case isc::dhcp::Parser6Context::DHCP_DDNS:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_SET(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-set", driver.loc_);
@@ -320,6 +322,8 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
     case isc::dhcp::Parser6Context::DHCP_DDNS:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT(driver.loc_);
     default:
         return isc::dhcp::Dhcp6Parser::make_STRING("hostname-char-replacement", driver.loc_);
@@ -892,6 +896,72 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"ddns-send-updates\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_);
+    }
+}
+
+\"ddns-override-no-update\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_);
+    }
+}
+
+\"ddns-override-client-update\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_);
+    }
+}
+
+\"ddns-replace-client-name\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_);
+    }
+}
+
+\"ddns-generated-prefix\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_);
+    }
+}
+
+\"ddns-qualifying-suffix\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+    case isc::dhcp::Parser6Context::SUBNET6:
+    case isc::dhcp::Parser6Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_);
+    }
+}
+
 \"subnet6\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
index c28c7d15ad84cb9c2cce0523c2f6641cf935db19..5dcfeeece4fbdec18470bb01cf90f3fe3f2cddfe 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 
 
 // Unqualified %code blocks.
-#line 34 "dhcp6_parser.yy"
+#line 34 "dhcp6_parser.yy" // lalr1.cc:438
 
 #include <dhcp6/parser_context.h>
 
-#line 51 "dhcp6_parser.cc"
+#line 51 "dhcp6_parser.cc" // lalr1.cc:438
 
 
 #ifndef YY_
@@ -88,7 +88,7 @@
         {                                                               \
           (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
         }                                                               \
-    while (false)
+    while (/*CONSTCOND*/ false)
 # endif
 
 
 #define YYERROR         goto yyerrorlab
 #define YYRECOVERING()  (!!yyerrstatus_)
 
-#line 14 "dhcp6_parser.yy"
+#line 14 "dhcp6_parser.yy" // lalr1.cc:513
 namespace isc { namespace dhcp {
-#line 146 "dhcp6_parser.cc"
-
+#line 146 "dhcp6_parser.cc" // lalr1.cc:513
 
   /* Return YYSTR after stripping away unnecessary quotes and
      backslashes, so that it's suitable for yyerror.  The heuristic is
@@ -155,7 +154,7 @@ namespace isc { namespace dhcp {
   {
     if (*yystr == '"')
       {
-        std::string yyr;
+        std::string yyr = "";
         char const *yyp = yystr;
 
         for (;;)
@@ -168,10 +167,7 @@ namespace isc { namespace dhcp {
             case '\\':
               if (*++yyp != '\\')
                 goto do_not_strip_quotes;
-              else
-                goto append;
-
-            append:
+              // Fall through.
             default:
               yyr += *yyp;
               break;
@@ -199,8 +195,6 @@ namespace isc { namespace dhcp {
   Dhcp6Parser::~Dhcp6Parser ()
   {}
 
-  Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
-  {}
 
   /*---------------.
   | Symbol types.  |
@@ -209,16 +203,16 @@ namespace isc { namespace dhcp {
 
 
   // by_state.
-  Dhcp6Parser::by_state::by_state () YY_NOEXCEPT
+  Dhcp6Parser::by_state::by_state ()
     : state (empty_state)
   {}
 
-  Dhcp6Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
-    : state (that.state)
+  Dhcp6Parser::by_state::by_state (const by_state& other)
+    : state (other.state)
   {}
 
   void
-  Dhcp6Parser::by_state::clear () YY_NOEXCEPT
+  Dhcp6Parser::by_state::clear ()
   {
     state = empty_state;
   }
@@ -230,12 +224,12 @@ namespace isc { namespace dhcp {
     that.clear ();
   }
 
-  Dhcp6Parser::by_state::by_state (state_type s) YY_NOEXCEPT
+  Dhcp6Parser::by_state::by_state (state_type s)
     : state (s)
   {}
 
   Dhcp6Parser::symbol_number_type
-  Dhcp6Parser::by_state::type_get () const YY_NOEXCEPT
+  Dhcp6Parser::by_state::type_get () const
   {
     if (state == empty_state)
       return empty_symbol;
@@ -251,29 +245,29 @@ namespace isc { namespace dhcp {
   {
     switch (that.type_get ())
     {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
         value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 186: // "boolean"
+      case 192: // "boolean"
         value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
         break;
 
-      case 185: // "floating point"
+      case 191: // "floating point"
         value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
         break;
 
-      case 184: // "integer"
+      case 190: // "integer"
         value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 183: // "constant string"
+      case 189: // "constant string"
         value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
         break;
 
@@ -281,7 +275,7 @@ namespace isc { namespace dhcp {
         break;
     }
 
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     // that is emptied.
     that.state = empty_state;
 #endif
@@ -292,29 +286,29 @@ namespace isc { namespace dhcp {
   {
     switch (that.type_get ())
     {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
         value.move< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 186: // "boolean"
+      case 192: // "boolean"
         value.move< bool > (YY_MOVE (that.value));
         break;
 
-      case 185: // "floating point"
+      case 191: // "floating point"
         value.move< double > (YY_MOVE (that.value));
         break;
 
-      case 184: // "integer"
+      case 190: // "integer"
         value.move< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 183: // "constant string"
+      case 189: // "constant string"
         value.move< std::string > (YY_MOVE (that.value));
         break;
 
@@ -326,36 +320,36 @@ namespace isc { namespace dhcp {
     that.type = empty_symbol;
   }
 
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
   Dhcp6Parser::stack_symbol_type&
   Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that)
   {
     state = that.state;
     switch (that.type_get ())
     {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 186: // "boolean"
+      case 192: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 185: // "floating point"
+      case 191: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 184: // "integer"
+      case 190: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 183: // "constant string"
+      case 189: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -387,83 +381,93 @@ namespace isc { namespace dhcp {
     std::ostream& yyoutput = yyo;
     YYUSE (yyoutput);
     symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
     // Avoid a (spurious) G++ 4.8 warning about "array subscript is
     // below array bounds".
     if (yysym.empty ())
       std::abort ();
-#endif
     yyo << (yytype < yyntokens_ ? "token" : "nterm")
         << ' ' << yytname_[yytype] << " ("
         << yysym.location << ": ";
     switch (yytype)
     {
-      case 183: // "constant string"
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < std::string > (); }
-#line 405 "dhcp6_parser.cc"
+            case 189: // "constant string"
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< std::string > (); }
+#line 398 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 184: // "integer"
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < int64_t > (); }
-#line 411 "dhcp6_parser.cc"
+      case 190: // "integer"
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< int64_t > (); }
+#line 405 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 185: // "floating point"
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < double > (); }
-#line 417 "dhcp6_parser.cc"
+      case 191: // "floating point"
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< double > (); }
+#line 412 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 186: // "boolean"
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < bool > (); }
-#line 423 "dhcp6_parser.cc"
+      case 192: // "boolean"
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< bool > (); }
+#line 419 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 204: // value
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 429 "dhcp6_parser.cc"
+      case 210: // value
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 426 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 208: // map_value
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 435 "dhcp6_parser.cc"
+      case 214: // map_value
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 433 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 269: // db_type
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 441 "dhcp6_parser.cc"
+      case 255: // ddns_replace_client_name_value
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 440 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 363: // hr_mode
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 447 "dhcp6_parser.cc"
+      case 289: // db_type
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 447 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 499: // duid_type
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 453 "dhcp6_parser.cc"
+      case 383: // hr_mode
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 454 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 534: // ncr_protocol_value
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 459 "dhcp6_parser.cc"
+      case 519: // duid_type
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 461 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
-      case 541: // replace_client_name_value
-#line 262 "dhcp6_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 465 "dhcp6_parser.cc"
+      case 554: // ncr_protocol_value
+
+#line 268 "dhcp6_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 468 "dhcp6_parser.cc" // lalr1.cc:672
         break;
 
+
       default:
         break;
     }
@@ -482,7 +486,7 @@ namespace isc { namespace dhcp {
   void
   Dhcp6Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
   {
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     yypush_ (m, stack_symbol_type (s, std::move (sym)));
 #else
     stack_symbol_type ss (s, sym);
@@ -586,22 +590,17 @@ namespace isc { namespace dhcp {
     yystack_.clear ();
     yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
 
-  /*-----------------------------------------------.
-  | yynewstate -- push a new symbol on the stack.  |
-  `-----------------------------------------------*/
+    // A new symbol was pushed on the stack.
   yynewstate:
     YYCDEBUG << "Entering state " << yystack_[0].state << '\n';
 
     // Accept?
     if (yystack_[0].state == yyfinal_)
-      YYACCEPT;
+      goto yyacceptlab;
 
     goto yybackup;
 
-
-  /*-----------.
-  | yybackup.  |
-  `-----------*/
+    // Backup.
   yybackup:
     // Try to take a decision without lookahead.
     yyn = yypact_[yystack_[0].state];
@@ -622,7 +621,6 @@ namespace isc { namespace dhcp {
 #if YY_EXCEPTIONS
         catch (const syntax_error& yyexc)
           {
-            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
             error (yyexc);
             goto yyerrlab1;
           }
@@ -654,7 +652,6 @@ namespace isc { namespace dhcp {
     yypush_ ("Shifting", yyn, YY_MOVE (yyla));
     goto yynewstate;
 
-
   /*-----------------------------------------------------------.
   | yydefault -- do the default action for the current state.  |
   `-----------------------------------------------------------*/
@@ -664,9 +661,8 @@ namespace isc { namespace dhcp {
       goto yyerrlab;
     goto yyreduce;
 
-
   /*-----------------------------.
-  | yyreduce -- do a reduction.  |
+  | yyreduce -- Do a reduction.  |
   `-----------------------------*/
   yyreduce:
     yylen = yyr2_[yyn];
@@ -678,29 +674,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
         yylhs.value.emplace< ElementPtr > ();
         break;
 
-      case 186: // "boolean"
+      case 192: // "boolean"
         yylhs.value.emplace< bool > ();
         break;
 
-      case 185: // "floating point"
+      case 191: // "floating point"
         yylhs.value.emplace< double > ();
         break;
 
-      case 184: // "integer"
+      case 190: // "integer"
         yylhs.value.emplace< int64_t > ();
         break;
 
-      case 183: // "constant string"
+      case 189: // "constant string"
         yylhs.value.emplace< std::string > ();
         break;
 
@@ -711,8 +707,8 @@ namespace isc { namespace dhcp {
 
       // Default location.
       {
-        stack_type::slice range (yystack_, yylen);
-        YYLLOC_DEFAULT (yylhs.location, range, yylen);
+        slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
+        YYLLOC_DEFAULT (yylhs.location, slice, yylen);
         yyerror_range[1].location = yylhs.location;
       }
 
@@ -725,286 +721,286 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 271 "dhcp6_parser.yy"
+#line 277 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 731 "dhcp6_parser.cc"
+#line 727 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 4:
-#line 272 "dhcp6_parser.yy"
+#line 278 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG; }
-#line 737 "dhcp6_parser.cc"
+#line 733 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 6:
-#line 273 "dhcp6_parser.yy"
+#line 279 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP6; }
-#line 743 "dhcp6_parser.cc"
+#line 739 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 8:
-#line 274 "dhcp6_parser.yy"
+#line 280 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 749 "dhcp6_parser.cc"
+#line 745 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 10:
-#line 275 "dhcp6_parser.yy"
+#line 281 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.SUBNET6; }
-#line 755 "dhcp6_parser.cc"
+#line 751 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 12:
-#line 276 "dhcp6_parser.yy"
+#line 282 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.POOLS; }
-#line 761 "dhcp6_parser.cc"
+#line 757 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 14:
-#line 277 "dhcp6_parser.yy"
+#line 283 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.PD_POOLS; }
-#line 767 "dhcp6_parser.cc"
+#line 763 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 16:
-#line 278 "dhcp6_parser.yy"
+#line 284 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 773 "dhcp6_parser.cc"
+#line 769 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 18:
-#line 279 "dhcp6_parser.yy"
+#line 285 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP6; }
-#line 779 "dhcp6_parser.cc"
+#line 775 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 20:
-#line 280 "dhcp6_parser.yy"
+#line 286 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 785 "dhcp6_parser.cc"
+#line 781 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 22:
-#line 281 "dhcp6_parser.yy"
+#line 287 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 791 "dhcp6_parser.cc"
+#line 787 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 24:
-#line 282 "dhcp6_parser.yy"
+#line 288 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 797 "dhcp6_parser.cc"
+#line 793 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 26:
-#line 283 "dhcp6_parser.yy"
+#line 289 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 803 "dhcp6_parser.cc"
+#line 799 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 28:
-#line 284 "dhcp6_parser.yy"
+#line 290 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.LOGGING; }
-#line 809 "dhcp6_parser.cc"
+#line 805 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 30:
-#line 285 "dhcp6_parser.yy"
+#line 291 "dhcp6_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 815 "dhcp6_parser.cc"
+#line 811 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 32:
-#line 293 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 821 "dhcp6_parser.cc"
+#line 299 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 817 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 33:
-#line 294 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 827 "dhcp6_parser.cc"
+#line 300 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
+#line 823 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 34:
-#line 295 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 833 "dhcp6_parser.cc"
+#line 301 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
+#line 829 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 35:
-#line 296 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 839 "dhcp6_parser.cc"
+#line 302 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
+#line 835 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 36:
-#line 297 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 845 "dhcp6_parser.cc"
+#line 303 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
+#line 841 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 37:
-#line 298 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 851 "dhcp6_parser.cc"
+#line 304 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 847 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 38:
-#line 299 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 857 "dhcp6_parser.cc"
+#line 305 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 853 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 39:
-#line 302 "dhcp6_parser.yy"
+#line 308 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Push back the JSON value on the stack
-    ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 866 "dhcp6_parser.cc"
+#line 862 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 40:
-#line 307 "dhcp6_parser.yy"
+#line 313 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 877 "dhcp6_parser.cc"
+#line 873 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 41:
-#line 312 "dhcp6_parser.yy"
+#line 318 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 887 "dhcp6_parser.cc"
+#line 883 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 42:
-#line 318 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 893 "dhcp6_parser.cc"
+#line 324 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 889 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 45:
-#line 325 "dhcp6_parser.yy"
+#line 331 "dhcp6_parser.yy" // lalr1.cc:907
     {
                   // map containing a single entry
-                  ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 902 "dhcp6_parser.cc"
+#line 898 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 46:
-#line 329 "dhcp6_parser.yy"
+#line 335 "dhcp6_parser.yy" // lalr1.cc:907
     {
                   // 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 > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 912 "dhcp6_parser.cc"
+#line 908 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 47:
-#line 336 "dhcp6_parser.yy"
+#line 342 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 921 "dhcp6_parser.cc"
+#line 917 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 48:
-#line 339 "dhcp6_parser.yy"
+#line 345 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 929 "dhcp6_parser.cc"
+#line 925 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 51:
-#line 347 "dhcp6_parser.yy"
+#line 353 "dhcp6_parser.yy" // lalr1.cc:907
     {
                   // List consisting of a single element.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 938 "dhcp6_parser.cc"
+#line 934 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 52:
-#line 351 "dhcp6_parser.yy"
+#line 357 "dhcp6_parser.yy" // lalr1.cc:907
     {
                   // List ending with , and a value.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 947 "dhcp6_parser.cc"
+#line 943 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 53:
-#line 358 "dhcp6_parser.yy"
+#line 364 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // List parsing about to start
 }
-#line 955 "dhcp6_parser.cc"
+#line 951 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 54:
-#line 360 "dhcp6_parser.yy"
+#line 366 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 964 "dhcp6_parser.cc"
+#line 960 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 57:
-#line 369 "dhcp6_parser.yy"
+#line 375 "dhcp6_parser.yy" // lalr1.cc:907
     {
-                          ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+                          ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 973 "dhcp6_parser.cc"
+#line 969 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 58:
-#line 373 "dhcp6_parser.yy"
+#line 379 "dhcp6_parser.yy" // lalr1.cc:907
     {
-                          ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+                          ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
                           }
-#line 982 "dhcp6_parser.cc"
+#line 978 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 59:
-#line 384 "dhcp6_parser.yy"
+#line 390 "dhcp6_parser.yy" // lalr1.cc:907
     {
     const std::string& where = ctx.contextName();
-    const std::string& keyword = yystack_[1].value.as < std::string > ();
+    const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 993 "dhcp6_parser.cc"
+#line 989 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 60:
-#line 394 "dhcp6_parser.yy"
+#line 400 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 1004 "dhcp6_parser.cc"
+#line 1000 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 61:
-#line 399 "dhcp6_parser.yy"
+#line 405 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1013,11 +1009,11 @@ namespace isc { namespace dhcp {
     // Dhcp6 is required
     ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 1017 "dhcp6_parser.cc"
+#line 1013 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 70:
-#line 422 "dhcp6_parser.yy"
+#line 428 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1026,965 +1022,1122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 1030 "dhcp6_parser.cc"
+#line 1026 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 71:
-#line 429 "dhcp6_parser.yy"
+#line 435 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No global parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1040 "dhcp6_parser.cc"
+#line 1036 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 72:
-#line 437 "dhcp6_parser.yy"
+#line 443 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1050 "dhcp6_parser.cc"
+#line 1046 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
   case 73:
-#line 441 "dhcp6_parser.yy"
+#line 447 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No global parameter is required
     // parsing completed
 }
-#line 1059 "dhcp6_parser.cc"
+#line 1055 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 119:
-#line 497 "dhcp6_parser.yy"
+  case 125:
+#line 509 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1067 "dhcp6_parser.cc"
+#line 1063 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 120:
-#line 499 "dhcp6_parser.yy"
+  case 126:
+#line 511 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr datadir(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data-directory", datadir);
     ctx.leave();
 }
-#line 1077 "dhcp6_parser.cc"
+#line 1073 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 121:
-#line 505 "dhcp6_parser.yy"
+  case 127:
+#line 517 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 1086 "dhcp6_parser.cc"
+#line 1082 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 122:
-#line 510 "dhcp6_parser.yy"
+  case 128:
+#line 522 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-preferred-lifetime", prf);
 }
-#line 1095 "dhcp6_parser.cc"
+#line 1091 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 123:
-#line 515 "dhcp6_parser.yy"
+  case 129:
+#line 527 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-preferred-lifetime", prf);
 }
-#line 1104 "dhcp6_parser.cc"
+#line 1100 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 124:
-#line 520 "dhcp6_parser.yy"
+  case 130:
+#line 532 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 1113 "dhcp6_parser.cc"
+#line 1109 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 125:
-#line 525 "dhcp6_parser.yy"
+  case 131:
+#line 537 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("min-valid-lifetime", prf);
 }
-#line 1122 "dhcp6_parser.cc"
+#line 1118 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 126:
-#line 530 "dhcp6_parser.yy"
+  case 132:
+#line 542 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-valid-lifetime", prf);
 }
-#line 1131 "dhcp6_parser.cc"
+#line 1127 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 127:
-#line 535 "dhcp6_parser.yy"
+  case 133:
+#line 547 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 1140 "dhcp6_parser.cc"
+#line 1136 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 128:
-#line 540 "dhcp6_parser.yy"
+  case 134:
+#line 552 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 1149 "dhcp6_parser.cc"
+#line 1145 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 129:
-#line 545 "dhcp6_parser.yy"
+  case 135:
+#line 557 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr ctt(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("calculate-tee-times", ctt);
 }
-#line 1158 "dhcp6_parser.cc"
+#line 1154 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 130:
-#line 550 "dhcp6_parser.yy"
+  case 136:
+#line 562 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr t1(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t1-percent", t1);
 }
-#line 1167 "dhcp6_parser.cc"
+#line 1163 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 131:
-#line 555 "dhcp6_parser.yy"
+  case 137:
+#line 567 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr t2(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("t2-percent", t2);
 }
-#line 1176 "dhcp6_parser.cc"
+#line 1172 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 132:
-#line 560 "dhcp6_parser.yy"
+  case 138:
+#line 572 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 1185 "dhcp6_parser.cc"
+#line 1181 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 133:
-#line 565 "dhcp6_parser.yy"
+  case 139:
+#line 577 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-send-updates", b);
+}
+#line 1190 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 140:
+#line 582 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-override-no-update", b);
+}
+#line 1199 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 141:
+#line 587 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-override-client-update", b);
+}
+#line 1208 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 142:
+#line 592 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+}
+#line 1216 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 143:
+#line 594 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as< ElementPtr > ());
+    ctx.leave();
+}
+#line 1225 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 144:
+#line 600 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1233 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 145:
+#line 603 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1241 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 146:
+#line 606 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1249 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 147:
+#line 609 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
+      }
+#line 1257 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 148:
+#line 612 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+      error(yystack_[0].location, "boolean values for the replace-client-name are "
+                "no longer supported");
+      }
+#line 1266 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 149:
+#line 618 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1193 "dhcp6_parser.cc"
+#line 1274 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 134:
-#line 567 "dhcp6_parser.yy"
+  case 150:
+#line 620 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-generated-prefix", s);
+    ctx.leave();
+}
+#line 1284 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 151:
+#line 626 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1292 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 152:
+#line 628 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("ddns-qualifying-suffix", s);
+    ctx.leave();
+}
+#line 1302 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 153:
+#line 634 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1310 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 154:
+#line 636 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+}
+#line 1320 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 155:
+#line 642 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1328 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 156:
+#line 644 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+}
+#line 1338 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 157:
+#line 650 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1346 "dhcp6_parser.cc" // lalr1.cc:907
+    break;
+
+  case 158:
+#line 652 "dhcp6_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
     ctx.leave();
 }
-#line 1203 "dhcp6_parser.cc"
+#line 1356 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 135:
-#line 573 "dhcp6_parser.yy"
+  case 159:
+#line 658 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1214 "dhcp6_parser.cc"
+#line 1367 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 136:
-#line 578 "dhcp6_parser.yy"
+  case 160:
+#line 663 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1224 "dhcp6_parser.cc"
+#line 1377 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 137:
-#line 584 "dhcp6_parser.yy"
+  case 161:
+#line 669 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1234 "dhcp6_parser.cc"
+#line 1387 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 138:
-#line 588 "dhcp6_parser.yy"
+  case 162:
+#line 673 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1243 "dhcp6_parser.cc"
+#line 1396 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 146:
-#line 604 "dhcp6_parser.yy"
+  case 170:
+#line 689 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1254 "dhcp6_parser.cc"
+#line 1407 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 147:
-#line 609 "dhcp6_parser.yy"
+  case 171:
+#line 694 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1263 "dhcp6_parser.cc"
+#line 1416 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 148:
-#line 614 "dhcp6_parser.yy"
+  case 172:
+#line 699 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1272 "dhcp6_parser.cc"
+#line 1425 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 149:
-#line 620 "dhcp6_parser.yy"
+  case 173:
+#line 705 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1283 "dhcp6_parser.cc"
+#line 1436 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 150:
-#line 625 "dhcp6_parser.yy"
+  case 174:
+#line 710 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 1294 "dhcp6_parser.cc"
+#line 1447 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 151:
-#line 632 "dhcp6_parser.yy"
+  case 175:
+#line 717 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1305 "dhcp6_parser.cc"
+#line 1458 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 152:
-#line 637 "dhcp6_parser.yy"
+  case 176:
+#line 722 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 1316 "dhcp6_parser.cc"
+#line 1469 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 153:
-#line 644 "dhcp6_parser.yy"
+  case 177:
+#line 729 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1327 "dhcp6_parser.cc"
+#line 1480 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 154:
-#line 649 "dhcp6_parser.yy"
+  case 178:
+#line 734 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1336 "dhcp6_parser.cc"
+#line 1489 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 159:
-#line 662 "dhcp6_parser.yy"
+  case 183:
+#line 747 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1346 "dhcp6_parser.cc"
+#line 1499 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 160:
-#line 666 "dhcp6_parser.yy"
+  case 184:
+#line 751 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1356 "dhcp6_parser.cc"
+#line 1509 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 184:
-#line 699 "dhcp6_parser.yy"
+  case 208:
+#line 784 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1364 "dhcp6_parser.cc"
+#line 1517 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 185:
-#line 701 "dhcp6_parser.yy"
+  case 209:
+#line 786 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1373 "dhcp6_parser.cc"
+#line 1526 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 186:
-#line 706 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1379 "dhcp6_parser.cc"
+  case 210:
+#line 791 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
+#line 1532 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 187:
-#line 707 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1385 "dhcp6_parser.cc"
+  case 211:
+#line 792 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
+#line 1538 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 188:
-#line 708 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1391 "dhcp6_parser.cc"
+  case 212:
+#line 793 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
+#line 1544 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 189:
-#line 709 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1397 "dhcp6_parser.cc"
+  case 213:
+#line 794 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
+#line 1550 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 190:
-#line 712 "dhcp6_parser.yy"
+  case 214:
+#line 797 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1405 "dhcp6_parser.cc"
+#line 1558 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 191:
-#line 714 "dhcp6_parser.yy"
+  case 215:
+#line 799 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1415 "dhcp6_parser.cc"
+#line 1568 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 192:
-#line 720 "dhcp6_parser.yy"
+  case 216:
+#line 805 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1423 "dhcp6_parser.cc"
+#line 1576 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 193:
-#line 722 "dhcp6_parser.yy"
+  case 217:
+#line 807 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1433 "dhcp6_parser.cc"
+#line 1586 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 194:
-#line 728 "dhcp6_parser.yy"
+  case 218:
+#line 813 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1441 "dhcp6_parser.cc"
+#line 1594 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 195:
-#line 730 "dhcp6_parser.yy"
+  case 219:
+#line 815 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1451 "dhcp6_parser.cc"
+#line 1604 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 196:
-#line 736 "dhcp6_parser.yy"
+  case 220:
+#line 821 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 1460 "dhcp6_parser.cc"
+#line 1613 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 197:
-#line 741 "dhcp6_parser.yy"
+  case 221:
+#line 826 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1468 "dhcp6_parser.cc"
+#line 1621 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 198:
-#line 743 "dhcp6_parser.yy"
+  case 222:
+#line 828 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1478 "dhcp6_parser.cc"
+#line 1631 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 199:
-#line 749 "dhcp6_parser.yy"
+  case 223:
+#line 834 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1487 "dhcp6_parser.cc"
+#line 1640 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 200:
-#line 754 "dhcp6_parser.yy"
+  case 224:
+#line 839 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1496 "dhcp6_parser.cc"
+#line 1649 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 201:
-#line 759 "dhcp6_parser.yy"
+  case 225:
+#line 844 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1505 "dhcp6_parser.cc"
+#line 1658 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 202:
-#line 764 "dhcp6_parser.yy"
+  case 226:
+#line 849 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1514 "dhcp6_parser.cc"
+#line 1667 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 203:
-#line 769 "dhcp6_parser.yy"
+  case 227:
+#line 854 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 1523 "dhcp6_parser.cc"
+#line 1676 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 204:
-#line 774 "dhcp6_parser.yy"
+  case 228:
+#line 859 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-row-errors", n);
 }
-#line 1532 "dhcp6_parser.cc"
+#line 1685 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 205:
-#line 779 "dhcp6_parser.yy"
+  case 229:
+#line 864 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("request-timeout", n);
 }
-#line 1541 "dhcp6_parser.cc"
+#line 1694 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 206:
-#line 784 "dhcp6_parser.yy"
+  case 230:
+#line 869 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-keepalive", n);
 }
-#line 1550 "dhcp6_parser.cc"
+#line 1703 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 207:
-#line 789 "dhcp6_parser.yy"
+  case 231:
+#line 874 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
 }
-#line 1559 "dhcp6_parser.cc"
+#line 1712 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 208:
-#line 794 "dhcp6_parser.yy"
+  case 232:
+#line 879 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1567 "dhcp6_parser.cc"
+#line 1720 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 209:
-#line 796 "dhcp6_parser.yy"
+  case 233:
+#line 881 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr cp(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 1577 "dhcp6_parser.cc"
+#line 1730 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 210:
-#line 802 "dhcp6_parser.yy"
+  case 234:
+#line 887 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 1586 "dhcp6_parser.cc"
+#line 1739 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 211:
-#line 807 "dhcp6_parser.yy"
+  case 235:
+#line 892 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1594 "dhcp6_parser.cc"
+#line 1747 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 212:
-#line 809 "dhcp6_parser.yy"
+  case 236:
+#line 894 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr ks(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1604 "dhcp6_parser.cc"
+#line 1757 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 213:
-#line 815 "dhcp6_parser.yy"
+  case 237:
+#line 900 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1612 "dhcp6_parser.cc"
+#line 1765 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 214:
-#line 817 "dhcp6_parser.yy"
+  case 238:
+#line 902 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("consistency", c);
     ctx.leave();
 }
-#line 1622 "dhcp6_parser.cc"
+#line 1775 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 215:
-#line 823 "dhcp6_parser.yy"
+  case 239:
+#line 908 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1630 "dhcp6_parser.cc"
+#line 1783 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 216:
-#line 825 "dhcp6_parser.yy"
+  case 240:
+#line 910 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("serial-consistency", c);
     ctx.leave();
 }
-#line 1640 "dhcp6_parser.cc"
+#line 1793 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 217:
-#line 831 "dhcp6_parser.yy"
+  case 241:
+#line 916 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sanity-checks", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 1651 "dhcp6_parser.cc"
+#line 1804 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 218:
-#line 836 "dhcp6_parser.yy"
+  case 242:
+#line 921 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1660 "dhcp6_parser.cc"
+#line 1813 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 222:
-#line 846 "dhcp6_parser.yy"
+  case 246:
+#line 931 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1668 "dhcp6_parser.cc"
+#line 1821 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 223:
-#line 848 "dhcp6_parser.yy"
+  case 247:
+#line 933 "dhcp6_parser.yy" // lalr1.cc:907
     {
 
-    if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
-         (string(yystack_[0].value.as < std::string > ()) == "warn") ||
-         (string(yystack_[0].value.as < std::string > ()) == "fix") ||
-         (string(yystack_[0].value.as < std::string > ()) == "fix-del") ||
-         (string(yystack_[0].value.as < std::string > ()) == "del")) {
-        ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
+         (string(yystack_[0].value.as< std::string > ()) == "warn") ||
+         (string(yystack_[0].value.as< std::string > ()) == "fix") ||
+         (string(yystack_[0].value.as< std::string > ()) == "fix-del") ||
+         (string(yystack_[0].value.as< std::string > ()) == "del")) {
+        ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
         ctx.stack_.back()->set("lease-checks", user);
         ctx.leave();
     } else {
-        error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) +
+        error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as< std::string > ()) +
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1688 "dhcp6_parser.cc"
+#line 1841 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 224:
-#line 864 "dhcp6_parser.yy"
+  case 248:
+#line 949 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1699 "dhcp6_parser.cc"
+#line 1852 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 225:
-#line 869 "dhcp6_parser.yy"
+  case 249:
+#line 954 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1708 "dhcp6_parser.cc"
+#line 1861 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 230:
-#line 882 "dhcp6_parser.yy"
+  case 254:
+#line 967 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1717 "dhcp6_parser.cc"
+#line 1870 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 231:
-#line 887 "dhcp6_parser.yy"
+  case 255:
+#line 972 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1726 "dhcp6_parser.cc"
+#line 1879 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 232:
-#line 892 "dhcp6_parser.yy"
+  case 256:
+#line 977 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1737 "dhcp6_parser.cc"
+#line 1890 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 233:
-#line 897 "dhcp6_parser.yy"
+  case 257:
+#line 982 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1746 "dhcp6_parser.cc"
+#line 1899 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 239:
-#line 911 "dhcp6_parser.yy"
+  case 263:
+#line 996 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1755 "dhcp6_parser.cc"
+#line 1908 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 240:
-#line 916 "dhcp6_parser.yy"
+  case 264:
+#line 1001 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1764 "dhcp6_parser.cc"
+#line 1917 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 241:
-#line 923 "dhcp6_parser.yy"
+  case 265:
+#line 1008 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1775 "dhcp6_parser.cc"
+#line 1928 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 242:
-#line 928 "dhcp6_parser.yy"
+  case 266:
+#line 1013 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1784 "dhcp6_parser.cc"
+#line 1937 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 243:
-#line 933 "dhcp6_parser.yy"
+  case 267:
+#line 1018 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1795 "dhcp6_parser.cc"
+#line 1948 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 244:
-#line 938 "dhcp6_parser.yy"
+  case 268:
+#line 1023 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1804 "dhcp6_parser.cc"
+#line 1957 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 249:
-#line 951 "dhcp6_parser.yy"
+  case 273:
+#line 1036 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1814 "dhcp6_parser.cc"
+#line 1967 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 250:
-#line 955 "dhcp6_parser.yy"
+  case 274:
+#line 1040 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1824 "dhcp6_parser.cc"
+#line 1977 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 251:
-#line 961 "dhcp6_parser.yy"
+  case 275:
+#line 1046 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1834 "dhcp6_parser.cc"
+#line 1987 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 252:
-#line 965 "dhcp6_parser.yy"
+  case 276:
+#line 1050 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1844 "dhcp6_parser.cc"
+#line 1997 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 258:
-#line 980 "dhcp6_parser.yy"
+  case 282:
+#line 1065 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1852 "dhcp6_parser.cc"
+#line 2005 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 259:
-#line 982 "dhcp6_parser.yy"
+  case 283:
+#line 1067 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1862 "dhcp6_parser.cc"
+#line 2015 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 260:
-#line 988 "dhcp6_parser.yy"
+  case 284:
+#line 1073 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1870 "dhcp6_parser.cc"
+#line 2023 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 261:
-#line 990 "dhcp6_parser.yy"
+  case 285:
+#line 1075 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1879 "dhcp6_parser.cc"
+#line 2032 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 262:
-#line 996 "dhcp6_parser.yy"
+  case 286:
+#line 1081 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1890 "dhcp6_parser.cc"
+#line 2043 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 263:
-#line 1001 "dhcp6_parser.yy"
+  case 287:
+#line 1086 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1900 "dhcp6_parser.cc"
+#line 2053 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 272:
-#line 1019 "dhcp6_parser.yy"
+  case 296:
+#line 1104 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    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 1909 "dhcp6_parser.cc"
+#line 2062 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 273:
-#line 1024 "dhcp6_parser.yy"
+  case 297:
+#line 1109 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    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 1918 "dhcp6_parser.cc"
+#line 2071 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 274:
-#line 1029 "dhcp6_parser.yy"
+  case 298:
+#line 1114 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1927 "dhcp6_parser.cc"
+#line 2080 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 275:
-#line 1034 "dhcp6_parser.yy"
+  case 299:
+#line 1119 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1936 "dhcp6_parser.cc"
+#line 2089 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 276:
-#line 1039 "dhcp6_parser.yy"
+  case 300:
+#line 1124 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1945 "dhcp6_parser.cc"
+#line 2098 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 277:
-#line 1044 "dhcp6_parser.yy"
+  case 301:
+#line 1129 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1954 "dhcp6_parser.cc"
+#line 2107 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 278:
-#line 1052 "dhcp6_parser.yy"
+  case 302:
+#line 1137 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 1965 "dhcp6_parser.cc"
+#line 2118 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 279:
-#line 1057 "dhcp6_parser.yy"
+  case 303:
+#line 1142 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1974 "dhcp6_parser.cc"
+#line 2127 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 284:
-#line 1077 "dhcp6_parser.yy"
+  case 308:
+#line 1162 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1984 "dhcp6_parser.cc"
+#line 2137 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 285:
-#line 1081 "dhcp6_parser.yy"
+  case 309:
+#line 1166 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2006,267 +2159,267 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2010 "dhcp6_parser.cc"
+#line 2163 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 286:
-#line 1103 "dhcp6_parser.yy"
+  case 310:
+#line 1188 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2020 "dhcp6_parser.cc"
+#line 2173 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 287:
-#line 1107 "dhcp6_parser.yy"
+  case 311:
+#line 1192 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2030 "dhcp6_parser.cc"
+#line 2183 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 317:
-#line 1148 "dhcp6_parser.yy"
+  case 349:
+#line 1241 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2038 "dhcp6_parser.cc"
+#line 2191 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 318:
-#line 1150 "dhcp6_parser.yy"
+  case 350:
+#line 1243 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2048 "dhcp6_parser.cc"
+#line 2201 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 319:
-#line 1156 "dhcp6_parser.yy"
+  case 351:
+#line 1249 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2056 "dhcp6_parser.cc"
+#line 2209 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 320:
-#line 1158 "dhcp6_parser.yy"
+  case 352:
+#line 1251 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2066 "dhcp6_parser.cc"
+#line 2219 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 321:
-#line 1164 "dhcp6_parser.yy"
+  case 353:
+#line 1257 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2074 "dhcp6_parser.cc"
+#line 2227 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 322:
-#line 1166 "dhcp6_parser.yy"
+  case 354:
+#line 1259 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2084 "dhcp6_parser.cc"
+#line 2237 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 323:
-#line 1172 "dhcp6_parser.yy"
+  case 355:
+#line 1265 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2092 "dhcp6_parser.cc"
+#line 2245 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 324:
-#line 1174 "dhcp6_parser.yy"
+  case 356:
+#line 1267 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2102 "dhcp6_parser.cc"
+#line 2255 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 325:
-#line 1180 "dhcp6_parser.yy"
+  case 357:
+#line 1273 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2113 "dhcp6_parser.cc"
+#line 2266 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 326:
-#line 1185 "dhcp6_parser.yy"
+  case 358:
+#line 1278 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2122 "dhcp6_parser.cc"
+#line 2275 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 327:
-#line 1190 "dhcp6_parser.yy"
+  case 359:
+#line 1283 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2130 "dhcp6_parser.cc"
+#line 2283 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 328:
-#line 1192 "dhcp6_parser.yy"
+  case 360:
+#line 1285 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2139 "dhcp6_parser.cc"
+#line 2292 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 329:
-#line 1197 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2145 "dhcp6_parser.cc"
+  case 361:
+#line 1290 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
+#line 2298 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 330:
-#line 1198 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2151 "dhcp6_parser.cc"
+  case 362:
+#line 1291 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
+#line 2304 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 331:
-#line 1199 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2157 "dhcp6_parser.cc"
+  case 363:
+#line 1292 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
+#line 2310 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 332:
-#line 1200 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2163 "dhcp6_parser.cc"
+  case 364:
+#line 1293 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
+#line 2316 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 333:
-#line 1203 "dhcp6_parser.yy"
+  case 365:
+#line 1296 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 2172 "dhcp6_parser.cc"
+#line 2325 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 334:
-#line 1208 "dhcp6_parser.yy"
+  case 366:
+#line 1301 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 2181 "dhcp6_parser.cc"
+#line 2334 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 335:
-#line 1216 "dhcp6_parser.yy"
+  case 367:
+#line 1309 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2192 "dhcp6_parser.cc"
+#line 2345 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 336:
-#line 1221 "dhcp6_parser.yy"
+  case 368:
+#line 1314 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2201 "dhcp6_parser.cc"
+#line 2354 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 341:
-#line 1236 "dhcp6_parser.yy"
+  case 373:
+#line 1329 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2211 "dhcp6_parser.cc"
+#line 2364 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 342:
-#line 1240 "dhcp6_parser.yy"
+  case 374:
+#line 1333 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 2219 "dhcp6_parser.cc"
+#line 2372 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 369:
-#line 1278 "dhcp6_parser.yy"
+  case 409:
+#line 1379 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2230 "dhcp6_parser.cc"
+#line 2383 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 370:
-#line 1283 "dhcp6_parser.yy"
+  case 410:
+#line 1384 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2239 "dhcp6_parser.cc"
+#line 2392 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 371:
-#line 1291 "dhcp6_parser.yy"
+  case 411:
+#line 1392 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2248 "dhcp6_parser.cc"
+#line 2401 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 372:
-#line 1294 "dhcp6_parser.yy"
+  case 412:
+#line 1395 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
-#line 2256 "dhcp6_parser.cc"
+#line 2409 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 377:
-#line 1310 "dhcp6_parser.yy"
+  case 417:
+#line 1411 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2266 "dhcp6_parser.cc"
+#line 2419 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 378:
-#line 1314 "dhcp6_parser.yy"
+  case 418:
+#line 1415 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2274,21 +2427,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2278 "dhcp6_parser.cc"
+#line 2431 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 379:
-#line 1325 "dhcp6_parser.yy"
+  case 419:
+#line 1426 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2288 "dhcp6_parser.cc"
+#line 2441 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 380:
-#line 1329 "dhcp6_parser.yy"
+  case 420:
+#line 1430 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2296,283 +2449,283 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2300 "dhcp6_parser.cc"
+#line 2453 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 396:
-#line 1361 "dhcp6_parser.yy"
+  case 436:
+#line 1462 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 2309 "dhcp6_parser.cc"
+#line 2462 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 398:
-#line 1368 "dhcp6_parser.yy"
+  case 438:
+#line 1469 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2317 "dhcp6_parser.cc"
+#line 2470 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 399:
-#line 1370 "dhcp6_parser.yy"
+  case 439:
+#line 1471 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 2327 "dhcp6_parser.cc"
+#line 2480 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 400:
-#line 1376 "dhcp6_parser.yy"
+  case 440:
+#line 1477 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2335 "dhcp6_parser.cc"
+#line 2488 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 401:
-#line 1378 "dhcp6_parser.yy"
+  case 441:
+#line 1479 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2345 "dhcp6_parser.cc"
+#line 2498 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 402:
-#line 1384 "dhcp6_parser.yy"
+  case 442:
+#line 1485 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2353 "dhcp6_parser.cc"
+#line 2506 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 403:
-#line 1386 "dhcp6_parser.yy"
+  case 443:
+#line 1487 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 2363 "dhcp6_parser.cc"
+#line 2516 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 405:
-#line 1394 "dhcp6_parser.yy"
+  case 445:
+#line 1495 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2371 "dhcp6_parser.cc"
+#line 2524 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 406:
-#line 1396 "dhcp6_parser.yy"
+  case 446:
+#line 1497 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 2381 "dhcp6_parser.cc"
+#line 2534 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 407:
-#line 1402 "dhcp6_parser.yy"
+  case 447:
+#line 1503 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 2390 "dhcp6_parser.cc"
+#line 2543 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 408:
-#line 1411 "dhcp6_parser.yy"
+  case 448:
+#line 1512 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2401 "dhcp6_parser.cc"
+#line 2554 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 409:
-#line 1416 "dhcp6_parser.yy"
+  case 449:
+#line 1517 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2410 "dhcp6_parser.cc"
+#line 2563 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 414:
-#line 1435 "dhcp6_parser.yy"
+  case 454:
+#line 1536 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2420 "dhcp6_parser.cc"
+#line 2573 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 415:
-#line 1439 "dhcp6_parser.yy"
+  case 455:
+#line 1540 "dhcp6_parser.yy" // lalr1.cc:907
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2429 "dhcp6_parser.cc"
+#line 2582 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 416:
-#line 1447 "dhcp6_parser.yy"
+  case 456:
+#line 1548 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2439 "dhcp6_parser.cc"
+#line 2592 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 417:
-#line 1451 "dhcp6_parser.yy"
+  case 457:
+#line 1552 "dhcp6_parser.yy" // lalr1.cc:907
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2448 "dhcp6_parser.cc"
+#line 2601 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 432:
-#line 1484 "dhcp6_parser.yy"
+  case 472:
+#line 1585 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2456 "dhcp6_parser.cc"
+#line 2609 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 433:
-#line 1486 "dhcp6_parser.yy"
+  case 473:
+#line 1587 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2466 "dhcp6_parser.cc"
+#line 2619 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 436:
-#line 1496 "dhcp6_parser.yy"
+  case 476:
+#line 1597 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2475 "dhcp6_parser.cc"
+#line 2628 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 437:
-#line 1501 "dhcp6_parser.yy"
+  case 477:
+#line 1602 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2484 "dhcp6_parser.cc"
+#line 2637 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 438:
-#line 1509 "dhcp6_parser.yy"
+  case 478:
+#line 1610 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2495 "dhcp6_parser.cc"
+#line 2648 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 439:
-#line 1514 "dhcp6_parser.yy"
+  case 479:
+#line 1615 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2504 "dhcp6_parser.cc"
+#line 2657 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 444:
-#line 1529 "dhcp6_parser.yy"
+  case 484:
+#line 1630 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2514 "dhcp6_parser.cc"
+#line 2667 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 445:
-#line 1533 "dhcp6_parser.yy"
+  case 485:
+#line 1634 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2524 "dhcp6_parser.cc"
+#line 2677 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 446:
-#line 1539 "dhcp6_parser.yy"
+  case 486:
+#line 1640 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2534 "dhcp6_parser.cc"
+#line 2687 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 447:
-#line 1543 "dhcp6_parser.yy"
+  case 487:
+#line 1644 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 2543 "dhcp6_parser.cc"
+#line 2696 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 457:
-#line 1561 "dhcp6_parser.yy"
+  case 497:
+#line 1662 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2551 "dhcp6_parser.cc"
+#line 2704 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 458:
-#line 1563 "dhcp6_parser.yy"
+  case 498:
+#line 1664 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2561 "dhcp6_parser.cc"
+#line 2714 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 459:
-#line 1569 "dhcp6_parser.yy"
+  case 499:
+#line 1670 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2569 "dhcp6_parser.cc"
+#line 2722 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 460:
-#line 1571 "dhcp6_parser.yy"
+  case 500:
+#line 1672 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
-    ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
+    ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
     ConstElementPtr old = parent->get("user-context");
 
     // Handle already existing user context
@@ -2592,23 +2745,23 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2596 "dhcp6_parser.cc"
+#line 2749 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 461:
-#line 1594 "dhcp6_parser.yy"
+  case 501:
+#line 1695 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2604 "dhcp6_parser.cc"
+#line 2757 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 462:
-#line 1596 "dhcp6_parser.yy"
+  case 502:
+#line 1697 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
-    ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr comment(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     user_context->set("comment", comment);
 
     // Handle already existing user context
@@ -2629,41 +2782,41 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2633 "dhcp6_parser.cc"
+#line 2786 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 463:
-#line 1624 "dhcp6_parser.yy"
+  case 503:
+#line 1725 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2644 "dhcp6_parser.cc"
+#line 2797 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 464:
-#line 1629 "dhcp6_parser.yy"
+  case 504:
+#line 1730 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2653 "dhcp6_parser.cc"
+#line 2806 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 469:
-#line 1644 "dhcp6_parser.yy"
+  case 509:
+#line 1745 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2663 "dhcp6_parser.cc"
+#line 2816 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 470:
-#line 1648 "dhcp6_parser.yy"
+  case 510:
+#line 1749 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2671,21 +2824,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2675 "dhcp6_parser.cc"
+#line 2828 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 471:
-#line 1656 "dhcp6_parser.yy"
+  case 511:
+#line 1757 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2685 "dhcp6_parser.cc"
+#line 2838 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 472:
-#line 1660 "dhcp6_parser.yy"
+  case 512:
+#line 1761 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2693,546 +2846,546 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2697 "dhcp6_parser.cc"
+#line 2850 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 486:
-#line 1685 "dhcp6_parser.yy"
+  case 526:
+#line 1786 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2705 "dhcp6_parser.cc"
+#line 2858 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 487:
-#line 1687 "dhcp6_parser.yy"
+  case 527:
+#line 1788 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 2715 "dhcp6_parser.cc"
+#line 2868 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 488:
-#line 1693 "dhcp6_parser.yy"
+  case 528:
+#line 1794 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 2724 "dhcp6_parser.cc"
+#line 2877 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 489:
-#line 1698 "dhcp6_parser.yy"
+  case 529:
+#line 1799 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2732 "dhcp6_parser.cc"
+#line 2885 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 490:
-#line 1700 "dhcp6_parser.yy"
+  case 530:
+#line 1801 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2742 "dhcp6_parser.cc"
+#line 2895 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 491:
-#line 1706 "dhcp6_parser.yy"
+  case 531:
+#line 1807 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2751 "dhcp6_parser.cc"
+#line 2904 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 492:
-#line 1711 "dhcp6_parser.yy"
+  case 532:
+#line 1812 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2760 "dhcp6_parser.cc"
+#line 2913 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 493:
-#line 1719 "dhcp6_parser.yy"
+  case 533:
+#line 1820 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2771 "dhcp6_parser.cc"
+#line 2924 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 494:
-#line 1724 "dhcp6_parser.yy"
+  case 534:
+#line 1825 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2780 "dhcp6_parser.cc"
+#line 2933 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 499:
-#line 1737 "dhcp6_parser.yy"
+  case 539:
+#line 1838 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2790 "dhcp6_parser.cc"
+#line 2943 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 500:
-#line 1741 "dhcp6_parser.yy"
+  case 540:
+#line 1842 "dhcp6_parser.yy" // lalr1.cc:907
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2799 "dhcp6_parser.cc"
+#line 2952 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 501:
-#line 1746 "dhcp6_parser.yy"
+  case 541:
+#line 1847 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2809 "dhcp6_parser.cc"
+#line 2962 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 502:
-#line 1750 "dhcp6_parser.yy"
+  case 542:
+#line 1851 "dhcp6_parser.yy" // lalr1.cc:907
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2818 "dhcp6_parser.cc"
+#line 2971 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 518:
-#line 1777 "dhcp6_parser.yy"
+  case 558:
+#line 1878 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2829 "dhcp6_parser.cc"
+#line 2982 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 519:
-#line 1782 "dhcp6_parser.yy"
+  case 559:
+#line 1883 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2838 "dhcp6_parser.cc"
+#line 2991 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 520:
-#line 1787 "dhcp6_parser.yy"
+  case 560:
+#line 1888 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2849 "dhcp6_parser.cc"
+#line 3002 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 521:
-#line 1792 "dhcp6_parser.yy"
+  case 561:
+#line 1893 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2858 "dhcp6_parser.cc"
+#line 3011 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 522:
-#line 1797 "dhcp6_parser.yy"
+  case 562:
+#line 1898 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2866 "dhcp6_parser.cc"
+#line 3019 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 523:
-#line 1799 "dhcp6_parser.yy"
+  case 563:
+#line 1900 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2876 "dhcp6_parser.cc"
+#line 3029 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 524:
-#line 1805 "dhcp6_parser.yy"
+  case 564:
+#line 1906 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2884 "dhcp6_parser.cc"
+#line 3037 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 525:
-#line 1807 "dhcp6_parser.yy"
+  case 565:
+#line 1908 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2894 "dhcp6_parser.cc"
+#line 3047 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 526:
-#line 1813 "dhcp6_parser.yy"
+  case 566:
+#line 1914 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2902 "dhcp6_parser.cc"
+#line 3055 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 527:
-#line 1815 "dhcp6_parser.yy"
+  case 567:
+#line 1916 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2912 "dhcp6_parser.cc"
+#line 3065 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 528:
-#line 1821 "dhcp6_parser.yy"
+  case 568:
+#line 1922 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2920 "dhcp6_parser.cc"
+#line 3073 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 529:
-#line 1823 "dhcp6_parser.yy"
+  case 569:
+#line 1924 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2930 "dhcp6_parser.cc"
+#line 3083 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 530:
-#line 1829 "dhcp6_parser.yy"
+  case 570:
+#line 1930 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2941 "dhcp6_parser.cc"
+#line 3094 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 531:
-#line 1834 "dhcp6_parser.yy"
+  case 571:
+#line 1935 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2950 "dhcp6_parser.cc"
+#line 3103 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 532:
-#line 1842 "dhcp6_parser.yy"
+  case 572:
+#line 1943 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2961 "dhcp6_parser.cc"
+#line 3114 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 533:
-#line 1847 "dhcp6_parser.yy"
+  case 573:
+#line 1948 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2970 "dhcp6_parser.cc"
+#line 3123 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 536:
-#line 1856 "dhcp6_parser.yy"
+  case 576:
+#line 1957 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2978 "dhcp6_parser.cc"
+#line 3131 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 537:
-#line 1858 "dhcp6_parser.yy"
+  case 577:
+#line 1959 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 2988 "dhcp6_parser.cc"
+#line 3141 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 538:
-#line 1867 "dhcp6_parser.yy"
+  case 578:
+#line 1968 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 2999 "dhcp6_parser.cc"
+#line 3152 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 539:
-#line 1872 "dhcp6_parser.yy"
+  case 579:
+#line 1973 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3008 "dhcp6_parser.cc"
+#line 3161 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 542:
-#line 1881 "dhcp6_parser.yy"
+  case 582:
+#line 1982 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3018 "dhcp6_parser.cc"
+#line 3171 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 543:
-#line 1885 "dhcp6_parser.yy"
+  case 583:
+#line 1986 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 3028 "dhcp6_parser.cc"
+#line 3181 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 556:
-#line 1910 "dhcp6_parser.yy"
+  case 596:
+#line 2011 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3036 "dhcp6_parser.cc"
+#line 3189 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 557:
-#line 1912 "dhcp6_parser.yy"
+  case 597:
+#line 2013 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 3046 "dhcp6_parser.cc"
+#line 3199 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 558:
-#line 1918 "dhcp6_parser.yy"
+  case 598:
+#line 2019 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 3055 "dhcp6_parser.cc"
+#line 3208 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 559:
-#line 1926 "dhcp6_parser.yy"
+  case 599:
+#line 2027 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3066 "dhcp6_parser.cc"
+#line 3219 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 560:
-#line 1931 "dhcp6_parser.yy"
+  case 600:
+#line 2032 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 3077 "dhcp6_parser.cc"
+#line 3230 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 572:
-#line 1953 "dhcp6_parser.yy"
+  case 612:
+#line 2054 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 3085 "dhcp6_parser.cc"
+#line 3238 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 573:
-#line 1955 "dhcp6_parser.yy"
+  case 613:
+#line 2056 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3094 "dhcp6_parser.cc"
+#line 3247 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 574:
-#line 1960 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 3100 "dhcp6_parser.cc"
+  case 614:
+#line 2061 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
+#line 3253 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 575:
-#line 1961 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 3106 "dhcp6_parser.cc"
+  case 615:
+#line 2062 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
+#line 3259 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 576:
-#line 1962 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 3112 "dhcp6_parser.cc"
+  case 616:
+#line 2063 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
+#line 3265 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 577:
-#line 1965 "dhcp6_parser.yy"
+  case 617:
+#line 2066 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 3121 "dhcp6_parser.cc"
+#line 3274 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 578:
-#line 1970 "dhcp6_parser.yy"
+  case 618:
+#line 2071 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3129 "dhcp6_parser.cc"
+#line 3282 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 579:
-#line 1972 "dhcp6_parser.yy"
+  case 619:
+#line 2073 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 3139 "dhcp6_parser.cc"
+#line 3292 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 580:
-#line 1978 "dhcp6_parser.yy"
+  case 620:
+#line 2079 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 3148 "dhcp6_parser.cc"
+#line 3301 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 581:
-#line 1983 "dhcp6_parser.yy"
+  case 621:
+#line 2084 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 3157 "dhcp6_parser.cc"
+#line 3310 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 582:
-#line 1990 "dhcp6_parser.yy"
+  case 622:
+#line 2091 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 3166 "dhcp6_parser.cc"
+#line 3319 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 583:
-#line 1997 "dhcp6_parser.yy"
+  case 623:
+#line 2098 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3177 "dhcp6_parser.cc"
+#line 3330 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 584:
-#line 2002 "dhcp6_parser.yy"
+  case 624:
+#line 2103 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3186 "dhcp6_parser.cc"
+#line 3339 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 592:
-#line 2018 "dhcp6_parser.yy"
+  case 632:
+#line 2119 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3194 "dhcp6_parser.cc"
+#line 3347 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 593:
-#line 2020 "dhcp6_parser.yy"
+  case 633:
+#line 2121 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3204 "dhcp6_parser.cc"
+#line 3357 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 594:
-#line 2026 "dhcp6_parser.yy"
+  case 634:
+#line 2127 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3212 "dhcp6_parser.cc"
+#line 3365 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 595:
-#line 2028 "dhcp6_parser.yy"
+  case 635:
+#line 2129 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3222 "dhcp6_parser.cc"
+#line 3375 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 596:
-#line 2036 "dhcp6_parser.yy"
+  case 636:
+#line 2137 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3230 "dhcp6_parser.cc"
+#line 3383 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 597:
-#line 2038 "dhcp6_parser.yy"
+  case 637:
+#line 2139 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr qc = yystack_[0].value.as < ElementPtr > ();
+    ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
     ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     // Doing this manually, because dhcp-queue-control
@@ -3266,645 +3419,603 @@ namespace isc { namespace dhcp {
 
     ctx.leave();
 }
-#line 3270 "dhcp6_parser.cc"
+#line 3423 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 598:
-#line 2076 "dhcp6_parser.yy"
+  case 638:
+#line 2177 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3281 "dhcp6_parser.cc"
+#line 3434 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 599:
-#line 2081 "dhcp6_parser.yy"
+  case 639:
+#line 2182 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 3292 "dhcp6_parser.cc"
+#line 3445 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 600:
-#line 2088 "dhcp6_parser.yy"
+  case 640:
+#line 2189 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3302 "dhcp6_parser.cc"
+#line 3455 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 601:
-#line 2092 "dhcp6_parser.yy"
+  case 641:
+#line 2193 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // 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 3312 "dhcp6_parser.cc"
+#line 3465 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 622:
-#line 2122 "dhcp6_parser.yy"
+  case 662:
+#line 2223 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 3321 "dhcp6_parser.cc"
+#line 3474 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 623:
-#line 2127 "dhcp6_parser.yy"
+  case 663:
+#line 2228 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3329 "dhcp6_parser.cc"
+#line 3482 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 624:
-#line 2129 "dhcp6_parser.yy"
+  case 664:
+#line 2230 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3339 "dhcp6_parser.cc"
+#line 3492 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 625:
-#line 2135 "dhcp6_parser.yy"
+  case 665:
+#line 2236 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3347 "dhcp6_parser.cc"
+#line 3500 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 626:
-#line 2137 "dhcp6_parser.yy"
+  case 666:
+#line 2238 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3357 "dhcp6_parser.cc"
+#line 3510 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 627:
-#line 2143 "dhcp6_parser.yy"
+  case 667:
+#line 2244 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 3366 "dhcp6_parser.cc"
+#line 3519 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 628:
-#line 2148 "dhcp6_parser.yy"
+  case 668:
+#line 2249 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3374 "dhcp6_parser.cc"
+#line 3527 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 629:
-#line 2150 "dhcp6_parser.yy"
+  case 669:
+#line 2251 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3384 "dhcp6_parser.cc"
+#line 3537 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 630:
-#line 2156 "dhcp6_parser.yy"
+  case 670:
+#line 2257 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 3393 "dhcp6_parser.cc"
+#line 3546 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 631:
-#line 2161 "dhcp6_parser.yy"
+  case 671:
+#line 2262 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 3402 "dhcp6_parser.cc"
+#line 3555 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 632:
-#line 2166 "dhcp6_parser.yy"
+  case 672:
+#line 2267 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3410 "dhcp6_parser.cc"
+#line 3563 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 633:
-#line 2168 "dhcp6_parser.yy"
+  case 673:
+#line 2269 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3419 "dhcp6_parser.cc"
+#line 3572 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 634:
-#line 2174 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3425 "dhcp6_parser.cc"
+  case 674:
+#line 2275 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
+#line 3578 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 635:
-#line 2175 "dhcp6_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3431 "dhcp6_parser.cc"
+  case 675:
+#line 2276 "dhcp6_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
+#line 3584 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 636:
-#line 2178 "dhcp6_parser.yy"
+  case 676:
+#line 2279 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3439 "dhcp6_parser.cc"
+#line 3592 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 637:
-#line 2180 "dhcp6_parser.yy"
+  case 677:
+#line 2281 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3449 "dhcp6_parser.cc"
+#line 3602 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 638:
-#line 2186 "dhcp6_parser.yy"
+  case 678:
+#line 2288 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3458 "dhcp6_parser.cc"
+#line 3611 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 639:
-#line 2191 "dhcp6_parser.yy"
+  case 679:
+#line 2294 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3467 "dhcp6_parser.cc"
+#line 3620 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 640:
-#line 2196 "dhcp6_parser.yy"
+  case 680:
+#line 2300 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3475 "dhcp6_parser.cc"
+#line 3628 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 641:
-#line 2198 "dhcp6_parser.yy"
+  case 681:
+#line 2302 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3484 "dhcp6_parser.cc"
-    break;
-
-  case 642:
-#line 2204 "dhcp6_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3492 "dhcp6_parser.cc"
-    break;
-
-  case 643:
-#line 2207 "dhcp6_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3500 "dhcp6_parser.cc"
-    break;
-
-  case 644:
-#line 2210 "dhcp6_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3508 "dhcp6_parser.cc"
+#line 3637 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 645:
-#line 2213 "dhcp6_parser.yy"
-    {
-      yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
-      }
-#line 3516 "dhcp6_parser.cc"
-    break;
-
-  case 646:
-#line 2216 "dhcp6_parser.yy"
-    {
-      error(yystack_[0].location, "boolean values for the replace-client-name are "
-                "no longer supported");
-      }
-#line 3525 "dhcp6_parser.cc"
-    break;
-
-  case 647:
-#line 2222 "dhcp6_parser.yy"
+  case 682:
+#line 2308 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3533 "dhcp6_parser.cc"
+#line 3645 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 648:
-#line 2224 "dhcp6_parser.yy"
+  case 683:
+#line 2310 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    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 3543 "dhcp6_parser.cc"
+#line 3655 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 649:
-#line 2230 "dhcp6_parser.yy"
+  case 684:
+#line 2317 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3551 "dhcp6_parser.cc"
+#line 3663 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 650:
-#line 2232 "dhcp6_parser.yy"
+  case 685:
+#line 2319 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 3561 "dhcp6_parser.cc"
+#line 3673 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 651:
-#line 2238 "dhcp6_parser.yy"
+  case 686:
+#line 2326 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3569 "dhcp6_parser.cc"
+#line 3681 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 652:
-#line 2240 "dhcp6_parser.yy"
+  case 687:
+#line 2328 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 3579 "dhcp6_parser.cc"
+#line 3691 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 653:
-#line 2248 "dhcp6_parser.yy"
+  case 688:
+#line 2336 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3587 "dhcp6_parser.cc"
+#line 3699 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 654:
-#line 2250 "dhcp6_parser.yy"
+  case 689:
+#line 2338 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3596 "dhcp6_parser.cc"
+#line 3708 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 655:
-#line 2255 "dhcp6_parser.yy"
+  case 690:
+#line 2343 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3604 "dhcp6_parser.cc"
+#line 3716 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 656:
-#line 2257 "dhcp6_parser.yy"
+  case 691:
+#line 2345 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3613 "dhcp6_parser.cc"
+#line 3725 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 657:
-#line 2262 "dhcp6_parser.yy"
+  case 692:
+#line 2350 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3621 "dhcp6_parser.cc"
+#line 3733 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 658:
-#line 2264 "dhcp6_parser.yy"
+  case 693:
+#line 2352 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3630 "dhcp6_parser.cc"
+#line 3742 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 659:
-#line 2271 "dhcp6_parser.yy"
+  case 694:
+#line 2359 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-control", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 3641 "dhcp6_parser.cc"
+#line 3753 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 660:
-#line 2276 "dhcp6_parser.yy"
+  case 695:
+#line 2364 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3651 "dhcp6_parser.cc"
+#line 3763 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 661:
-#line 2282 "dhcp6_parser.yy"
+  case 696:
+#line 2370 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3661 "dhcp6_parser.cc"
+#line 3773 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 662:
-#line 2286 "dhcp6_parser.yy"
+  case 697:
+#line 2374 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // No config_control params are required
     // parsing completed
 }
-#line 3670 "dhcp6_parser.cc"
+#line 3782 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 667:
-#line 2301 "dhcp6_parser.yy"
+  case 702:
+#line 2389 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-databases", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 3681 "dhcp6_parser.cc"
+#line 3793 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 668:
-#line 2306 "dhcp6_parser.yy"
+  case 703:
+#line 2394 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3690 "dhcp6_parser.cc"
+#line 3802 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 669:
-#line 2311 "dhcp6_parser.yy"
+  case 704:
+#line 2399 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-fetch-wait-time", value);
 }
-#line 3699 "dhcp6_parser.cc"
+#line 3811 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 670:
-#line 2321 "dhcp6_parser.yy"
+  case 705:
+#line 2409 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3710 "dhcp6_parser.cc"
+#line 3822 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 671:
-#line 2326 "dhcp6_parser.yy"
+  case 706:
+#line 2414 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3719 "dhcp6_parser.cc"
+#line 3831 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 672:
-#line 2331 "dhcp6_parser.yy"
+  case 707:
+#line 2419 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3729 "dhcp6_parser.cc"
+#line 3841 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 673:
-#line 2335 "dhcp6_parser.yy"
+  case 708:
+#line 2423 "dhcp6_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
-#line 3737 "dhcp6_parser.cc"
+#line 3849 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 677:
-#line 2351 "dhcp6_parser.yy"
+  case 712:
+#line 2439 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3748 "dhcp6_parser.cc"
+#line 3860 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 678:
-#line 2356 "dhcp6_parser.yy"
+  case 713:
+#line 2444 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3757 "dhcp6_parser.cc"
+#line 3869 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 681:
-#line 2368 "dhcp6_parser.yy"
+  case 716:
+#line 2456 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3767 "dhcp6_parser.cc"
+#line 3879 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 682:
-#line 2372 "dhcp6_parser.yy"
+  case 717:
+#line 2460 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 3775 "dhcp6_parser.cc"
+#line 3887 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 692:
-#line 2389 "dhcp6_parser.yy"
+  case 727:
+#line 2477 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3784 "dhcp6_parser.cc"
+#line 3896 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 693:
-#line 2394 "dhcp6_parser.yy"
+  case 728:
+#line 2482 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3792 "dhcp6_parser.cc"
+#line 3904 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 694:
-#line 2396 "dhcp6_parser.yy"
+  case 729:
+#line 2484 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3802 "dhcp6_parser.cc"
+#line 3914 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 695:
-#line 2402 "dhcp6_parser.yy"
+  case 730:
+#line 2490 "dhcp6_parser.yy" // lalr1.cc:907
     {
     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 3813 "dhcp6_parser.cc"
+#line 3925 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 696:
-#line 2407 "dhcp6_parser.yy"
+  case 731:
+#line 2495 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3822 "dhcp6_parser.cc"
+#line 3934 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 699:
-#line 2416 "dhcp6_parser.yy"
+  case 734:
+#line 2504 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3832 "dhcp6_parser.cc"
+#line 3944 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 700:
-#line 2420 "dhcp6_parser.yy"
+  case 735:
+#line 2508 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 3840 "dhcp6_parser.cc"
+#line 3952 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 708:
-#line 2435 "dhcp6_parser.yy"
+  case 743:
+#line 2523 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3848 "dhcp6_parser.cc"
+#line 3960 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 709:
-#line 2437 "dhcp6_parser.yy"
+  case 744:
+#line 2525 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3858 "dhcp6_parser.cc"
+#line 3970 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 710:
-#line 2443 "dhcp6_parser.yy"
+  case 745:
+#line 2531 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3867 "dhcp6_parser.cc"
+#line 3979 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 711:
-#line 2448 "dhcp6_parser.yy"
+  case 746:
+#line 2536 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3876 "dhcp6_parser.cc"
+#line 3988 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 712:
-#line 2453 "dhcp6_parser.yy"
+  case 747:
+#line 2541 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3885 "dhcp6_parser.cc"
+#line 3997 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 713:
-#line 2458 "dhcp6_parser.yy"
+  case 748:
+#line 2546 "dhcp6_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3893 "dhcp6_parser.cc"
+#line 4005 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
-  case 714:
-#line 2460 "dhcp6_parser.yy"
+  case 749:
+#line 2548 "dhcp6_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 3903 "dhcp6_parser.cc"
+#line 4015 "dhcp6_parser.cc" // lalr1.cc:907
     break;
 
 
-#line 3907 "dhcp6_parser.cc"
-
+#line 4019 "dhcp6_parser.cc" // lalr1.cc:907
             default:
               break;
             }
@@ -3912,7 +4023,6 @@ namespace isc { namespace dhcp {
 #if YY_EXCEPTIONS
       catch (const syntax_error& yyexc)
         {
-          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
           error (yyexc);
           YYERROR;
         }
@@ -3927,7 +4037,6 @@ namespace isc { namespace dhcp {
     }
     goto yynewstate;
 
-
   /*--------------------------------------.
   | yyerrlab -- here on detecting error.  |
   `--------------------------------------*/
@@ -3964,18 +4073,18 @@ namespace isc { namespace dhcp {
   | yyerrorlab -- error raised explicitly by YYERROR.  |
   `---------------------------------------------------*/
   yyerrorlab:
-    /* Pacify compilers when the user code never invokes YYERROR and
-       the label yyerrorlab therefore never appears in user code.  */
-    if (false)
-      YYERROR;
 
+    /* Pacify compilers like GCC when the user code never invokes
+       YYERROR and the label yyerrorlab therefore never appears in user
+       code.  */
+    if (false)
+      goto yyerrorlab;
     /* Do not reclaim the symbols of the rule whose action triggered
        this YYERROR.  */
     yypop_ (yylen);
     yylen = 0;
     goto yyerrlab1;
 
-
   /*-------------------------------------------------------------.
   | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   `-------------------------------------------------------------*/
@@ -4016,26 +4125,16 @@ namespace isc { namespace dhcp {
     }
     goto yynewstate;
 
-
-  /*-------------------------------------.
-  | yyacceptlab -- YYACCEPT comes here.  |
-  `-------------------------------------*/
+    // Accept.
   yyacceptlab:
     yyresult = 0;
     goto yyreturn;
 
-
-  /*-----------------------------------.
-  | yyabortlab -- YYABORT comes here.  |
-  `-----------------------------------*/
+    // Abort.
   yyabortlab:
     yyresult = 1;
     goto yyreturn;
 
-
-  /*-----------------------------------------------------.
-  | yyreturn -- parsing is finished, return the result.  |
-  `-----------------------------------------------------*/
   yyreturn:
     if (!yyla.empty ())
       yy_destroy_ ("Cleanup: discarding lookahead", yyla);
@@ -4174,129 +4273,134 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short Dhcp6Parser::yypact_ninf_ = -878;
+  const short Dhcp6Parser::yypact_ninf_ = -921;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short
   Dhcp6Parser::yypact_[] =
   {
-     519,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,    39,    70,    52,    69,
-      78,   134,   183,   185,   192,   193,   194,   201,   208,   220,
-     227,   250,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,    70,  -137,    30,    79,    41,   435,    81,   164,
-     268,    24,    43,   275,   -67,   463,   -48,   153,  -878,   154,
-     190,   254,   251,   262,  -878,  -878,  -878,  -878,  -878,   265,
-    -878,    75,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   278,   279,   285,   311,   315,   327,
-     328,   329,   337,   338,   363,   371,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,   375,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,   114,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,   381,  -878,   170,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,   390,
-     391,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,   186,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,   206,  -878,
-    -878,  -878,  -878,  -878,   399,  -878,   401,   403,  -878,  -878,
-    -878,  -878,  -878,  -878,   213,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,   260,   319,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,   350,  -878,  -878,   405,  -878,  -878,  -878,   408,
-    -878,  -878,   370,   384,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,   413,   415,  -878,
-    -878,  -878,  -878,   414,   395,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,   244,  -878,  -878,
-    -878,   420,  -878,  -878,   422,  -878,   423,   425,  -878,  -878,
-     426,   437,  -878,  -878,  -878,  -878,  -878,   258,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   306,  -878,  -878,  -878,   438,   308,
-    -878,  -878,  -878,  -878,    70,    70,  -878,   261,   439,   444,
-     445,   446,   458,  -878,    30,  -878,   462,   466,   467,   469,
-     470,   471,   283,   292,   293,   307,   312,   313,   314,   316,
-     304,   317,   323,   321,   488,   489,   491,   495,   497,   499,
-     503,   505,   506,   507,   516,   517,   518,   520,   521,   522,
-     523,   339,   524,   525,   526,   528,   529,   532,    79,  -878,
-     533,   352,    41,  -878,   535,   539,   540,   541,   542,   364,
-     361,   545,   546,   547,   435,  -878,   548,    81,  -878,   549,
-     372,   550,   376,   377,   164,  -878,   551,   554,   555,   558,
-     559,   561,   562,  -878,   268,  -878,   563,   564,   386,   565,
-     567,   568,   387,  -878,    43,   573,   392,   393,  -878,   275,
-     576,   577,     4,  -878,   396,   580,   582,   407,   583,   410,
-     411,   608,   610,   397,   433,   616,   617,   463,  -878,   -48,
-    -878,   618,   456,   153,  -878,  -878,  -878,   637,   635,   636,
-      70,    70,    70,  -878,   461,   638,   640,   641,   642,   645,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,   468,   647,   648,   649,   651,   472,   158,   656,
-     660,   661,   662,   663,   664,   666,   667,   669,   670,  -878,
-     672,   651,   673,   485,   490,   676,  -878,   677,  -878,  -878,
-     678,   680,   527,   530,   531,  -878,  -878,   677,   534,   695,
-    -878,   536,  -878,   537,  -878,   538,  -878,  -878,  -878,   677,
-     677,   677,   543,   544,   552,   553,  -878,   556,   557,  -878,
-     560,   566,   569,  -878,  -878,   570,  -878,  -878,  -878,   571,
-      70,  -878,  -878,   572,   574,  -878,   575,  -878,  -878,    29,
-     581,  -878,  -878,    -2,   578,  -878,  -878,   698,  -878,  -878,
-      70,    79,   -48,  -878,  -878,  -878,  -878,   153,    41,   264,
-     264,   697,  -878,   699,   700,   701,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   702,   -38,    70,   -34,   611,   704,
-     705,   708,   159,   125,    35,  -878,   463,  -878,  -878,   709,
-    -878,  -878,   711,   715,  -878,  -878,  -878,  -878,  -878,   -56,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,   697,  -878,   309,   310,   318,   320,  -878,  -878,
-    -878,  -878,   719,   720,   721,   724,   726,  -878,   727,   728,
-    -878,  -878,  -878,   729,   730,   733,   734,  -878,   322,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-     326,  -878,   668,   738,  -878,  -878,   736,   741,  -878,  -878,
-     739,   743,  -878,  -878,   742,   744,  -878,  -878,   745,   747,
-    -878,  -878,  -878,    83,  -878,  -878,  -878,   750,  -878,  -878,
-    -878,    90,  -878,  -878,  -878,  -878,   340,  -878,  -878,  -878,
-     101,  -878,  -878,   753,   757,  -878,  -878,   758,   760,  -878,
-     761,   762,   763,   764,   765,   766,   341,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,   767,   768,   769,  -878,
-    -878,  -878,  -878,   347,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,   348,  -878,  -878,  -878,   351,
-    -878,   136,  -878,   591,  -878,   770,   772,  -878,  -878,   771,
-     775,  -878,  -878,  -878,   773,  -878,   774,  -878,  -878,  -878,
-    -878,   778,   779,   780,   781,   595,   600,   603,   602,   605,
-     786,   607,   609,   788,   790,   791,   612,   613,   614,   615,
-     264,  -878,  -878,   264,  -878,   697,   435,  -878,   699,    43,
-    -878,   700,   275,  -878,   701,   579,  -878,   702,   -38,  -878,
-    -878,   -34,  -878,   794,   611,  -878,    84,   704,  -878,   268,
-    -878,   705,   -67,  -878,   708,   619,   620,   621,   622,   623,
-     624,   159,  -878,   797,   798,   625,   626,   627,   125,  -878,
-     808,   809,    35,  -878,  -878,   127,   709,  -878,  -878,   810,
-     811,    81,  -878,   711,   164,  -878,   715,   813,  -878,  -878,
-     256,   632,   644,   646,  -878,  -878,  -878,  -878,  -878,   654,
-    -878,  -878,   657,   658,   671,  -878,  -878,  -878,  -878,  -878,
-     354,  -878,   357,  -878,   812,  -878,   815,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,   358,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,   674,  -878,  -878,
-     814,  -878,  -878,  -878,  -878,  -878,   816,   818,  -878,  -878,
-    -878,  -878,  -878,   822,  -878,   373,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,    32,   679,  -878,  -878,  -878,  -878,
-     689,   692,  -878,  -878,   828,  -878,  -878,  -878,  -878,  -878,
-     374,  -878,  -878,  -878,  -878,  -878,  -878,   703,   383,  -878,
-     385,  -878,   714,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,   579,
-    -878,  -878,   835,   633,  -878,    84,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,   840,   718,   847,   127,  -878,
-    -878,  -878,  -878,  -878,  -878,   722,  -878,  -878,   848,  -878,
-     735,  -878,  -878,   897,  -878,  -878,   180,  -878,    67,   897,
-    -878,  -878,   851,   903,   906,  -878,   394,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   913,   740,   737,   746,   915,    67,
-    -878,   748,  -878,  -878,  -878,   749,  -878,  -878,  -878
+     197,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,    41,    43,    73,    85,
+      87,    97,   101,   145,   206,   208,   220,   221,   232,   247,
+     259,   268,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,    43,  -130,    25,   111,    27,   621,   135,   178,
+     181,   157,    66,   261,     4,   409,   -89,   123,  -921,   236,
+     274,   282,   279,   292,  -921,  -921,  -921,  -921,  -921,   293,
+    -921,    37,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,   294,   315,   319,   322,   362,   393,
+     402,   403,   405,   412,   413,   415,  -921,   416,   417,   419,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   421,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,    48,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   423,  -921,
+      92,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,   426,   427,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,   125,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   140,  -921,
+    -921,  -921,  -921,  -921,   428,  -921,   429,   430,  -921,  -921,
+    -921,  -921,  -921,  -921,   177,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,   357,   384,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,   431,  -921,  -921,   433,  -921,  -921,  -921,   436,
+    -921,  -921,   434,   410,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,   437,   443,  -921,
+    -921,  -921,  -921,   445,   432,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,   260,  -921,  -921,
+    -921,   450,  -921,  -921,   453,  -921,   454,   455,  -921,  -921,
+     456,   464,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   264,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,   273,  -921,  -921,  -921,
+     465,   291,  -921,  -921,  -921,  -921,    43,    43,  -921,   283,
+     469,   470,   471,   472,   476,  -921,    25,  -921,   480,   481,
+     482,   484,   486,   496,   313,   314,   320,   323,   325,   326,
+     327,   329,   328,   316,   318,   331,   501,   332,   334,   335,
+     524,   525,   527,   529,   530,   531,   532,   533,   534,   535,
+     536,   537,   538,   539,   540,   557,   558,   559,   560,   375,
+     562,   563,   566,   567,   568,   569,   111,  -921,   570,   388,
+      27,  -921,   571,   572,   573,   574,   575,   391,   390,   579,
+     580,   581,   621,  -921,   582,   135,  -921,   583,   398,   585,
+     400,   401,   178,  -921,   588,   589,   590,   592,   593,   595,
+     596,  -921,   181,  -921,   597,   599,   414,   601,   602,   603,
+     418,  -921,    66,   604,   420,   422,  -921,   261,   607,   609,
+      75,  -921,   424,   611,   613,   435,   614,   438,   439,   615,
+     617,   440,   441,   618,   619,   620,   622,   409,  -921,   -89,
+    -921,   623,   444,   123,  -921,  -921,  -921,   626,   624,   630,
+      43,    43,    43,  -921,   451,   632,   635,   636,   637,   640,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,   457,  -921,  -921,  -921,   -11,   458,   459,   644,
+     645,   646,   648,   463,   -10,   652,   653,   654,   655,   657,
+     671,   672,   679,   678,   680,  -921,   681,   648,   682,   473,
+     502,   685,  -921,   687,  -921,  -921,   688,   694,   511,   512,
+     513,  -921,  -921,   687,   514,   705,  -921,   526,  -921,   528,
+    -921,   541,  -921,  -921,  -921,   687,   687,   687,   542,   543,
+     544,   546,  -921,   547,   548,  -921,   549,   550,   551,  -921,
+    -921,   552,  -921,  -921,  -921,   553,    43,  -921,  -921,   554,
+     555,  -921,   556,  -921,  -921,   126,   564,  -921,  -921,   -11,
+     584,   586,   587,  -921,  -921,   708,  -921,  -921,    43,   111,
+     -89,  -921,  -921,  -921,  -921,   123,    27,   275,   275,   707,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   709,
+     712,   713,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+     714,   -75,    43,    15,   625,   715,   717,   721,   214,    58,
+      95,  -921,   409,  -921,  -921,   722,  -921,  -921,   739,   740,
+    -921,  -921,  -921,  -921,  -921,   -65,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,   707,  -921,   317,   340,   343,
+     344,  -921,  -921,  -921,  -921,   755,   756,   764,   767,   768,
+    -921,   770,   773,  -921,  -921,  -921,   774,   775,   778,   779,
+    -921,   346,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,   347,  -921,   780,   781,  -921,  -921,   783,
+     782,  -921,  -921,   786,   792,  -921,  -921,   790,   794,  -921,
+    -921,   793,   795,  -921,  -921,  -921,    52,  -921,  -921,  -921,
+     796,  -921,  -921,  -921,    63,  -921,  -921,  -921,  -921,   350,
+    -921,  -921,  -921,    99,  -921,  -921,   797,   798,  -921,  -921,
+     799,   801,  -921,   803,   804,   807,   808,   809,   810,   353,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   811,
+     812,   814,  -921,  -921,  -921,  -921,   354,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   360,  -921,
+    -921,  -921,   361,  -921,   109,  -921,   631,  -921,   813,   818,
+    -921,  -921,   816,   820,  -921,  -921,  -921,   817,  -921,   821,
+    -921,  -921,  -921,  -921,   822,   824,   825,   826,   610,   639,
+     634,   641,   642,   830,   647,   649,   831,   832,   834,   650,
+     651,   656,   659,   275,  -921,  -921,   275,  -921,   707,   621,
+    -921,   709,    66,  -921,   712,   261,  -921,   713,   704,  -921,
+     714,   -75,  -921,  -921,    15,  -921,   838,   625,  -921,   256,
+     715,  -921,   181,  -921,   717,     4,  -921,   721,   660,   661,
+     662,   663,   664,   665,   214,  -921,   839,   840,   666,   667,
+     668,    58,  -921,   841,   842,    95,  -921,  -921,   -12,   722,
+    -921,  -921,   853,   844,   135,  -921,   739,   178,  -921,   740,
+     856,  -921,  -921,   228,   673,   677,   683,  -921,  -921,  -921,
+    -921,  -921,   684,  -921,  -921,   686,   691,   693,  -921,  -921,
+    -921,  -921,  -921,   383,  -921,   385,  -921,   859,  -921,   862,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   386,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   695,  -921,
+    -921,   857,  -921,  -921,  -921,  -921,  -921,   879,   891,  -921,
+    -921,  -921,  -921,  -921,   887,  -921,   387,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,    56,   711,  -921,  -921,  -921,
+    -921,   716,   723,  -921,  -921,   893,  -921,  -921,  -921,  -921,
+    -921,   395,  -921,  -921,  -921,  -921,  -921,  -921,   726,   396,
+    -921,   397,  -921,   727,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+     704,  -921,  -921,   894,   729,  -921,   256,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,   900,   736,   930,   -12,
+    -921,  -921,  -921,  -921,  -921,  -921,   746,  -921,  -921,   932,
+    -921,   750,  -921,  -921,   936,  -921,  -921,   235,  -921,    35,
+     936,  -921,  -921,   942,   946,   950,  -921,   407,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,   972,   789,   800,   802,   979,
+      35,  -921,   806,  -921,  -921,  -921,   815,  -921,  -921,  -921
   };
 
   const unsigned short
@@ -4306,164 +4410,170 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,    28,    30,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     1,    47,    40,    36,    35,    32,    33,    34,
-      39,     3,    37,    38,    60,     5,    72,     7,   137,     9,
-     286,    11,   446,    13,   471,    15,   501,    17,   371,    19,
-     379,    21,   416,    23,   251,    25,   600,    27,   672,    29,
-     661,    31,    49,    43,     0,     0,     0,     0,     0,     0,
-     503,     0,   381,   418,     0,     0,     0,     0,    51,     0,
-      50,     0,     0,    44,    70,   670,   653,   655,   657,     0,
-      69,     0,    62,    64,    66,    67,    68,    65,   119,   659,
-     135,   149,   151,   153,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   133,   278,   369,   408,
-     459,   461,   327,   335,   224,   241,   232,   217,   538,   493,
-     243,   262,   559,     0,   583,   596,   598,   649,   651,   677,
-     118,     0,    74,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,   112,   113,   114,    85,   110,    88,    89,    90,
-      91,   107,    92,    94,    93,    98,    99,    86,   111,    87,
-      96,    97,   105,   106,   108,    95,   100,   101,   102,   103,
-     104,   116,   117,   109,   115,   146,     0,   145,     0,   139,
-     141,   142,   143,   144,   438,   463,   317,   319,   321,     0,
-       0,   325,   323,   532,   316,   290,   291,   292,   293,   294,
-     295,   296,   297,   313,   314,   315,     0,   288,   301,   302,
-     303,   306,   307,   309,   304,   305,   298,   299,   311,   312,
-     300,   308,   310,   457,   456,   452,   453,   451,     0,   448,
-     450,   454,   455,   486,     0,   489,     0,     0,   485,   479,
-     480,   478,   483,   484,     0,   473,   475,   476,   481,   482,
-     477,   530,   518,   520,   522,   524,   526,   528,   517,   514,
-     515,   516,     0,   504,   505,   509,   510,   507,   511,   512,
-     513,   508,     0,   398,   197,     0,   402,   400,   405,     0,
-     394,   395,     0,   382,   383,   385,   397,   386,   387,   388,
-     404,   389,   390,   391,   392,   393,   432,     0,     0,   430,
-     431,   434,   435,     0,   419,   420,   422,   423,   424,   425,
-     426,   427,   428,   429,   258,   260,   255,     0,   253,   256,
-     257,     0,   623,   625,     0,   628,     0,     0,   632,   636,
-       0,     0,   640,   647,   621,   619,   620,     0,   602,   604,
-     605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
-     615,   616,   617,   618,     0,   674,   676,   667,     0,     0,
-     663,   665,   666,    48,     0,     0,    41,     0,     0,     0,
-       0,     0,     0,    59,     0,    61,     0,     0,     0,     0,
+      39,     3,    37,    38,    60,     5,    72,     7,   161,     9,
+     310,    11,   486,    13,   511,    15,   541,    17,   411,    19,
+     419,    21,   456,    23,   275,    25,   640,    27,   707,    29,
+     696,    31,    49,    43,     0,     0,     0,     0,     0,     0,
+     543,     0,   421,   458,     0,     0,     0,     0,    51,     0,
+      50,     0,     0,    44,    70,   705,   688,   690,   692,     0,
+      69,     0,    62,    64,    66,    67,    68,    65,   125,   694,
+     159,   173,   175,   177,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   157,     0,     0,     0,
+     142,   149,   151,   302,   409,   448,   499,   501,   359,   367,
+     248,   265,   256,   241,   578,   533,   267,   286,   599,     0,
+     623,   636,   638,   153,   155,   712,   124,     0,    74,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,   112,   113,
+     114,    85,   118,   119,   120,   121,   122,   123,   116,   117,
+     110,    88,    89,    90,    91,   107,    92,    94,    93,    98,
+      99,    86,   111,    87,    96,    97,   105,   106,   108,    95,
+     100,   101,   102,   103,   104,   109,   115,   170,     0,   169,
+       0,   163,   165,   166,   167,   168,   478,   503,   349,   351,
+     353,     0,     0,   357,   355,   572,   348,   314,   315,   316,
+     317,   318,   319,   320,   321,   337,   338,   339,   342,   343,
+     344,   345,   346,   347,   340,   341,     0,   312,   325,   326,
+     327,   330,   331,   333,   328,   329,   322,   323,   335,   336,
+     324,   332,   334,   497,   496,   492,   493,   491,     0,   488,
+     490,   494,   495,   526,     0,   529,     0,     0,   525,   519,
+     520,   518,   523,   524,     0,   513,   515,   516,   521,   522,
+     517,   570,   558,   560,   562,   564,   566,   568,   557,   554,
+     555,   556,     0,   544,   545,   549,   550,   547,   551,   552,
+     553,   548,     0,   438,   221,     0,   442,   440,   445,     0,
+     434,   435,     0,   422,   423,   425,   437,   426,   427,   428,
+     444,   429,   430,   431,   432,   433,   472,     0,     0,   470,
+     471,   474,   475,     0,   459,   460,   462,   463,   464,   465,
+     466,   467,   468,   469,   282,   284,   279,     0,   277,   280,
+     281,     0,   663,   665,     0,   668,     0,     0,   672,   676,
+       0,     0,   680,   682,   684,   686,   661,   659,   660,     0,
+     642,   644,   645,   646,   647,   648,   649,   650,   651,   652,
+     653,   654,   655,   656,   657,   658,     0,   709,   711,   702,
+       0,     0,   698,   700,   701,    48,     0,     0,    41,     0,
+       0,     0,     0,     0,     0,    59,     0,    61,     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,    73,
-       0,     0,     0,   138,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   287,     0,     0,   447,     0,
-       0,     0,     0,     0,     0,   472,     0,     0,     0,     0,
-       0,     0,     0,   502,     0,   372,     0,     0,     0,     0,
-       0,     0,     0,   380,     0,     0,     0,     0,   417,     0,
-       0,     0,     0,   252,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   601,     0,
-     673,     0,     0,     0,   662,    52,    45,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    73,     0,     0,
+       0,   162,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,     0,     0,   487,     0,     0,     0,
+       0,     0,     0,   512,     0,     0,     0,     0,     0,     0,
+       0,   542,     0,   412,     0,     0,     0,     0,     0,     0,
+       0,   420,     0,     0,     0,     0,   457,     0,     0,     0,
+       0,   276,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   641,     0,
+     708,     0,     0,     0,   697,    52,    45,     0,     0,     0,
        0,     0,     0,    63,     0,     0,     0,     0,     0,     0,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   582,
-       0,     0,     0,     0,     0,     0,    75,     0,   148,   140,
-       0,     0,     0,     0,     0,   333,   334,     0,     0,     0,
-     289,     0,   449,     0,   488,     0,   491,   492,   474,     0,
-       0,     0,     0,     0,     0,     0,   506,     0,     0,   396,
-       0,     0,     0,   407,   384,     0,   436,   437,   421,     0,
-       0,   254,   622,     0,     0,   627,     0,   630,   631,     0,
-       0,   638,   639,     0,     0,   603,   675,     0,   669,   664,
-       0,     0,     0,   654,   656,   658,   120,     0,     0,     0,
-       0,   155,   134,   280,   373,   410,    42,   460,   462,   329,
-     330,   331,   332,   328,   337,     0,    49,     0,     0,     0,
-     495,   245,     0,     0,     0,   597,     0,   650,   652,     0,
-      53,   147,   440,   465,   318,   320,   322,   326,   324,     0,
-     458,   487,   490,   531,   519,   521,   523,   525,   527,   529,
-     399,   198,   403,   401,   406,   433,   259,   261,   624,   626,
-     629,   634,   635,   633,   637,   642,   643,   644,   645,   646,
-     641,   648,   155,    46,     0,     0,     0,     0,   184,   190,
-     192,   194,     0,     0,     0,     0,     0,   208,     0,     0,
-     211,   213,   215,     0,     0,     0,     0,   183,     0,   161,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     175,   182,   176,   177,   178,   173,   174,   179,   180,   181,
-       0,   159,     0,   156,   157,   284,     0,   281,   282,   377,
-       0,   374,   375,   414,     0,   411,   412,   341,     0,   338,
-     339,   230,   231,     0,   226,   228,   229,     0,   239,   240,
-     236,     0,   234,   237,   238,   222,     0,   219,   221,   542,
-       0,   540,   499,     0,   496,   497,   249,     0,   246,   247,
-       0,     0,     0,     0,     0,     0,     0,   264,   266,   267,
-     268,   269,   270,   271,   572,   578,     0,     0,     0,   571,
-     568,   569,   570,     0,   561,   563,   566,   564,   565,   567,
-     592,   594,   591,   589,   590,     0,   585,   587,   588,     0,
-     681,     0,   679,    55,   444,     0,   441,   442,   469,     0,
-     466,   467,   536,   535,     0,   534,     0,    71,   671,   660,
-     136,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,     0,   139,   140,   141,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   622,     0,     0,     0,     0,
+       0,     0,    75,     0,   172,   164,     0,     0,     0,     0,
+       0,   365,   366,     0,     0,     0,   313,     0,   489,     0,
+     528,     0,   531,   532,   514,     0,     0,     0,     0,     0,
+       0,     0,   546,     0,     0,   436,     0,     0,     0,   447,
+     424,     0,   476,   477,   461,     0,     0,   278,   662,     0,
+       0,   667,     0,   670,   671,     0,     0,   678,   679,     0,
+       0,     0,     0,   643,   710,     0,   704,   699,     0,     0,
+       0,   689,   691,   693,   126,     0,     0,     0,     0,   179,
+     158,   144,   145,   146,   147,   148,   143,   150,   152,   304,
+     413,   450,    42,   500,   502,   361,   362,   363,   364,   360,
+     369,     0,    49,     0,     0,     0,   535,   269,     0,     0,
+       0,   637,     0,   154,   156,     0,    53,   171,   480,   505,
+     350,   352,   354,   358,   356,     0,   498,   527,   530,   571,
+     559,   561,   563,   565,   567,   569,   439,   222,   443,   441,
+     446,   473,   283,   285,   664,   666,   669,   674,   675,   673,
+     677,   681,   683,   685,   687,   179,    46,     0,     0,     0,
+       0,   208,   214,   216,   218,     0,     0,     0,     0,     0,
+     232,     0,     0,   235,   237,   239,     0,     0,     0,     0,
+     207,     0,   185,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   199,   206,   200,   201,   202,   197,   198,
+     203,   204,   205,     0,   183,     0,   180,   181,   308,     0,
+     305,   306,   417,     0,   414,   415,   454,     0,   451,   452,
+     373,     0,   370,   371,   254,   255,     0,   250,   252,   253,
+       0,   263,   264,   260,     0,   258,   261,   262,   246,     0,
+     243,   245,   582,     0,   580,   539,     0,   536,   537,   273,
+       0,   270,   271,     0,     0,     0,     0,     0,     0,     0,
+     288,   290,   291,   292,   293,   294,   295,   612,   618,     0,
+       0,     0,   611,   608,   609,   610,     0,   601,   603,   606,
+     604,   605,   607,   632,   634,   631,   629,   630,     0,   625,
+     627,   628,     0,   716,     0,   714,    55,   484,     0,   481,
+     482,   509,     0,   506,   507,   576,   575,     0,   574,     0,
+      71,   706,   695,   160,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   150,   152,     0,   154,     0,     0,   279,     0,   381,
-     370,     0,   418,   409,     0,     0,   336,     0,     0,   225,
-     242,     0,   233,     0,     0,   218,   544,     0,   539,   503,
-     494,     0,     0,   244,     0,     0,     0,     0,     0,     0,
-       0,     0,   263,     0,     0,     0,     0,     0,     0,   560,
-       0,     0,     0,   584,   599,     0,     0,   678,    57,     0,
-      56,     0,   439,     0,     0,   464,     0,     0,   533,   668,
-       0,     0,     0,     0,   196,   199,   200,   201,   202,     0,
-     210,   203,     0,     0,     0,   205,   206,   207,   204,   162,
-       0,   158,     0,   283,     0,   376,     0,   413,   368,   356,
-     357,   358,   360,   361,   362,   349,   350,   365,   366,   367,
-     345,   346,   347,   348,   354,   355,   353,   359,     0,   343,
-     351,   363,   364,   352,   340,   227,   235,     0,   220,   556,
-       0,   554,   555,   551,   552,   553,     0,   545,   546,   548,
-     549,   550,   541,     0,   498,     0,   248,   272,   273,   274,
-     275,   276,   277,   265,     0,     0,   577,   580,   581,   562,
-       0,     0,   586,   695,     0,   693,   691,   685,   689,   690,
-       0,   683,   687,   688,   686,   680,    54,     0,     0,   443,
-       0,   468,     0,   186,   187,   188,   189,   185,   191,   193,
-     195,   209,   212,   214,   216,   160,   285,   378,   415,     0,
-     342,   223,     0,     0,   543,     0,   500,   250,   574,   575,
-     576,   573,   579,   593,   595,     0,     0,     0,     0,   682,
-      58,   445,   470,   537,   344,     0,   558,   547,     0,   692,
-       0,   684,   557,     0,   694,   699,     0,   697,     0,     0,
-     696,   708,     0,     0,     0,   713,     0,   701,   703,   704,
-     705,   706,   707,   698,     0,     0,     0,     0,     0,     0,
-     700,     0,   710,   711,   712,     0,   702,   709,   714
+       0,     0,     0,     0,   174,   176,     0,   178,     0,     0,
+     303,     0,   421,   410,     0,   458,   449,     0,     0,   368,
+       0,     0,   249,   266,     0,   257,     0,     0,   242,   584,
+       0,   579,   543,   534,     0,     0,   268,     0,     0,     0,
+       0,     0,     0,     0,     0,   287,     0,     0,     0,     0,
+       0,     0,   600,     0,     0,     0,   624,   639,     0,     0,
+     713,    57,     0,    56,     0,   479,     0,     0,   504,     0,
+       0,   573,   703,     0,     0,     0,     0,   220,   223,   224,
+     225,   226,     0,   234,   227,     0,     0,     0,   229,   230,
+     231,   228,   186,     0,   182,     0,   307,     0,   416,     0,
+     453,   408,   388,   389,   390,   392,   393,   394,   381,   382,
+     397,   398,   399,   402,   403,   404,   405,   406,   407,   400,
+     401,   377,   378,   379,   380,   386,   387,   385,   391,     0,
+     375,   383,   395,   396,   384,   372,   251,   259,     0,   244,
+     596,     0,   594,   595,   591,   592,   593,     0,   585,   586,
+     588,   589,   590,   581,     0,   538,     0,   272,   296,   297,
+     298,   299,   300,   301,   289,     0,     0,   617,   620,   621,
+     602,     0,     0,   626,   730,     0,   728,   726,   720,   724,
+     725,     0,   718,   722,   723,   721,   715,    54,     0,     0,
+     483,     0,   508,     0,   210,   211,   212,   213,   209,   215,
+     217,   219,   233,   236,   238,   240,   184,   309,   418,   455,
+       0,   374,   247,     0,     0,   583,     0,   540,   274,   614,
+     615,   616,   613,   619,   633,   635,     0,     0,     0,     0,
+     717,    58,   485,   510,   577,   376,     0,   598,   587,     0,
+     727,     0,   719,   597,     0,   729,   734,     0,   732,     0,
+       0,   731,   743,     0,     0,     0,   748,     0,   736,   738,
+     739,   740,   741,   742,   733,     0,     0,     0,     0,     0,
+       0,   735,     0,   745,   746,   747,     0,   737,   744,   749
   };
 
   const short
   Dhcp6Parser::yypgoto_[] =
   {
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,    54,  -878,  -480,
-    -878,   366,  -878,  -878,  -878,  -878,   272,  -878,  -489,  -878,
-    -878,  -878,   -74,  -878,  -878,  -878,   584,  -878,  -878,  -878,
-    -878,   298,   496,  -878,  -878,   -70,   -46,   -40,   -36,   -22,
-     -17,   -14,     3,     7,    10,    15,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,   295,   493,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   224,  -878,    42,  -878,  -622,    48,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-     -21,  -878,  -650,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,    25,  -878,  -878,  -878,  -878,  -878,    33,
-    -641,  -878,  -878,  -878,  -878,    31,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,    20,  -878,  -878,  -878,    23,   455,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,    17,  -878,  -878,
-    -878,  -878,  -878,  -878,  -877,  -878,  -878,  -878,    53,  -878,
-    -878,  -878,    56,   500,  -878,  -878,  -872,  -878,  -870,  -878,
-     -11,  -878,    -5,  -878,    18,  -878,  -878,  -878,  -869,  -878,
-    -878,  -878,  -878,    46,  -878,  -878,  -139,   874,  -878,  -878,
-    -878,  -878,  -878,    55,  -878,  -878,  -878,    58,  -878,   474,
-    -878,   -69,  -878,  -878,  -878,  -878,  -878,   -66,  -878,  -878,
-    -878,  -878,  -878,   -58,  -878,  -878,  -878,    57,  -878,  -878,
-    -878,    60,  -878,   475,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,     6,  -878,  -878,  -878,     9,
-     508,  -878,  -878,   -53,  -878,   -29,  -878,  -878,  -878,  -878,
-    -878,    11,  -878,  -878,  -878,    12,   504,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,   -62,  -878,  -878,  -878,    49,  -878,
-    -878,  -878,    44,  -878,   498,   290,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -867,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,    59,  -878,  -878,
-    -878,  -124,  -878,  -878,  -878,  -878,  -878,  -878,  -878,    36,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,    37,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,   324,   473,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,   -73,  -878,   -51,
-    -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-    -878,   336,   464,  -878,  -878,  -878,  -878,  -878,  -878,  -878,
-     343,   476,   -44,  -878,  -878,    38,  -878,  -878,  -127,  -878,
-    -878,  -878,  -878,  -878,  -878,  -147,  -878,  -878,  -166,  -878,
-    -878,  -878,  -878,  -878,  -878,  -878
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,    -5,  -921,  -544,
+    -921,   392,  -921,  -921,  -921,  -921,   285,  -921,  -528,  -921,
+    -921,  -921,   -74,  -921,  -921,  -921,   577,  -921,  -921,  -921,
+    -921,   330,   519,  -921,  -921,   -70,   -58,   -38,   -31,   -30,
+     -20,   -17,     1,     9,    12,    13,  -921,    14,    16,    19,
+      24,  -921,   337,    26,  -921,    29,  -921,    30,  -921,    32,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,   321,   545,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   243,  -921,
+      62,  -921,  -662,    68,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,   -46,  -921,  -696,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,    45,  -921,  -921,
+    -921,  -921,  -921,    54,  -685,  -921,  -921,  -921,  -921,    49,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,    39,  -921,
+    -921,  -921,    42,   488,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,    44,  -921,  -921,  -921,  -921,  -921,  -921,  -920,  -921,
+    -921,  -921,    69,  -921,  -921,  -921,    70,   561,  -921,  -921,
+    -918,  -921,  -917,  -921,    38,  -921,    40,  -921,    36,  -921,
+    -921,  -921,  -916,  -921,  -921,  -921,  -921,    61,  -921,  -921,
+    -128,   933,  -921,  -921,  -921,  -921,  -921,    72,  -921,  -921,
+    -921,    71,  -921,   505,  -921,   -69,  -921,  -921,  -921,  -921,
+    -921,   -68,  -921,  -921,  -921,  -921,  -921,    -3,  -921,  -921,
+    -921,    74,  -921,  -921,  -921,    77,  -921,   503,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,    23,
+    -921,  -921,  -921,    31,   565,  -921,  -921,   -56,  -921,   -15,
+    -921,  -921,  -921,  -921,  -921,    28,  -921,  -921,  -921,    33,
+     576,  -921,  -921,  -921,  -921,  -921,  -921,  -921,   -60,  -921,
+    -921,  -921,    59,  -921,  -921,  -921,    64,  -921,   522,   303,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -915,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,    76,  -921,  -921,  -921,  -117,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,    50,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,    53,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,   333,   504,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,  -921,   358,   497,  -921,  -921,  -921,  -921,
+    -921,  -921,  -921,   369,   507,   -61,  -921,  -921,    55,  -921,
+    -921,  -112,  -921,  -921,  -921,  -921,  -921,  -921,  -138,  -921,
+    -921,  -152,  -921,  -921,  -921,  -921,  -921,  -921,  -921
   };
 
   const short
@@ -4471,475 +4581,500 @@ namespace isc { namespace dhcp {
   {
       -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    88,    41,    42,
-      73,   647,    92,    93,    43,    72,    89,    90,   671,   853,
-     949,   950,   737,    45,    74,   101,   102,   103,   388,    47,
-      75,   151,   152,   153,   396,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   414,   167,
-     398,    49,    76,   198,   199,   200,   440,   201,   168,   399,
-     169,   400,   170,   401,   762,   763,   764,   893,   738,   739,
-     740,   871,  1077,   741,   872,   742,   873,   743,   874,   744,
-     745,   477,   746,   747,   748,   749,   750,   751,   752,   753,
-     754,   755,   880,   756,   757,   883,   758,   884,   759,   885,
-     171,   425,   796,   797,   798,   913,   172,   422,   783,   784,
-     785,   786,   173,   424,   791,   792,   793,   794,   174,   423,
-     175,   428,   807,   808,   809,   922,    65,    84,   337,   338,
-     339,   490,   340,   491,   176,   429,   816,   817,   818,   819,
-     820,   821,   822,   823,   177,   415,   766,   767,   768,   896,
-      51,    77,   226,   227,   228,   446,   229,   447,   230,   448,
-     231,   452,   232,   451,   178,   420,   653,   234,   235,   179,
-     421,   778,   779,   780,   905,  1008,  1009,   180,   416,    59,
-      81,   770,   771,   772,   899,    61,    82,   302,   303,   304,
-     305,   306,   307,   308,   476,   309,   480,   310,   479,   311,
-     312,   481,   313,   181,   417,   774,   775,   776,   902,    63,
-      83,   323,   324,   325,   326,   327,   485,   328,   329,   330,
-     331,   237,   444,   855,   856,   857,   951,    53,    78,   248,
-     249,   250,   456,   182,   418,   183,   419,   240,   445,   859,
-     860,   861,   954,    55,    79,   264,   265,   266,   459,   267,
-     268,   461,   269,   270,   184,   427,   803,   804,   805,   919,
-      57,    80,   282,   283,   284,   285,   467,   286,   468,   287,
-     469,   288,   470,   289,   471,   290,   472,   291,   466,   242,
-     453,   864,   865,   957,   185,   426,   800,   801,   916,  1026,
-    1027,  1028,  1029,  1030,  1092,  1031,   186,   430,   833,   834,
-     835,   933,  1101,   836,   837,   934,   838,   839,   187,   188,
-     432,   845,   846,   847,   940,   848,   941,   189,   433,   190,
-     434,    67,    85,   357,   358,   359,   360,   495,   361,   496,
-     362,   363,   498,   364,   365,   366,   501,   703,   367,   502,
-     368,   369,   370,   505,   710,   371,   506,   191,   435,   192,
-     436,   104,   390,   105,   391,   106,   392,   193,   397,    71,
-      87,   379,   380,   381,   511,   382,   107,   389,    69,    86,
-     374,   375,   194,   437,   851,   852,   945,  1060,  1061,  1062,
-    1063,  1107,  1064,  1105,  1126,  1127,  1128,  1136,  1137,  1138,
-    1144,  1139,  1140,  1141,  1142,  1148
+      73,   693,    92,    93,    43,    72,    89,    90,   717,   896,
+     992,   993,   780,    45,    74,   101,   102,   103,   410,    47,
+      75,   157,   158,   159,   418,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   440,   686,   176,   441,   177,   442,   178,   463,   179,
+     464,   180,   436,   181,   420,    49,    76,   210,   211,   212,
+     468,   213,   182,   421,   183,   422,   184,   423,   805,   806,
+     807,   936,   781,   782,   783,   914,  1128,   784,   915,   785,
+     916,   786,   917,   787,   788,   505,   789,   790,   791,   792,
+     793,   794,   795,   796,   797,   798,   923,   799,   800,   926,
+     801,   927,   802,   928,   185,   453,   839,   840,   841,   956,
+     186,   450,   826,   827,   828,   829,   187,   452,   834,   835,
+     836,   837,   188,   451,   189,   456,   850,   851,   852,   965,
+      65,    84,   357,   358,   359,   518,   360,   519,   190,   457,
+     859,   860,   861,   862,   863,   864,   865,   866,   191,   443,
+     809,   810,   811,   939,    51,    77,   246,   247,   248,   474,
+     249,   475,   250,   476,   251,   480,   252,   479,   192,   448,
+     699,   254,   255,   193,   449,   821,   822,   823,   948,  1059,
+    1060,   194,   444,    59,    81,   813,   814,   815,   942,    61,
+      82,   322,   323,   324,   325,   326,   327,   328,   504,   329,
+     508,   330,   507,   331,   332,   509,   333,   195,   445,   817,
+     818,   819,   945,    63,    83,   343,   344,   345,   346,   347,
+     513,   348,   349,   350,   351,   257,   472,   898,   899,   900,
+     994,    53,    78,   268,   269,   270,   484,   196,   446,   197,
+     447,   260,   473,   902,   903,   904,   997,    55,    79,   284,
+     285,   286,   487,   287,   288,   489,   289,   290,   198,   455,
+     846,   847,   848,   962,    57,    80,   302,   303,   304,   305,
+     495,   306,   496,   307,   497,   308,   498,   309,   499,   310,
+     500,   311,   494,   262,   481,   907,   908,  1000,   199,   454,
+     843,   844,   959,  1077,  1078,  1079,  1080,  1081,  1143,  1082,
+     200,   458,   876,   877,   878,   976,  1152,   879,   880,   977,
+     881,   882,   201,   202,   460,   888,   889,   890,   983,   891,
+     984,   203,   461,   204,   462,    67,    85,   379,   380,   381,
+     382,   523,   383,   524,   384,   385,   526,   386,   387,   388,
+     529,   749,   389,   530,   390,   391,   392,   533,   393,   534,
+     394,   535,   395,   536,   104,   412,   105,   413,   106,   414,
+     205,   419,    71,    87,   401,   402,   403,   541,   404,   107,
+     411,    69,    86,   396,   397,   206,   465,   894,   895,   988,
+    1111,  1112,  1113,  1114,  1158,  1115,  1156,  1177,  1178,  1179,
+    1187,  1188,  1189,  1195,  1190,  1191,  1192,  1193,  1199
   };
 
   const unsigned short
   Dhcp6Parser::yytable_[] =
   {
-     100,   150,   197,   214,   244,   258,   278,   215,   300,   319,
-     336,   354,   372,   830,   321,   241,   790,   322,   760,   236,
-     247,   261,   279,   202,   238,   251,   262,   280,  1001,   314,
-     332,   216,   355,  1002,   373,  1003,  1007,   217,  1013,    32,
-      94,   218,   376,   334,   335,   272,    91,   203,   239,   252,
-     263,   281,   862,   315,   333,   219,   356,   195,   196,    44,
-     220,   301,   320,   221,   293,   781,   646,   245,   259,   781,
-     788,    40,   789,   246,   260,    33,    46,    34,   394,    35,
-     222,   646,   128,   395,   223,    48,   908,   224,   677,   909,
-     108,   109,   225,   911,   110,   233,   912,   111,   112,   113,
-     683,   684,   685,   294,   917,   295,   296,   918,   149,   297,
-     298,   299,   130,   131,   334,   335,    99,   438,   130,   131,
-     130,   131,   439,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   946,
-     129,    50,   947,   129,   294,   782,   824,   705,   706,   707,
-     708,   243,  1098,  1099,  1100,   723,   130,   131,   130,   131,
-     383,   130,   131,   132,   840,   841,   377,   378,   133,   134,
-     135,   136,   137,   442,   138,   701,   702,   211,   443,   139,
-     212,  1019,  1020,  1129,   709,    95,  1130,   294,   140,   454,
-      52,   141,    54,   384,   455,    96,    97,    98,   142,    56,
-      58,    60,   130,   131,   130,   131,   143,   144,    62,   457,
-     145,   146,  1001,    99,   458,    64,   464,  1002,    99,  1003,
-    1007,   465,  1013,   129,    99,  1131,    99,    66,  1132,  1133,
-    1134,  1135,   147,   148,    68,   149,   253,   254,   255,   256,
-     257,   130,   131,   649,   650,   651,   652,   492,   825,   826,
-     827,   828,   493,    36,    37,    38,    39,    70,   385,   386,
-     211,   507,    99,   212,    99,   387,   508,    99,   473,   393,
-     790,   980,   810,   811,   812,   813,   814,   815,  1073,  1074,
-    1075,  1076,   402,   403,  1053,   718,  1054,  1055,   830,   404,
-     719,   720,   721,   722,   723,   724,   725,   726,   727,   728,
-     729,   730,   731,   732,   733,   734,   735,   736,    99,   509,
-      99,   513,   438,   509,   510,   405,   514,   867,   868,   406,
-     100,   513,   474,   442,   294,   890,   869,   129,   870,   890,
-     891,   407,   408,   409,   892,   294,   316,   295,   296,   317,
-     318,   410,   411,   914,   931,   130,   131,    99,   915,   932,
-     938,   942,   130,   131,   507,   939,   943,   890,   475,   944,
-     454,  1089,  1085,   271,   150,  1086,  1090,   412,   197,   272,
-     273,   274,   275,   276,   277,   413,   492,  1108,   483,   431,
-     214,  1097,  1109,   244,   215,   441,   457,   484,   464,   202,
-     258,  1111,   241,  1112,   449,   450,   236,  1149,   489,   247,
-     278,   238,  1150,   460,   251,   462,   261,   463,   216,   478,
-     300,   262,   482,   203,   217,   319,   279,   486,   218,   487,
-     321,   280,   488,   322,   494,   239,   497,   499,   252,   500,
-     503,   314,   219,   354,   372,   263,   332,   220,   515,   516,
-     221,   504,   512,   518,   517,   281,   245,    99,   519,   520,
-     521,    99,   246,   259,   355,   315,   373,   222,    99,   260,
-     333,   223,   522,   301,   224,   376,   524,   530,   320,   225,
-     525,   526,   233,   527,   528,   529,   531,   532,   356,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     538,   533,   542,   543,   129,   544,   534,   535,   536,   545,
-     537,   546,   539,   547,   204,   541,   205,   548,   540,   549,
-     550,   551,   130,   131,   206,   207,   208,   209,   210,   132,
-     552,   553,   554,   559,   555,   556,   557,   558,   560,   561,
-     562,   211,   563,   564,   212,   139,   565,   567,   568,   570,
-     130,   131,   213,   571,   572,   573,   574,   576,   575,   577,
-     578,   579,   581,   583,   585,   589,   584,   150,   590,   591,
-     586,   587,   592,   593,   197,   594,   595,   597,   598,   600,
-     599,   601,   602,   603,   633,   634,   635,   605,   606,   607,
-     609,   610,   612,   621,   613,   202,   614,   616,   376,   829,
-     842,   615,   354,   372,   617,   618,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   203,
-     831,   843,   619,   355,   620,   373,   147,   148,    99,   622,
-     623,   624,   627,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   832,   844,   127,   356,   129,   294,
-     628,   630,   631,   632,   636,   637,    99,   638,   639,   640,
-     641,   642,   643,   644,   645,   648,   130,   131,    34,   207,
-     208,   654,   210,   132,   697,   655,   656,   657,   667,   659,
-     658,   660,   661,   668,   894,   211,   662,   663,   212,   664,
-     666,   669,   670,   672,   713,   673,   213,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,   679,   712,   761,   795,   765,   769,   773,   777,
-     674,   799,   802,   675,   676,   806,   850,   678,   854,   680,
-     681,   682,   858,   875,   876,   877,   686,   687,   878,   704,
-     879,   881,   882,   886,   887,   688,   689,   888,   889,   690,
-     691,   895,   897,   692,   898,   900,   901,   904,   903,   693,
-     907,   906,   694,   695,   696,   698,   910,   699,   700,   920,
-     921,   711,    99,   924,   923,   925,   926,   927,   928,   929,
-     930,   935,   936,   937,   948,   953,   952,   955,   956,   964,
-     959,   958,   960,   961,   962,   963,   965,   966,   967,   968,
-     969,   970,   972,   971,   973,   974,   975,   976,  1017,   978,
-     977,  1044,  1045,  1037,  1038,  1039,  1040,  1041,  1042,  1046,
-    1047,  1048,  1050,  1051,  1067,  1078,  1066,  1072,  1093,  1116,
-    1087,  1095,   214,  1088,  1094,   300,   215,  1079,   319,  1080,
-    1096,   988,  1106,   321,   241,   989,   322,  1081,   236,  1115,
-    1082,  1083,  1021,   238,  1118,   278,   314,  1010,   336,   332,
-     216,  1120,  1011,  1123,  1084,  1145,   217,  1091,  1023,   990,
-     218,   279,  1102,  1024,   829,   991,   280,   239,   842,   992,
-     315,  1056,  1103,   333,   219,  1104,  1012,   244,   301,   220,
-     258,   320,   221,   993,  1000,   831,  1110,  1025,   994,   843,
-     281,   995,  1058,   247,  1004,  1022,   261,  1113,   251,   222,
-    1005,   262,  1119,   223,  1125,  1122,   224,  1146,   996,   832,
-    1147,   225,   997,   844,   233,   998,  1059,  1151,  1124,  1155,
-     999,  1153,   252,  1006,  1057,   263,  1152,   665,   787,   714,
-    1154,  1157,  1158,   717,   566,   569,   866,   981,   979,  1018,
-     245,  1015,  1016,   259,  1036,  1035,   246,   611,  1043,   260,
-    1114,   983,   982,  1014,   580,   292,   985,   984,   604,  1069,
-    1068,   987,   986,  1033,   608,   582,  1070,  1071,   588,   863,
-    1034,  1117,   596,   716,  1049,   715,  1032,   629,   523,  1052,
-     625,  1121,  1143,  1156,  1065,   626,     0,     0,     0,     0,
-     849,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   988,     0,     0,     0,   989,
-       0,  1021,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1010,     0,     0,  1056,     0,  1011,  1023,     0,     0,
-       0,     0,  1024,   990,     0,     0,     0,     0,     0,   991,
-       0,     0,     0,   992,     0,  1058,     0,     0,     0,     0,
-    1012,     0,     0,     0,     0,     0,  1025,   993,  1000,     0,
-       0,     0,   994,     0,  1022,   995,     0,     0,  1004,  1059,
-       0,     0,     0,     0,  1005,     0,     0,  1057,     0,     0,
-       0,     0,   996,     0,     0,     0,   997,     0,     0,   998,
-       0,     0,     0,     0,   999,     0,     0,  1006
+     100,   156,   209,   226,   264,   278,   298,   227,   320,   339,
+     356,   376,    40,   873,   341,   342,   803,   261,   833,   228,
+     214,   258,   271,   282,   300,   398,   334,   352,  1052,   377,
+    1053,  1054,  1058,  1064,   824,    94,   321,   340,   692,   229,
+     416,    32,   292,   207,   208,   417,   230,   231,    33,   905,
+      34,   466,    35,   692,   314,   951,   467,   232,   952,    91,
+     233,   215,   259,   272,   283,   301,   954,   335,   353,   955,
+     378,   136,   137,   155,   256,   267,   281,   299,   234,   867,
+      44,   695,   696,   697,   698,   723,   235,   313,   766,   236,
+     237,   238,    46,   239,    48,   470,   240,   729,   730,   731,
+     471,   241,   960,   242,    50,   961,   243,   244,    52,   245,
+     136,   137,   989,   253,   825,   990,   265,   279,   266,   280,
+     354,   355,   108,   109,   824,   831,   110,   832,   482,   111,
+     112,   113,   314,   483,   315,   316,   399,   400,   317,   318,
+     319,   136,   137,   485,   681,   682,   683,   684,   486,   136,
+     137,  1104,    54,  1105,  1106,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,    99,   136,   137,
+     492,   685,  1149,  1150,  1151,   493,    95,   868,   869,   870,
+     871,   354,   355,    99,   136,   137,    96,    97,    98,  1182,
+     135,   138,  1183,  1184,  1185,  1186,   139,   140,   141,   142,
+     143,   263,   144,    56,    99,    58,    99,   145,   136,   137,
+    1052,   134,  1053,  1054,  1058,  1064,   146,    60,    62,   147,
+     883,   884,    36,    37,    38,    39,   148,   223,  1180,    64,
+     224,  1181,   405,   135,   149,   150,   135,    99,   151,   152,
+    1124,  1125,  1126,  1127,    66,    99,   273,   274,   275,   276,
+     277,   136,   137,   520,   136,   137,    68,   537,   521,   833,
+     153,   154,   538,   155,  1023,    70,   539,   406,   747,   748,
+     223,   540,   291,   224,    99,   873,   407,   408,   292,   293,
+     294,   295,   296,   297,   543,   409,   761,   415,   424,   544,
+      99,   762,   763,   764,   765,   766,   767,   768,   769,   770,
+     771,   772,   773,   774,   775,   776,   777,   778,   779,   425,
+     466,   135,   314,   426,    99,   910,   427,   314,   336,   315,
+     316,   337,   338,   853,   854,   855,   856,   857,   858,   136,
+     137,   314,   100,   539,   136,   137,   543,   470,   911,   933,
+     933,   912,   913,   957,   934,   935,   974,   981,   958,  1070,
+    1071,   975,   982,   985,   537,   501,   428,    99,   986,   987,
+      99,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,   933,   502,   482,  1140,
+     520,  1136,   156,  1137,  1141,  1148,   209,   429,  1159,   485,
+     492,   545,   546,  1160,  1162,  1163,   430,   431,   226,   432,
+    1200,   264,   227,   512,   214,  1201,   433,   434,   278,   435,
+     437,   438,   261,   439,   228,   459,   258,   469,   298,   271,
+     477,   478,   488,   490,   491,   517,   282,   506,   320,   503,
+     510,   514,   511,   339,   229,    99,   300,   515,   341,   342,
+      99,   230,   231,   516,   522,   215,   334,   525,   527,   528,
+     531,   352,   232,   376,    99,   233,   321,   259,   532,   542,
+     272,   340,   547,   548,   549,   550,   551,   283,   398,   256,
+     552,   377,   267,   234,   554,   555,   556,   301,   557,   281,
+     558,   235,   136,   137,   236,   237,   238,   335,   239,   299,
+     559,   240,   353,   560,   561,   572,   241,   569,   242,   570,
+     562,   243,   244,   563,   245,   564,   565,   566,   253,   567,
+     568,   571,   378,   265,   573,   266,   574,   575,   576,   577,
+     279,   578,   280,   579,   580,   581,   582,   583,   584,   585,
+     586,   587,   588,   589,   590,   671,   672,   673,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   591,   592,   593,   594,   595,   596,   597,   374,   375,
+     598,   599,   600,   601,   603,   606,   607,   608,   609,   610,
+     604,   611,   612,   613,   614,   615,   617,   619,   620,   621,
+     622,   623,   625,   626,   627,   156,   628,   629,    99,   630,
+     631,   633,   209,   634,   635,   636,   637,   638,   641,   398,
+     639,   645,   642,   646,   643,   649,   648,   650,   652,   655,
+     214,   656,   659,   660,   661,   651,   662,   665,   653,   654,
+     668,   669,   657,   658,   666,   872,   885,   670,   376,   675,
+     674,   743,   676,   677,   678,   679,   680,   687,   688,   689,
+     690,   691,   694,   874,   886,    34,   377,   700,   701,   702,
+     703,   215,   713,   756,   704,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   705,   706,   127,   128,
+     129,   130,   131,   132,   707,   708,   135,   709,   710,   712,
+     715,   714,   716,   718,   875,   887,   216,   378,   217,   719,
+     720,   721,   722,   724,   136,   137,   218,   219,   220,   221,
+     222,   138,   725,   755,   804,   726,   808,   727,   750,   812,
+     816,   820,   842,   223,   845,   838,   224,   145,   849,   893,
+     728,   732,   733,   734,   225,   735,   736,   737,   738,   739,
+     740,   741,   742,   744,   745,   746,   897,   901,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   918,
+     919,   127,   128,   129,   130,   131,   132,   133,   920,   135,
+     314,   921,   922,   752,   924,   753,   754,   925,   929,   930,
+     153,   154,   931,   932,   938,   941,   937,   136,   137,   940,
+     219,   220,   943,   222,   138,   944,   946,   947,   950,   949,
+    1007,   964,   953,   963,   967,   966,   223,   968,   969,   224,
+      99,   970,   971,   972,   973,   978,   979,   225,   980,   995,
+     991,   996,   998,   999,  1009,  1001,  1003,  1002,  1004,  1005,
+    1006,  1008,  1011,  1010,  1012,  1015,  1016,  1013,  1017,  1014,
+    1018,  1019,  1068,  1095,  1096,  1101,  1102,  1118,  1020,  1021,
+    1088,  1089,  1090,  1091,  1092,  1093,  1097,  1098,  1099,  1117,
+    1123,  1144,  1129,   153,   154,   226,  1130,  1138,   320,   227,
+    1139,   339,  1131,  1132,  1031,  1133,   341,   342,  1032,   261,
+    1134,   228,  1135,   258,  1142,  1072,   334,  1145,   298,   352,
+    1033,   356,  1062,    99,  1146,  1147,   321,  1157,  1166,   340,
+    1153,   229,  1051,  1075,  1169,  1154,   300,   872,   230,   231,
+    1034,   885,  1155,  1073,  1107,  1161,  1164,  1035,  1036,   232,
+     264,  1167,   233,   278,   259,   874,  1170,   335,  1037,   886,
+     353,  1038,  1109,  1063,  1171,  1173,   256,  1174,   271,  1175,
+     234,   282,  1108,  1176,  1076,  1061,  1196,   301,   235,  1039,
+    1197,   236,   237,   238,  1198,   239,  1074,  1040,   240,   299,
+    1041,  1042,  1043,   241,  1044,   242,   875,  1045,   243,   244,
+     887,   245,  1046,  1110,  1047,   253,  1202,  1048,  1049,   272,
+    1050,  1203,   283,  1206,  1057,   602,  1055,   830,  1056,   711,
+    1204,   267,  1205,   553,   281,  1208,   751,   760,   909,   757,
+    1024,  1022,  1069,  1067,  1209,  1066,  1087,  1086,   647,  1025,
+    1026,  1065,  1165,  1027,   312,   605,  1028,   640,  1094,  1120,
+     644,  1030,  1029,  1085,   632,  1119,  1084,  1122,   906,  1168,
+    1121,  1100,   265,   759,   266,   279,  1083,   280,  1103,   758,
+     667,   663,  1194,   616,  1116,   892,   664,  1172,  1207,     0,
+     618,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1031,     0,   624,     0,
+    1032,     0,  1072,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1033,     0,  1062,  1107,     0,     0,     0,     0,
+    1075,     0,     0,     0,  1051,     0,     0,     0,     0,     0,
+    1073,     0,  1034,  1109,     0,     0,     0,     0,     0,  1035,
+    1036,     0,     0,  1108,     0,     0,     0,     0,     0,     0,
+    1037,     0,     0,  1038,     0,  1063,     0,     0,     0,     0,
+       0,  1076,     0,     0,     0,     0,     0,  1061,     0,     0,
+       0,  1039,     0,  1074,  1110,     0,     0,     0,     0,  1040,
+       0,     0,  1041,  1042,  1043,     0,  1044,     0,     0,  1045,
+       0,     0,     0,     0,  1046,     0,  1047,     0,     0,  1048,
+    1049,     0,  1050,     0,     0,     0,  1057,     0,  1055,     0,
+    1056
   };
 
   const short
   Dhcp6Parser::yycheck_[] =
   {
       74,    75,    76,    77,    78,    79,    80,    77,    82,    83,
-      84,    85,    85,   663,    83,    77,   657,    83,   640,    77,
-      78,    79,    80,    76,    77,    78,    79,    80,   905,    82,
-      83,    77,    85,   905,    85,   905,   905,    77,   905,     0,
-      10,    77,    86,   110,   111,   101,   183,    76,    77,    78,
-      79,    80,   108,    82,    83,    77,    85,    16,    17,     7,
-      77,    82,    83,    77,    21,   103,   546,    78,    79,   103,
-     104,    17,   106,    78,    79,     5,     7,     7,     3,     9,
-      77,   561,    58,     8,    77,     7,     3,    77,   577,     6,
-      11,    12,    77,     3,    15,    77,     6,    18,    19,    20,
-     589,   590,   591,    60,     3,    62,    63,     6,   156,    66,
-      67,    68,    77,    78,   110,   111,   183,     3,    77,    78,
-      77,    78,     8,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,     3,
-      59,     7,     6,    59,    60,   183,    21,   149,   150,   151,
-     152,    70,   120,   121,   122,    30,    77,    78,    77,    78,
-       6,    77,    78,    84,   129,   130,    13,    14,    89,    90,
-      91,    92,    93,     3,    95,   146,   147,    96,     8,   100,
-      99,    97,    98,     3,   186,   155,     6,    60,   109,     3,
-       7,   112,     7,     3,     8,   165,   166,   167,   119,     7,
-       7,     7,    77,    78,    77,    78,   127,   128,     7,     3,
-     131,   132,  1089,   183,     8,     7,     3,  1089,   183,  1089,
-    1089,     8,  1089,    59,   183,   158,   183,     7,   161,   162,
-     163,   164,   153,   154,     7,   156,    72,    73,    74,    75,
-      76,    77,    78,    85,    86,    87,    88,     3,   123,   124,
-     125,   126,     8,   183,   184,   185,   186,     7,     4,     8,
-      96,     3,   183,    99,   183,     3,     8,   183,     8,     4,
-     911,   893,   113,   114,   115,   116,   117,   118,    22,    23,
-      24,    25,     4,     4,   157,    21,   159,   160,   938,     4,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,   183,     3,
-     183,     3,     3,     3,     8,     4,     8,     8,     8,     4,
-     394,     3,     3,     3,    60,     3,     8,    59,     8,     3,
-       8,     4,     4,     4,     8,    60,    61,    62,    63,    64,
-      65,     4,     4,     3,     3,    77,    78,   183,     8,     8,
-       3,     3,    77,    78,     3,     8,     8,     3,     8,     8,
-       3,     3,     8,    95,   438,     8,     8,     4,   442,   101,
-     102,   103,   104,   105,   106,     4,     3,     3,     8,     4,
-     454,     8,     8,   457,   454,     4,     3,     3,     3,   442,
-     464,     8,   454,     8,     4,     4,   454,     3,     3,   457,
-     474,   454,     8,     4,   457,     4,   464,     4,   454,     4,
-     484,   464,     4,   442,   454,   489,   474,     4,   454,     4,
-     489,   474,     8,   489,     4,   454,     4,     4,   457,     4,
-       4,   484,   454,   507,   507,   464,   489,   454,   384,   385,
-     454,     4,     4,     4,   183,   474,   457,   183,     4,     4,
-       4,   183,   457,   464,   507,   484,   507,   454,   183,   464,
-     489,   454,     4,   484,   454,   509,     4,   184,   489,   454,
-       4,     4,   454,     4,     4,     4,   184,   184,   507,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-     186,   184,     4,     4,    59,     4,   184,   184,   184,     4,
-     184,     4,   185,     4,    69,   184,    71,     4,   185,     4,
-       4,     4,    77,    78,    79,    80,    81,    82,    83,    84,
-       4,     4,     4,   184,     4,     4,     4,     4,     4,     4,
-       4,    96,     4,     4,    99,   100,     4,     4,   186,     4,
-      77,    78,   107,     4,     4,     4,     4,   186,   184,     4,
-       4,     4,     4,     4,     4,     4,   184,   631,     4,     4,
-     184,   184,     4,     4,   638,     4,     4,     4,     4,     4,
-     184,     4,     4,   186,   520,   521,   522,     4,   186,   186,
-       4,     4,   186,   186,     4,   638,     4,     4,   632,   663,
-     664,   184,   666,   666,   184,   184,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   638,
-     663,   664,     4,   666,     4,   666,   153,   154,   183,   186,
-       4,     4,     4,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,   663,   664,    57,   666,    59,    60,
-     184,     4,     7,     7,   183,     7,   183,     7,     7,     7,
-       5,   183,     5,     5,     5,   183,    77,    78,     7,    80,
-      81,     5,    83,    84,   610,     5,     5,     5,   183,     5,
-       7,     5,     5,   183,     6,    96,     7,     7,    99,     7,
-       7,     5,     5,     5,   630,     5,   107,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,     7,     5,     7,    94,     7,     7,     7,     7,
-     183,     7,     7,   183,   183,     7,     7,   183,     7,   183,
-     183,   183,     7,     4,     4,     4,   183,   183,     4,   148,
-       4,     4,     4,     4,     4,   183,   183,     4,     4,   183,
-     183,     3,     6,   183,     3,     6,     3,     3,     6,   183,
-       3,     6,   183,   183,   183,   183,     6,   183,   183,     6,
-       3,   183,   183,     3,     6,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   183,     3,     6,     6,     3,   184,
-       6,     8,     4,     4,     4,     4,   186,   184,   186,   184,
-       4,   184,     4,   184,     4,     4,   184,   184,     4,   184,
-     186,     4,     4,   184,   184,   184,   184,   184,   184,   184,
-     184,   184,     4,     4,     3,   183,     6,     4,     4,   186,
-       8,     3,   896,     8,     8,   899,   896,   183,   902,   183,
-       8,   905,     4,   902,   896,   905,   902,   183,   896,     4,
-     183,   183,   916,   896,     4,   919,   899,   905,   922,   902,
-     896,     4,   905,     5,   183,     4,   896,   183,   916,   905,
-     896,   919,   183,   916,   938,   905,   919,   896,   942,   905,
-     899,   945,   183,   902,   896,   183,   905,   951,   899,   896,
-     954,   902,   896,   905,   905,   938,   183,   916,   905,   942,
-     919,   905,   945,   951,   905,   916,   954,   183,   951,   896,
-     905,   954,   184,   896,     7,   183,   896,     4,   905,   938,
-       4,   896,   905,   942,   896,   905,   945,     4,   183,     4,
-     905,   184,   951,   905,   945,   954,   186,   561,   656,   631,
-     184,   183,   183,   638,   438,   442,   712,   895,   890,   914,
-     951,   908,   911,   954,   924,   922,   951,   492,   931,   954,
-    1089,   898,   896,   907,   454,    81,   901,   899,   484,   953,
-     951,   904,   902,   919,   489,   457,   954,   956,   464,   679,
-     921,  1095,   474,   637,   938,   632,   917,   513,   394,   942,
-     507,  1108,  1129,  1149,   946,   509,    -1,    -1,    -1,    -1,
-     666,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1089,    -1,    -1,    -1,  1089,
-      -1,  1095,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1089,    -1,    -1,  1108,    -1,  1089,  1095,    -1,    -1,
-      -1,    -1,  1095,  1089,    -1,    -1,    -1,    -1,    -1,  1089,
-      -1,    -1,    -1,  1089,    -1,  1108,    -1,    -1,    -1,    -1,
-    1089,    -1,    -1,    -1,    -1,    -1,  1095,  1089,  1089,    -1,
-      -1,    -1,  1089,    -1,  1095,  1089,    -1,    -1,  1089,  1108,
-      -1,    -1,    -1,    -1,  1089,    -1,    -1,  1108,    -1,    -1,
-      -1,    -1,  1089,    -1,    -1,    -1,  1089,    -1,    -1,  1089,
-      -1,    -1,    -1,    -1,  1089,    -1,    -1,  1089
+      84,    85,    17,   709,    83,    83,   678,    77,   703,    77,
+      76,    77,    78,    79,    80,    86,    82,    83,   948,    85,
+     948,   948,   948,   948,   109,    10,    82,    83,   582,    77,
+       3,     0,   107,    16,    17,     8,    77,    77,     5,   114,
+       7,     3,     9,   597,    66,     3,     8,    77,     6,   189,
+      77,    76,    77,    78,    79,    80,     3,    82,    83,     6,
+      85,    83,    84,   162,    77,    78,    79,    80,    77,    21,
+       7,    91,    92,    93,    94,   613,    77,    21,    30,    77,
+      77,    77,     7,    77,     7,     3,    77,   625,   626,   627,
+       8,    77,     3,    77,     7,     6,    77,    77,     7,    77,
+      83,    84,     3,    77,   189,     6,    78,    79,    78,    79,
+     116,   117,    11,    12,   109,   110,    15,   112,     3,    18,
+      19,    20,    66,     8,    68,    69,    13,    14,    72,    73,
+      74,    83,    84,     3,   155,   156,   157,   158,     8,    83,
+      84,   163,     7,   165,   166,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,   189,    83,    84,
+       3,   192,   126,   127,   128,     8,   161,   129,   130,   131,
+     132,   116,   117,   189,    83,    84,   171,   172,   173,   164,
+      65,    90,   167,   168,   169,   170,    95,    96,    97,    98,
+      99,    76,   101,     7,   189,     7,   189,   106,    83,    84,
+    1140,    64,  1140,  1140,  1140,  1140,   115,     7,     7,   118,
+     135,   136,   189,   190,   191,   192,   125,   102,     3,     7,
+     105,     6,     6,    65,   133,   134,    65,   189,   137,   138,
+      22,    23,    24,    25,     7,   189,    78,    79,    80,    81,
+      82,    83,    84,     3,    83,    84,     7,     3,     8,   954,
+     159,   160,     8,   162,   936,     7,     3,     3,   152,   153,
+     102,     8,   101,   105,   189,   981,     4,     8,   107,   108,
+     109,   110,   111,   112,     3,     3,    21,     4,     4,     8,
+     189,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,     4,
+       3,    65,    66,     4,   189,     8,     4,    66,    67,    68,
+      69,    70,    71,   119,   120,   121,   122,   123,   124,    83,
+      84,    66,   416,     3,    83,    84,     3,     3,     8,     3,
+       3,     8,     8,     3,     8,     8,     3,     3,     8,   103,
+     104,     8,     8,     3,     3,     8,     4,   189,     8,     8,
+     189,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,     3,     3,     3,     3,
+       3,     8,   466,     8,     8,     8,   470,     4,     3,     3,
+       3,   406,   407,     8,     8,     8,     4,     4,   482,     4,
+       3,   485,   482,     3,   470,     8,     4,     4,   492,     4,
+       4,     4,   482,     4,   482,     4,   482,     4,   502,   485,
+       4,     4,     4,     4,     4,     3,   492,     4,   512,     8,
+       4,     4,     8,   517,   482,   189,   502,     4,   517,   517,
+     189,   482,   482,     8,     4,   470,   512,     4,     4,     4,
+       4,   517,   482,   537,   189,   482,   512,   482,     4,     4,
+     485,   517,   189,     4,     4,     4,     4,   492,   539,   482,
+       4,   537,   485,   482,     4,     4,     4,   502,     4,   492,
+       4,   482,    83,    84,   482,   482,   482,   512,   482,   502,
+       4,   482,   517,   190,   190,     4,   482,   191,   482,   191,
+     190,   482,   482,   190,   482,   190,   190,   190,   482,   190,
+     192,   190,   537,   485,   192,   485,   192,   192,     4,     4,
+     492,     4,   492,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   550,   551,   552,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,     4,     4,     4,     4,   190,     4,     4,   159,   160,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+     192,   190,   192,     4,     4,     4,     4,     4,   190,     4,
+     190,   190,     4,     4,     4,   669,     4,     4,   189,     4,
+       4,     4,   676,     4,   190,     4,     4,     4,     4,   670,
+     192,     4,   192,     4,   192,     4,   192,     4,     4,     4,
+     676,     4,     4,     4,     4,   190,     4,     4,   190,   190,
+       4,     7,   192,   192,   190,   709,   710,     7,   712,     7,
+     189,   646,     7,     7,     7,     5,   189,   189,   189,     5,
+       5,     5,   189,   709,   710,     7,   712,     5,     5,     5,
+       5,   676,   189,   668,     7,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,     5,     5,    57,    58,
+      59,    60,    61,    62,     5,     7,    65,     7,     7,     7,
+       5,   189,     5,     5,   709,   710,    75,   712,    77,     5,
+     189,   189,   189,   189,    83,    84,    85,    86,    87,    88,
+      89,    90,     7,     5,     7,   189,     7,   189,   154,     7,
+       7,     7,     7,   102,     7,   100,   105,   106,     7,     7,
+     189,   189,   189,   189,   113,   189,   189,   189,   189,   189,
+     189,   189,   189,   189,   189,   189,     7,     7,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     4,
+       4,    57,    58,    59,    60,    61,    62,    63,     4,    65,
+      66,     4,     4,   189,     4,   189,   189,     4,     4,     4,
+     159,   160,     4,     4,     3,     3,     6,    83,    84,     6,
+      86,    87,     6,    89,    90,     3,     6,     3,     3,     6,
+     190,     3,     6,     6,     3,     6,   102,     4,     4,   105,
+     189,     4,     4,     4,     4,     4,     4,   113,     4,     6,
+     189,     3,     6,     3,   190,     8,     4,     6,     4,     4,
+       4,   192,   190,   192,     4,     4,     4,   190,     4,   190,
+     190,   190,     4,     4,     4,     4,     4,     3,   192,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,     6,
+       4,     4,   189,   159,   160,   939,   189,     8,   942,   939,
+       8,   945,   189,   189,   948,   189,   945,   945,   948,   939,
+     189,   939,   189,   939,   189,   959,   942,     8,   962,   945,
+     948,   965,   948,   189,     3,     8,   942,     4,     4,   945,
+     189,   939,   948,   959,     4,   189,   962,   981,   939,   939,
+     948,   985,   189,   959,   988,   189,   189,   948,   948,   939,
+     994,   192,   939,   997,   939,   981,   190,   942,   948,   985,
+     945,   948,   988,   948,     4,   189,   939,     5,   994,   189,
+     939,   997,   988,     7,   959,   948,     4,   962,   939,   948,
+       4,   939,   939,   939,     4,   939,   959,   948,   939,   962,
+     948,   948,   948,   939,   948,   939,   981,   948,   939,   939,
+     985,   939,   948,   988,   948,   939,     4,   948,   948,   994,
+     948,   192,   997,     4,   948,   466,   948,   702,   948,   597,
+     190,   994,   190,   416,   997,   189,   659,   676,   755,   669,
+     938,   933,   957,   954,   189,   951,   967,   965,   520,   939,
+     941,   950,  1140,   942,    81,   470,   944,   512,   974,   996,
+     517,   947,   945,   964,   502,   994,   962,   999,   725,  1146,
+     997,   981,   994,   675,   994,   997,   960,   997,   985,   670,
+     543,   537,  1180,   482,   989,   712,   539,  1159,  1200,    -1,
+     485,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1140,    -1,   492,    -1,
+    1140,    -1,  1146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1140,    -1,  1140,  1159,    -1,    -1,    -1,    -1,
+    1146,    -1,    -1,    -1,  1140,    -1,    -1,    -1,    -1,    -1,
+    1146,    -1,  1140,  1159,    -1,    -1,    -1,    -1,    -1,  1140,
+    1140,    -1,    -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,
+    1140,    -1,    -1,  1140,    -1,  1140,    -1,    -1,    -1,    -1,
+      -1,  1146,    -1,    -1,    -1,    -1,    -1,  1140,    -1,    -1,
+      -1,  1140,    -1,  1146,  1159,    -1,    -1,    -1,    -1,  1140,
+      -1,    -1,  1140,  1140,  1140,    -1,  1140,    -1,    -1,  1140,
+      -1,    -1,    -1,    -1,  1140,    -1,  1140,    -1,    -1,  1140,
+    1140,    -1,  1140,    -1,    -1,    -1,  1140,    -1,  1140,    -1,
+    1140
   };
 
   const unsigned short
   Dhcp6Parser::yystos_[] =
   {
-       0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,     0,     5,     7,     9,   183,   184,   185,   186,
-     204,   205,   206,   211,     7,   220,     7,   226,     7,   248,
-       7,   347,     7,   424,     7,   440,     7,   457,     7,   376,
-       7,   382,     7,   406,     7,   323,     7,   518,     7,   565,
-       7,   556,   212,   207,   221,   227,   249,   348,   425,   441,
-     458,   377,   383,   407,   324,   519,   566,   557,   204,   213,
-     214,   183,   209,   210,    10,   155,   165,   166,   167,   183,
-     219,   222,   223,   224,   548,   550,   552,   563,    11,    12,
+       0,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,     0,     5,     7,     9,   189,   190,   191,   192,
+     210,   211,   212,   217,     7,   226,     7,   232,     7,   268,
+       7,   367,     7,   444,     7,   460,     7,   477,     7,   396,
+       7,   402,     7,   426,     7,   343,     7,   538,     7,   584,
+       7,   575,   218,   213,   227,   233,   269,   368,   445,   461,
+     478,   397,   403,   427,   344,   539,   585,   576,   210,   219,
+     220,   189,   215,   216,    10,   161,   171,   172,   173,   189,
+     225,   228,   229,   230,   567,   569,   571,   582,    11,    12,
       15,    18,    19,    20,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      77,    78,    84,    89,    90,    91,    92,    93,    95,   100,
-     109,   112,   119,   127,   128,   131,   132,   153,   154,   156,
-     219,   228,   229,   230,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   246,   255,   257,
-     259,   297,   303,   309,   315,   317,   331,   341,   361,   366,
-     374,   400,   430,   432,   451,   481,   493,   505,   506,   514,
-     516,   544,   546,   554,   569,    16,    17,   219,   250,   251,
-     252,   254,   430,   432,    69,    71,    79,    80,    81,    82,
-      83,    96,    99,   107,   219,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   349,   350,   351,   353,
-     355,   357,   359,   361,   364,   365,   400,   418,   430,   432,
-     434,   451,   476,    70,   219,   357,   359,   400,   426,   427,
-     428,   430,   432,    72,    73,    74,    75,    76,   219,   357,
-     359,   400,   430,   432,   442,   443,   444,   446,   447,   449,
-     450,    95,   101,   102,   103,   104,   105,   106,   219,   400,
-     430,   432,   459,   460,   461,   462,   464,   466,   468,   470,
-     472,   474,   374,    21,    60,    62,    63,    66,    67,    68,
-     219,   277,   384,   385,   386,   387,   388,   389,   390,   392,
-     394,   396,   397,   399,   430,   432,    61,    64,    65,   219,
-     277,   388,   394,   408,   409,   410,   411,   412,   414,   415,
-     416,   417,   430,   432,   110,   111,   219,   325,   326,   327,
-     329,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   219,   430,   432,   520,   521,   522,
-     523,   525,   527,   528,   530,   531,   532,   535,   537,   538,
-     539,   542,   544,   546,   567,   568,   569,    13,    14,   558,
-     559,   560,   562,     6,     3,     4,     8,     3,   225,   564,
-     549,   551,   553,     4,     3,     8,   231,   555,   247,   256,
-     258,   260,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   245,   342,   375,   401,   431,   433,
-     362,   367,   304,   316,   310,   298,   482,   452,   318,   332,
-     494,     4,   507,   515,   517,   545,   547,   570,     3,     8,
-     253,     4,     3,     8,   419,   435,   352,   354,   356,     4,
-       4,   360,   358,   477,     3,     8,   429,     3,     8,   445,
-       4,   448,     4,     4,     3,     8,   475,   463,   465,   467,
-     469,   471,   473,     8,     3,     8,   391,   278,     4,   395,
-     393,   398,     4,     8,     3,   413,     4,     4,     8,     3,
-     328,   330,     3,     8,     4,   524,   526,     4,   529,     4,
-       4,   533,   536,     4,     4,   540,   543,     3,     8,     3,
-       8,   561,     4,     3,     8,   204,   204,   183,     4,     4,
-       4,     4,     4,   223,     4,     4,     4,     4,     4,     4,
-     184,   184,   184,   184,   184,   184,   184,   184,   186,   185,
-     185,   184,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,   184,
-       4,     4,     4,     4,     4,     4,   229,     4,   186,   251,
-       4,     4,     4,     4,     4,   184,   186,     4,     4,     4,
-     350,     4,   427,     4,   184,     4,   184,   184,   443,     4,
-       4,     4,     4,     4,     4,     4,   461,     4,     4,   184,
-       4,     4,     4,   186,   386,     4,   186,   186,   410,     4,
-       4,   326,   186,     4,     4,   184,     4,   184,   184,     4,
-       4,   186,   186,     4,     4,   521,   568,     4,   184,   559,
-       4,     7,     7,   204,   204,   204,   183,     7,     7,     7,
-       7,     5,   183,     5,     5,     5,   206,   208,   183,    85,
-      86,    87,    88,   363,     5,     5,     5,     5,     7,     5,
-       5,     5,     7,     7,     7,   208,     7,   183,   183,     5,
-       5,   215,     5,     5,   183,   183,   183,   215,   183,     7,
-     183,   183,   183,   215,   215,   215,   183,   183,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   204,   183,   183,
-     183,   146,   147,   534,   148,   149,   150,   151,   152,   186,
-     541,   183,     5,   204,   228,   567,   558,   250,    21,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,   219,   265,   266,
-     267,   270,   272,   274,   276,   277,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   290,   291,   293,   295,
-     265,     7,   261,   262,   263,     7,   343,   344,   345,     7,
-     378,   379,   380,     7,   402,   403,   404,     7,   368,   369,
-     370,   103,   183,   305,   306,   307,   308,   213,   104,   106,
-     307,   311,   312,   313,   314,    94,   299,   300,   301,     7,
-     483,   484,     7,   453,   454,   455,     7,   319,   320,   321,
-     113,   114,   115,   116,   117,   118,   333,   334,   335,   336,
-     337,   338,   339,   340,    21,   123,   124,   125,   126,   219,
-     279,   430,   432,   495,   496,   497,   500,   501,   503,   504,
-     129,   130,   219,   430,   432,   508,   509,   510,   512,   520,
-       7,   571,   572,   216,     7,   420,   421,   422,     7,   436,
-     437,   438,   108,   462,   478,   479,   261,     8,     8,     8,
-       8,   268,   271,   273,   275,     4,     4,     4,     4,     4,
-     289,     4,     4,   292,   294,   296,     4,     4,     4,     4,
-       3,     8,     8,   264,     6,     3,   346,     6,     3,   381,
-       6,     3,   405,     6,     3,   371,     6,     3,     3,     6,
-       6,     3,     6,   302,     3,     8,   485,     3,     6,   456,
-       6,     3,   322,     6,     3,     4,     4,     4,     4,     4,
-       4,     3,     8,   498,   502,     4,     4,     4,     3,     8,
-     511,   513,     3,     8,     8,   573,     3,     6,   183,   217,
-     218,   423,     6,     3,   439,     6,     3,   480,     8,     6,
-       4,     4,     4,     4,   184,   186,   184,   186,   184,     4,
-     184,   184,     4,     4,     4,   184,   184,   186,   184,   266,
-     265,   263,   349,   345,   384,   380,   408,   404,   219,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     277,   341,   353,   355,   357,   359,   361,   365,   372,   373,
-     400,   430,   432,   476,   370,   306,   312,     4,   300,    97,
-      98,   219,   277,   400,   430,   432,   486,   487,   488,   489,
-     490,   492,   484,   459,   455,   325,   321,   184,   184,   184,
-     184,   184,   184,   334,     4,     4,   184,   184,   184,   496,
-       4,     4,   509,   157,   159,   160,   219,   277,   430,   432,
-     574,   575,   576,   577,   579,   572,     6,     3,   426,   422,
-     442,   438,     4,    22,    23,    24,    25,   269,   183,   183,
-     183,   183,   183,   183,   183,     8,     8,     8,     8,     3,
-       8,   183,   491,     4,     8,     3,     8,     8,   120,   121,
-     122,   499,   183,   183,   183,   580,     4,   578,     3,     8,
-     183,     8,     8,   183,   373,     4,   186,   488,     4,   184,
-       4,   575,   183,     5,   183,     7,   581,   582,   583,     3,
-       6,   158,   161,   162,   163,   164,   584,   585,   586,   588,
-     589,   590,   591,   582,   587,     4,     4,     4,   592,     3,
-       8,     4,   186,   184,   184,     4,   585,   183,   183
+      60,    61,    62,    63,    64,    65,    83,    84,    90,    95,
+      96,    97,    98,    99,   101,   106,   115,   118,   125,   133,
+     134,   137,   138,   159,   160,   162,   225,   234,   235,   236,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   256,   258,   260,   262,
+     264,   266,   275,   277,   279,   317,   323,   329,   335,   337,
+     351,   361,   381,   386,   394,   420,   450,   452,   471,   501,
+     513,   525,   526,   534,   536,   573,   588,    16,    17,   225,
+     270,   271,   272,   274,   450,   452,    75,    77,    85,    86,
+      87,    88,    89,   102,   105,   113,   225,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   250,   251,
+     252,   253,   256,   258,   260,   262,   369,   370,   371,   373,
+     375,   377,   379,   381,   384,   385,   420,   438,   450,   452,
+     454,   471,   496,    76,   225,   377,   379,   420,   446,   447,
+     448,   450,   452,    78,    79,    80,    81,    82,   225,   377,
+     379,   420,   450,   452,   462,   463,   464,   466,   467,   469,
+     470,   101,   107,   108,   109,   110,   111,   112,   225,   420,
+     450,   452,   479,   480,   481,   482,   484,   486,   488,   490,
+     492,   494,   394,    21,    66,    68,    69,    72,    73,    74,
+     225,   297,   404,   405,   406,   407,   408,   409,   410,   412,
+     414,   416,   417,   419,   450,   452,    67,    70,    71,   225,
+     297,   408,   414,   428,   429,   430,   431,   432,   434,   435,
+     436,   437,   450,   452,   116,   117,   225,   345,   346,   347,
+     349,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   159,   160,   225,   450,   452,   540,
+     541,   542,   543,   545,   547,   548,   550,   551,   552,   555,
+     557,   558,   559,   561,   563,   565,   586,   587,   588,    13,
+      14,   577,   578,   579,   581,     6,     3,     4,     8,     3,
+     231,   583,   568,   570,   572,     4,     3,     8,   237,   574,
+     267,   276,   278,   280,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,   265,     4,     4,     4,
+     254,   257,   259,   362,   395,   421,   451,   453,   382,   387,
+     324,   336,   330,   318,   502,   472,   338,   352,   514,     4,
+     527,   535,   537,   261,   263,   589,     3,     8,   273,     4,
+       3,     8,   439,   455,   372,   374,   376,     4,     4,   380,
+     378,   497,     3,     8,   449,     3,     8,   465,     4,   468,
+       4,     4,     3,     8,   495,   483,   485,   487,   489,   491,
+     493,     8,     3,     8,   411,   298,     4,   415,   413,   418,
+       4,     8,     3,   433,     4,     4,     8,     3,   348,   350,
+       3,     8,     4,   544,   546,     4,   549,     4,     4,   553,
+     556,     4,     4,   560,   562,   564,   566,     3,     8,     3,
+       8,   580,     4,     3,     8,   210,   210,   189,     4,     4,
+       4,     4,     4,   229,     4,     4,     4,     4,     4,     4,
+     190,   190,   190,   190,   190,   190,   190,   190,   192,   191,
+     191,   190,     4,   192,   192,   192,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   190,     4,     4,     4,     4,
+       4,     4,   235,     4,   192,   271,     4,     4,     4,     4,
+       4,   190,   192,     4,     4,     4,   370,     4,   447,     4,
+     190,     4,   190,   190,   463,     4,     4,     4,     4,     4,
+       4,     4,   481,     4,     4,   190,     4,     4,     4,   192,
+     406,     4,   192,   192,   430,     4,     4,   346,   192,     4,
+       4,   190,     4,   190,   190,     4,     4,   192,   192,     4,
+       4,     4,     4,   541,   587,     4,   190,   578,     4,     7,
+       7,   210,   210,   210,   189,     7,     7,     7,     7,     5,
+     189,   155,   156,   157,   158,   192,   255,   189,   189,     5,
+       5,     5,   212,   214,   189,    91,    92,    93,    94,   383,
+       5,     5,     5,     5,     7,     5,     5,     5,     7,     7,
+       7,   214,     7,   189,   189,     5,     5,   221,     5,     5,
+     189,   189,   189,   221,   189,     7,   189,   189,   189,   221,
+     221,   221,   189,   189,   189,   189,   189,   189,   189,   189,
+     189,   189,   189,   210,   189,   189,   189,   152,   153,   554,
+     154,   255,   189,   189,   189,     5,   210,   234,   586,   577,
+     270,    21,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+     225,   285,   286,   287,   290,   292,   294,   296,   297,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   310,
+     311,   313,   315,   285,     7,   281,   282,   283,     7,   363,
+     364,   365,     7,   398,   399,   400,     7,   422,   423,   424,
+       7,   388,   389,   390,   109,   189,   325,   326,   327,   328,
+     219,   110,   112,   327,   331,   332,   333,   334,   100,   319,
+     320,   321,     7,   503,   504,     7,   473,   474,   475,     7,
+     339,   340,   341,   119,   120,   121,   122,   123,   124,   353,
+     354,   355,   356,   357,   358,   359,   360,    21,   129,   130,
+     131,   132,   225,   299,   450,   452,   515,   516,   517,   520,
+     521,   523,   524,   135,   136,   225,   450,   452,   528,   529,
+     530,   532,   540,     7,   590,   591,   222,     7,   440,   441,
+     442,     7,   456,   457,   458,   114,   482,   498,   499,   281,
+       8,     8,     8,     8,   288,   291,   293,   295,     4,     4,
+       4,     4,     4,   309,     4,     4,   312,   314,   316,     4,
+       4,     4,     4,     3,     8,     8,   284,     6,     3,   366,
+       6,     3,   401,     6,     3,   425,     6,     3,   391,     6,
+       3,     3,     6,     6,     3,     6,   322,     3,     8,   505,
+       3,     6,   476,     6,     3,   342,     6,     3,     4,     4,
+       4,     4,     4,     4,     3,     8,   518,   522,     4,     4,
+       4,     3,     8,   531,   533,     3,     8,     8,   592,     3,
+       6,   189,   223,   224,   443,     6,     3,   459,     6,     3,
+     500,     8,     6,     4,     4,     4,     4,   190,   192,   190,
+     192,   190,     4,   190,   190,     4,     4,     4,   190,   190,
+     192,   190,   286,   285,   283,   369,   365,   404,   400,   428,
+     424,   225,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   250,   251,   252,   253,   256,   258,   260,
+     262,   297,   361,   373,   375,   377,   379,   381,   385,   392,
+     393,   420,   450,   452,   496,   390,   326,   332,     4,   320,
+     103,   104,   225,   297,   420,   450,   452,   506,   507,   508,
+     509,   510,   512,   504,   479,   475,   345,   341,   190,   190,
+     190,   190,   190,   190,   354,     4,     4,   190,   190,   190,
+     516,     4,     4,   529,   163,   165,   166,   225,   297,   450,
+     452,   593,   594,   595,   596,   598,   591,     6,     3,   446,
+     442,   462,   458,     4,    22,    23,    24,    25,   289,   189,
+     189,   189,   189,   189,   189,   189,     8,     8,     8,     8,
+       3,     8,   189,   511,     4,     8,     3,     8,     8,   126,
+     127,   128,   519,   189,   189,   189,   599,     4,   597,     3,
+       8,   189,     8,     8,   189,   393,     4,   192,   508,     4,
+     190,     4,   594,   189,     5,   189,     7,   600,   601,   602,
+       3,     6,   164,   167,   168,   169,   170,   603,   604,   605,
+     607,   608,   609,   610,   601,   606,     4,     4,     4,   611,
+       3,     8,     4,   192,   190,   190,     4,   604,   189,   189
   };
 
   const unsigned short
   Dhcp6Parser::yyr1_[] =
   {
-       0,   187,   189,   188,   190,   188,   191,   188,   192,   188,
-     193,   188,   194,   188,   195,   188,   196,   188,   197,   188,
-     198,   188,   199,   188,   200,   188,   201,   188,   202,   188,
-     203,   188,   204,   204,   204,   204,   204,   204,   204,   205,
-     207,   206,   208,   209,   209,   210,   210,   212,   211,   213,
-     213,   214,   214,   216,   215,   217,   217,   218,   218,   219,
-     221,   220,   222,   222,   223,   223,   223,   223,   223,   223,
-     225,   224,   227,   226,   228,   228,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   229,   229,   229,   229,   229,   229,   229,   231,
-     230,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   245,   244,   247,   246,   249,   248,   250,
-     250,   251,   251,   251,   251,   251,   253,   252,   254,   256,
-     255,   258,   257,   260,   259,   261,   261,   262,   262,   264,
-     263,   265,   265,   266,   266,   266,   266,   266,   266,   266,
-     266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-     266,   266,   266,   266,   268,   267,   269,   269,   269,   269,
-     271,   270,   273,   272,   275,   274,   276,   278,   277,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   289,   288,
-     290,   292,   291,   294,   293,   296,   295,   298,   297,   299,
-     299,   300,   302,   301,   304,   303,   305,   305,   306,   306,
-     307,   308,   310,   309,   311,   311,   312,   312,   312,   313,
-     314,   316,   315,   318,   317,   319,   319,   320,   320,   322,
-     321,   324,   323,   325,   325,   325,   326,   326,   328,   327,
-     330,   329,   332,   331,   333,   333,   334,   334,   334,   334,
-     334,   334,   335,   336,   337,   338,   339,   340,   342,   341,
-     343,   343,   344,   344,   346,   345,   348,   347,   349,   349,
-     350,   350,   350,   350,   350,   350,   350,   350,   350,   350,
-     350,   350,   350,   350,   350,   350,   350,   350,   350,   350,
-     350,   350,   350,   350,   350,   350,   350,   352,   351,   354,
-     353,   356,   355,   358,   357,   360,   359,   362,   361,   363,
-     363,   363,   363,   364,   365,   367,   366,   368,   368,   369,
-     369,   371,   370,   372,   372,   373,   373,   373,   373,   373,
-     373,   373,   373,   373,   373,   373,   373,   373,   373,   373,
-     373,   373,   373,   373,   373,   373,   373,   373,   373,   375,
-     374,   377,   376,   378,   378,   379,   379,   381,   380,   383,
-     382,   384,   384,   385,   385,   386,   386,   386,   386,   386,
-     386,   386,   386,   386,   386,   387,   388,   389,   391,   390,
-     393,   392,   395,   394,   396,   398,   397,   399,   401,   400,
-     402,   402,   403,   403,   405,   404,   407,   406,   408,   408,
-     409,   409,   410,   410,   410,   410,   410,   410,   410,   410,
-     410,   411,   413,   412,   414,   415,   416,   417,   419,   418,
-     420,   420,   421,   421,   423,   422,   425,   424,   426,   426,
-     427,   427,   427,   427,   427,   427,   427,   429,   428,   431,
-     430,   433,   432,   435,   434,   436,   436,   437,   437,   439,
-     438,   441,   440,   442,   442,   443,   443,   443,   443,   443,
-     443,   443,   443,   443,   443,   443,   445,   444,   446,   448,
-     447,   449,   450,   452,   451,   453,   453,   454,   454,   456,
-     455,   458,   457,   459,   459,   460,   460,   461,   461,   461,
-     461,   461,   461,   461,   461,   461,   461,   461,   463,   462,
-     465,   464,   467,   466,   469,   468,   471,   470,   473,   472,
-     475,   474,   477,   476,   478,   478,   480,   479,   482,   481,
-     483,   483,   485,   484,   486,   486,   487,   487,   488,   488,
-     488,   488,   488,   488,   488,   489,   491,   490,   492,   494,
-     493,   495,   495,   496,   496,   496,   496,   496,   496,   496,
-     496,   496,   498,   497,   499,   499,   499,   500,   502,   501,
-     503,   504,   505,   507,   506,   508,   508,   509,   509,   509,
-     509,   509,   511,   510,   513,   512,   515,   514,   517,   516,
-     519,   518,   520,   520,   521,   521,   521,   521,   521,   521,
-     521,   521,   521,   521,   521,   521,   521,   521,   521,   521,
-     521,   521,   522,   524,   523,   526,   525,   527,   529,   528,
-     530,   531,   533,   532,   534,   534,   536,   535,   537,   538,
-     540,   539,   541,   541,   541,   541,   541,   543,   542,   545,
-     544,   547,   546,   549,   548,   551,   550,   553,   552,   555,
-     554,   557,   556,   558,   558,   559,   559,   561,   560,   562,
-     564,   563,   566,   565,   567,   567,   568,   570,   569,   571,
-     571,   573,   572,   574,   574,   575,   575,   575,   575,   575,
-     575,   575,   576,   578,   577,   580,   579,   581,   581,   583,
-     582,   584,   584,   585,   585,   585,   585,   585,   587,   586,
-     588,   589,   590,   592,   591
+       0,   193,   195,   194,   196,   194,   197,   194,   198,   194,
+     199,   194,   200,   194,   201,   194,   202,   194,   203,   194,
+     204,   194,   205,   194,   206,   194,   207,   194,   208,   194,
+     209,   194,   210,   210,   210,   210,   210,   210,   210,   211,
+     213,   212,   214,   215,   215,   216,   216,   218,   217,   219,
+     219,   220,   220,   222,   221,   223,   223,   224,   224,   225,
+     227,   226,   228,   228,   229,   229,   229,   229,   229,   229,
+     231,   230,   233,   232,   234,   234,   235,   235,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   235,   235,   235,   235,   237,   236,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   254,   253,   255,   255,   255,   255,   255,   257,
+     256,   259,   258,   261,   260,   263,   262,   265,   264,   267,
+     266,   269,   268,   270,   270,   271,   271,   271,   271,   271,
+     273,   272,   274,   276,   275,   278,   277,   280,   279,   281,
+     281,   282,   282,   284,   283,   285,   285,   286,   286,   286,
+     286,   286,   286,   286,   286,   286,   286,   286,   286,   286,
+     286,   286,   286,   286,   286,   286,   286,   286,   288,   287,
+     289,   289,   289,   289,   291,   290,   293,   292,   295,   294,
+     296,   298,   297,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   309,   308,   310,   312,   311,   314,   313,   316,
+     315,   318,   317,   319,   319,   320,   322,   321,   324,   323,
+     325,   325,   326,   326,   327,   328,   330,   329,   331,   331,
+     332,   332,   332,   333,   334,   336,   335,   338,   337,   339,
+     339,   340,   340,   342,   341,   344,   343,   345,   345,   345,
+     346,   346,   348,   347,   350,   349,   352,   351,   353,   353,
+     354,   354,   354,   354,   354,   354,   355,   356,   357,   358,
+     359,   360,   362,   361,   363,   363,   364,   364,   366,   365,
+     368,   367,   369,   369,   370,   370,   370,   370,   370,   370,
+     370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
+     370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
+     370,   370,   370,   370,   370,   370,   370,   370,   370,   372,
+     371,   374,   373,   376,   375,   378,   377,   380,   379,   382,
+     381,   383,   383,   383,   383,   384,   385,   387,   386,   388,
+     388,   389,   389,   391,   390,   392,   392,   393,   393,   393,
+     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+     393,   393,   393,   393,   393,   393,   393,   393,   393,   393,
+     393,   393,   393,   393,   393,   393,   393,   393,   393,   395,
+     394,   397,   396,   398,   398,   399,   399,   401,   400,   403,
+     402,   404,   404,   405,   405,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   407,   408,   409,   411,   410,
+     413,   412,   415,   414,   416,   418,   417,   419,   421,   420,
+     422,   422,   423,   423,   425,   424,   427,   426,   428,   428,
+     429,   429,   430,   430,   430,   430,   430,   430,   430,   430,
+     430,   431,   433,   432,   434,   435,   436,   437,   439,   438,
+     440,   440,   441,   441,   443,   442,   445,   444,   446,   446,
+     447,   447,   447,   447,   447,   447,   447,   449,   448,   451,
+     450,   453,   452,   455,   454,   456,   456,   457,   457,   459,
+     458,   461,   460,   462,   462,   463,   463,   463,   463,   463,
+     463,   463,   463,   463,   463,   463,   465,   464,   466,   468,
+     467,   469,   470,   472,   471,   473,   473,   474,   474,   476,
+     475,   478,   477,   479,   479,   480,   480,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   483,   482,
+     485,   484,   487,   486,   489,   488,   491,   490,   493,   492,
+     495,   494,   497,   496,   498,   498,   500,   499,   502,   501,
+     503,   503,   505,   504,   506,   506,   507,   507,   508,   508,
+     508,   508,   508,   508,   508,   509,   511,   510,   512,   514,
+     513,   515,   515,   516,   516,   516,   516,   516,   516,   516,
+     516,   516,   518,   517,   519,   519,   519,   520,   522,   521,
+     523,   524,   525,   527,   526,   528,   528,   529,   529,   529,
+     529,   529,   531,   530,   533,   532,   535,   534,   537,   536,
+     539,   538,   540,   540,   541,   541,   541,   541,   541,   541,
+     541,   541,   541,   541,   541,   541,   541,   541,   541,   541,
+     541,   541,   542,   544,   543,   546,   545,   547,   549,   548,
+     550,   551,   553,   552,   554,   554,   556,   555,   557,   558,
+     560,   559,   562,   561,   564,   563,   566,   565,   568,   567,
+     570,   569,   572,   571,   574,   573,   576,   575,   577,   577,
+     578,   578,   580,   579,   581,   583,   582,   585,   584,   586,
+     586,   587,   589,   588,   590,   590,   592,   591,   593,   593,
+     594,   594,   594,   594,   594,   594,   594,   595,   597,   596,
+     599,   598,   600,   600,   602,   601,   603,   603,   604,   604,
+     604,   604,   604,   606,   605,   607,   608,   609,   611,   610
   };
 
   const unsigned char
@@ -4956,30 +5091,34 @@ namespace isc { namespace dhcp {
        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,     0,
-       4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     0,     4,     0,     6,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     0,     4,     3,     0,
-       6,     0,     6,     0,     6,     0,     1,     1,     3,     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,     0,     4,     1,     1,     1,     1,
-       0,     4,     0,     4,     0,     4,     3,     0,     4,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,     0,     4,
-       3,     0,     4,     0,     4,     0,     4,     0,     6,     1,
-       3,     1,     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,     0,     4,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     0,     4,     1,     1,     1,     1,     1,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     1,     3,     1,     1,     1,     1,     1,
+       0,     4,     3,     0,     6,     0,     6,     0,     6,     0,
+       1,     1,     3,     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,     0,     4,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       3,     0,     4,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     0,     4,     3,     0,     4,     0,     4,     0,
+       4,     0,     6,     1,     3,     1,     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,     1,     1,
+       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,     0,
+       4,     1,     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,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     1,
-       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,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
        6,     0,     4,     0,     1,     1,     3,     0,     4,     0,
@@ -5009,14 +5148,13 @@ namespace isc { namespace dhcp {
        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,
-       0,     4,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       6,     0,     4,     1,     3,     1,     1,     0,     6,     3,
-       0,     6,     0,     4,     1,     3,     1,     0,     6,     1,
-       3,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     0,     4,     0,     6,     1,     3,     0,
-       4,     1,     3,     1,     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,     1,     3,
+       1,     1,     0,     6,     3,     0,     6,     0,     4,     1,
+       3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
+       0,     6,     1,     3,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     0,     4,     3,     3,     3,     0,     4
   };
 
 
@@ -5042,15 +5180,18 @@ namespace isc { namespace dhcp {
   "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"",
   "\"renew-timer\"", "\"rebind-timer\"", "\"calculate-tee-times\"",
   "\"t1-percent\"", "\"t2-percent\"", "\"decline-probation-period\"",
-  "\"server-tag\"", "\"subnet6\"", "\"option-def\"", "\"option-data\"",
-  "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"",
-  "\"always-send\"", "\"record-types\"", "\"encapsulate\"", "\"array\"",
-  "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"",
-  "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"",
-  "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"",
-  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
-  "\"disabled\"", "\"out-of-pool\"", "\"global\"", "\"all\"",
-  "\"shared-networks\"", "\"mac-sources\"", "\"relay-supplied-options\"",
+  "\"server-tag\"", "\"ddns-send-updates\"", "\"ddns-override-no-update\"",
+  "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"",
+  "\"ddns-generated-prefix\"", "\"ddns-qualifying-suffix\"", "\"subnet6\"",
+  "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
+  "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"",
+  "\"encapsulate\"", "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"",
+  "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"",
+  "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"",
+  "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
+  "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
+  "\"out-of-pool\"", "\"global\"", "\"all\"", "\"shared-networks\"",
+  "\"mac-sources\"", "\"relay-supplied-options\"",
   "\"host-reservation-identifiers\"", "\"sanity-checks\"",
   "\"lease-checks\"", "\"client-classes\"", "\"require-client-classes\"",
   "\"test\"", "\"only-if-required\"", "\"client-class\"",
@@ -5090,169 +5231,176 @@ namespace isc { namespace dhcp {
   "preferred_lifetime", "min_preferred_lifetime", "max_preferred_lifetime",
   "valid_lifetime", "min_valid_lifetime", "max_valid_lifetime",
   "renew_timer", "rebind_timer", "calculate_tee_times", "t1_percent",
-  "t2_percent", "decline_probation_period", "server_tag", "$@23",
-  "interfaces_config", "$@24", "sub_interfaces6", "$@25",
-  "interfaces_config_params", "interfaces_config_param", "interfaces_list",
-  "$@26", "re_detect", "lease_database", "$@27", "hosts_database", "$@28",
-  "hosts_databases", "$@29", "database_list", "not_empty_database_list",
-  "database", "$@30", "database_map_params", "database_map_param",
-  "database_type", "$@31", "db_type", "user", "$@32", "password", "$@33",
-  "host", "$@34", "port", "name", "$@35", "persist", "lfc_interval",
-  "readonly", "connect_timeout", "reconnect_wait_time", "max_row_errors",
-  "request_timeout", "tcp_keepalive", "tcp_nodelay", "contact_points",
-  "$@36", "max_reconnect_tries", "keyspace", "$@37", "consistency", "$@38",
-  "serial_consistency", "$@39", "sanity_checks", "$@40",
-  "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@41",
-  "mac_sources", "$@42", "mac_sources_list", "mac_sources_value",
-  "duid_id", "string_id", "host_reservation_identifiers", "$@43",
+  "t2_percent", "decline_probation_period", "ddns_send_updates",
+  "ddns_override_no_update", "ddns_override_client_update",
+  "ddns_replace_client_name", "$@23", "ddns_replace_client_name_value",
+  "ddns_generated_prefix", "$@24", "ddns_qualifying_suffix", "$@25",
+  "hostname_char_set", "$@26", "hostname_char_replacement", "$@27",
+  "server_tag", "$@28", "interfaces_config", "$@29", "sub_interfaces6",
+  "$@30", "interfaces_config_params", "interfaces_config_param",
+  "interfaces_list", "$@31", "re_detect", "lease_database", "$@32",
+  "hosts_database", "$@33", "hosts_databases", "$@34", "database_list",
+  "not_empty_database_list", "database", "$@35", "database_map_params",
+  "database_map_param", "database_type", "$@36", "db_type", "user", "$@37",
+  "password", "$@38", "host", "$@39", "port", "name", "$@40", "persist",
+  "lfc_interval", "readonly", "connect_timeout", "reconnect_wait_time",
+  "max_row_errors", "request_timeout", "tcp_keepalive", "tcp_nodelay",
+  "contact_points", "$@41", "max_reconnect_tries", "keyspace", "$@42",
+  "consistency", "$@43", "serial_consistency", "$@44", "sanity_checks",
+  "$@45", "sanity_checks_params", "sanity_checks_param", "lease_checks",
+  "$@46", "mac_sources", "$@47", "mac_sources_list", "mac_sources_value",
+  "duid_id", "string_id", "host_reservation_identifiers", "$@48",
   "host_reservation_identifiers_list", "host_reservation_identifier",
-  "hw_address_id", "flex_id", "relay_supplied_options", "$@44",
-  "hooks_libraries", "$@45", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@46",
-  "sub_hooks_library", "$@47", "hooks_params", "hooks_param", "library",
-  "$@48", "parameters", "$@49", "expired_leases_processing", "$@50",
+  "hw_address_id", "flex_id", "relay_supplied_options", "$@49",
+  "hooks_libraries", "$@50", "hooks_libraries_list",
+  "not_empty_hooks_libraries_list", "hooks_library", "$@51",
+  "sub_hooks_library", "$@52", "hooks_params", "hooks_param", "library",
+  "$@53", "parameters", "$@54", "expired_leases_processing", "$@55",
   "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", "$@51",
-  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@52",
-  "sub_subnet6", "$@53", "subnet6_params", "subnet6_param", "subnet",
-  "$@54", "interface", "$@55", "interface_id", "$@56", "client_class",
-  "$@57", "require_client_classes", "$@58", "reservation_mode", "$@59",
-  "hr_mode", "id", "rapid_commit", "shared_networks", "$@60",
+  "unwarned_reclaim_cycles", "subnet6_list", "$@56",
+  "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@57",
+  "sub_subnet6", "$@58", "subnet6_params", "subnet6_param", "subnet",
+  "$@59", "interface", "$@60", "interface_id", "$@61", "client_class",
+  "$@62", "require_client_classes", "$@63", "reservation_mode", "$@64",
+  "hr_mode", "id", "rapid_commit", "shared_networks", "$@65",
   "shared_networks_content", "shared_networks_list", "shared_network",
-  "$@61", "shared_network_params", "shared_network_param",
-  "option_def_list", "$@62", "sub_option_def_list", "$@63",
+  "$@66", "shared_network_params", "shared_network_param",
+  "option_def_list", "$@67", "sub_option_def_list", "$@68",
   "option_def_list_content", "not_empty_option_def_list",
-  "option_def_entry", "$@64", "sub_option_def", "$@65",
+  "option_def_entry", "$@69", "sub_option_def", "$@70",
   "option_def_params", "not_empty_option_def_params", "option_def_param",
-  "option_def_name", "code", "option_def_code", "option_def_type", "$@66",
-  "option_def_record_types", "$@67", "space", "$@68", "option_def_space",
-  "option_def_encapsulate", "$@69", "option_def_array", "option_data_list",
-  "$@70", "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@71", "sub_option_data", "$@72",
+  "option_def_name", "code", "option_def_code", "option_def_type", "$@71",
+  "option_def_record_types", "$@72", "space", "$@73", "option_def_space",
+  "option_def_encapsulate", "$@74", "option_def_array", "option_data_list",
+  "$@75", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@76", "sub_option_data", "$@77",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@73",
+  "option_data_param", "option_data_name", "option_data_data", "$@78",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "option_data_always_send", "pools_list", "$@74", "pools_list_content",
-  "not_empty_pools_list", "pool_list_entry", "$@75", "sub_pool6", "$@76",
-  "pool_params", "pool_param", "pool_entry", "$@77", "user_context",
-  "$@78", "comment", "$@79", "pd_pools_list", "$@80",
+  "option_data_always_send", "pools_list", "$@79", "pools_list_content",
+  "not_empty_pools_list", "pool_list_entry", "$@80", "sub_pool6", "$@81",
+  "pool_params", "pool_param", "pool_entry", "$@82", "user_context",
+  "$@83", "comment", "$@84", "pd_pools_list", "$@85",
   "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry",
-  "$@81", "sub_pd_pool", "$@82", "pd_pool_params", "pd_pool_param",
-  "pd_prefix", "$@83", "pd_prefix_len", "excluded_prefix", "$@84",
-  "excluded_prefix_len", "pd_delegated_len", "reservations", "$@85",
+  "$@86", "sub_pd_pool", "$@87", "pd_pool_params", "pd_pool_param",
+  "pd_prefix", "$@88", "pd_prefix_len", "excluded_prefix", "$@89",
+  "excluded_prefix_len", "pd_delegated_len", "reservations", "$@90",
   "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@86", "sub_reservation", "$@87", "reservation_params",
+  "$@91", "sub_reservation", "$@92", "reservation_params",
   "not_empty_reservation_params", "reservation_param", "ip_addresses",
-  "$@88", "prefixes", "$@89", "duid", "$@90", "hw_address", "$@91",
-  "hostname", "$@92", "flex_id_value", "$@93",
-  "reservation_client_classes", "$@94", "relay", "$@95", "relay_map",
-  "ip_address", "$@96", "client_classes", "$@97", "client_classes_list",
-  "client_class_entry", "$@98", "client_class_params",
+  "$@93", "prefixes", "$@94", "duid", "$@95", "hw_address", "$@96",
+  "hostname", "$@97", "flex_id_value", "$@98",
+  "reservation_client_classes", "$@99", "relay", "$@100", "relay_map",
+  "ip_address", "$@101", "client_classes", "$@102", "client_classes_list",
+  "client_class_entry", "$@103", "client_class_params",
   "not_empty_client_class_params", "client_class_param",
-  "client_class_name", "client_class_test", "$@99", "only_if_required",
-  "server_id", "$@100", "server_id_params", "server_id_param",
-  "server_id_type", "$@101", "duid_type", "htype", "identifier", "$@102",
-  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@103",
-  "control_socket_params", "control_socket_param", "socket_type", "$@104",
-  "socket_name", "$@105", "dhcp_queue_control", "$@106", "dhcp_ddns",
-  "$@107", "sub_dhcp_ddns", "$@108", "dhcp_ddns_params", "dhcp_ddns_param",
-  "enable_updates", "qualifying_suffix", "$@109", "server_ip", "$@110",
-  "server_port", "sender_ip", "$@111", "sender_port", "max_queue_size",
-  "ncr_protocol", "$@112", "ncr_protocol_value", "ncr_format", "$@113",
-  "override_no_update", "override_client_update", "replace_client_name",
-  "$@114", "replace_client_name_value", "generated_prefix", "$@115",
-  "hostname_char_set", "$@116", "hostname_char_replacement", "$@117",
-  "dhcp4_json_object", "$@118", "dhcpddns_json_object", "$@119",
-  "control_agent_json_object", "$@120", "config_control", "$@121",
-  "sub_config_control", "$@122", "config_control_params",
-  "config_control_param", "config_databases", "$@123",
-  "config_fetch_wait_time", "logging_object", "$@124", "sub_logging",
-  "$@125", "logging_params", "logging_param", "loggers", "$@126",
-  "loggers_entries", "logger_entry", "$@127", "logger_params",
-  "logger_param", "debuglevel", "severity", "$@128", "output_options_list",
-  "$@129", "output_options_list_content", "output_entry", "$@130",
-  "output_params_list", "output_params", "output", "$@131", "flush",
-  "maxsize", "maxver", "pattern", "$@132", YY_NULLPTR
+  "client_class_name", "client_class_test", "$@104", "only_if_required",
+  "server_id", "$@105", "server_id_params", "server_id_param",
+  "server_id_type", "$@106", "duid_type", "htype", "identifier", "$@107",
+  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@108",
+  "control_socket_params", "control_socket_param", "socket_type", "$@109",
+  "socket_name", "$@110", "dhcp_queue_control", "$@111", "dhcp_ddns",
+  "$@112", "sub_dhcp_ddns", "$@113", "dhcp_ddns_params", "dhcp_ddns_param",
+  "enable_updates", "qualifying_suffix", "$@114", "server_ip", "$@115",
+  "server_port", "sender_ip", "$@116", "sender_port", "max_queue_size",
+  "ncr_protocol", "$@117", "ncr_protocol_value", "ncr_format", "$@118",
+  "dep_override_no_update", "dep_override_client_update",
+  "dep_replace_client_name", "$@119", "dep_generated_prefix", "$@120",
+  "dep_hostname_char_set", "$@121", "dep_hostname_char_replacement",
+  "$@122", "dhcp4_json_object", "$@123", "dhcpddns_json_object", "$@124",
+  "control_agent_json_object", "$@125", "config_control", "$@126",
+  "sub_config_control", "$@127", "config_control_params",
+  "config_control_param", "config_databases", "$@128",
+  "config_fetch_wait_time", "logging_object", "$@129", "sub_logging",
+  "$@130", "logging_params", "logging_param", "loggers", "$@131",
+  "loggers_entries", "logger_entry", "$@132", "logger_params",
+  "logger_param", "debuglevel", "severity", "$@133", "output_options_list",
+  "$@134", "output_options_list_content", "output_entry", "$@135",
+  "output_params_list", "output_params", "output", "$@136", "flush",
+  "maxsize", "maxver", "pattern", "$@137", YY_NULLPTR
   };
 
 #if PARSER6_DEBUG
   const unsigned short
   Dhcp6Parser::yyrline_[] =
   {
-       0,   271,   271,   271,   272,   272,   273,   273,   274,   274,
-     275,   275,   276,   276,   277,   277,   278,   278,   279,   279,
-     280,   280,   281,   281,   282,   282,   283,   283,   284,   284,
-     285,   285,   293,   294,   295,   296,   297,   298,   299,   302,
-     307,   307,   318,   321,   322,   325,   329,   336,   336,   343,
-     344,   347,   351,   358,   358,   365,   366,   369,   373,   384,
-     394,   394,   409,   410,   414,   415,   416,   417,   418,   419,
-     422,   422,   437,   437,   446,   447,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
-     466,   467,   468,   469,   470,   471,   472,   473,   474,   475,
-     476,   477,   478,   479,   480,   481,   482,   483,   484,   485,
-     486,   487,   488,   489,   490,   491,   492,   493,   494,   497,
-     497,   505,   510,   515,   520,   525,   530,   535,   540,   545,
-     550,   555,   560,   565,   565,   573,   573,   584,   584,   593,
-     594,   597,   598,   599,   600,   601,   604,   604,   614,   620,
-     620,   632,   632,   644,   644,   654,   655,   658,   659,   662,
-     662,   672,   673,   676,   677,   678,   679,   680,   681,   682,
-     683,   684,   685,   686,   687,   688,   689,   690,   691,   692,
-     693,   694,   695,   696,   699,   699,   706,   707,   708,   709,
-     712,   712,   720,   720,   728,   728,   736,   741,   741,   749,
-     754,   759,   764,   769,   774,   779,   784,   789,   794,   794,
-     802,   807,   807,   815,   815,   823,   823,   831,   831,   841,
-     842,   844,   846,   846,   864,   864,   874,   875,   878,   879,
-     882,   887,   892,   892,   902,   903,   906,   907,   908,   911,
-     916,   923,   923,   933,   933,   943,   944,   947,   948,   951,
-     951,   961,   961,   971,   972,   973,   976,   977,   980,   980,
-     988,   988,   996,   996,  1007,  1008,  1011,  1012,  1013,  1014,
-    1015,  1016,  1019,  1024,  1029,  1034,  1039,  1044,  1052,  1052,
-    1065,  1066,  1069,  1070,  1077,  1077,  1103,  1103,  1114,  1115,
-    1119,  1120,  1121,  1122,  1123,  1124,  1125,  1126,  1127,  1128,
-    1129,  1130,  1131,  1132,  1133,  1134,  1135,  1136,  1137,  1138,
-    1139,  1140,  1141,  1142,  1143,  1144,  1145,  1148,  1148,  1156,
-    1156,  1164,  1164,  1172,  1172,  1180,  1180,  1190,  1190,  1197,
-    1198,  1199,  1200,  1203,  1208,  1216,  1216,  1227,  1228,  1232,
-    1233,  1236,  1236,  1244,  1245,  1248,  1249,  1250,  1251,  1252,
-    1253,  1254,  1255,  1256,  1257,  1258,  1259,  1260,  1261,  1262,
-    1263,  1264,  1265,  1266,  1267,  1268,  1269,  1270,  1271,  1278,
-    1278,  1291,  1291,  1300,  1301,  1304,  1305,  1310,  1310,  1325,
-    1325,  1339,  1340,  1343,  1344,  1347,  1348,  1349,  1350,  1351,
-    1352,  1353,  1354,  1355,  1356,  1359,  1361,  1366,  1368,  1368,
-    1376,  1376,  1384,  1384,  1392,  1394,  1394,  1402,  1411,  1411,
-    1423,  1424,  1429,  1430,  1435,  1435,  1447,  1447,  1459,  1460,
-    1465,  1466,  1471,  1472,  1473,  1474,  1475,  1476,  1477,  1478,
-    1479,  1482,  1484,  1484,  1492,  1494,  1496,  1501,  1509,  1509,
-    1521,  1522,  1525,  1526,  1529,  1529,  1539,  1539,  1548,  1549,
-    1552,  1553,  1554,  1555,  1556,  1557,  1558,  1561,  1561,  1569,
-    1569,  1594,  1594,  1624,  1624,  1636,  1637,  1640,  1641,  1644,
-    1644,  1656,  1656,  1668,  1669,  1672,  1673,  1674,  1675,  1676,
-    1677,  1678,  1679,  1680,  1681,  1682,  1685,  1685,  1693,  1698,
-    1698,  1706,  1711,  1719,  1719,  1729,  1730,  1733,  1734,  1737,
-    1737,  1746,  1746,  1755,  1756,  1759,  1760,  1764,  1765,  1766,
-    1767,  1768,  1769,  1770,  1771,  1772,  1773,  1774,  1777,  1777,
-    1787,  1787,  1797,  1797,  1805,  1805,  1813,  1813,  1821,  1821,
-    1829,  1829,  1842,  1842,  1852,  1853,  1856,  1856,  1867,  1867,
-    1877,  1878,  1881,  1881,  1891,  1892,  1895,  1896,  1899,  1900,
-    1901,  1902,  1903,  1904,  1905,  1908,  1910,  1910,  1918,  1926,
-    1926,  1938,  1939,  1942,  1943,  1944,  1945,  1946,  1947,  1948,
-    1949,  1950,  1953,  1953,  1960,  1961,  1962,  1965,  1970,  1970,
-    1978,  1983,  1990,  1997,  1997,  2007,  2008,  2011,  2012,  2013,
-    2014,  2015,  2018,  2018,  2026,  2026,  2036,  2036,  2076,  2076,
-    2088,  2088,  2098,  2099,  2102,  2103,  2104,  2105,  2106,  2107,
-    2108,  2109,  2110,  2111,  2112,  2113,  2114,  2115,  2116,  2117,
-    2118,  2119,  2122,  2127,  2127,  2135,  2135,  2143,  2148,  2148,
-    2156,  2161,  2166,  2166,  2174,  2175,  2178,  2178,  2186,  2191,
-    2196,  2196,  2204,  2207,  2210,  2213,  2216,  2222,  2222,  2230,
-    2230,  2238,  2238,  2248,  2248,  2255,  2255,  2262,  2262,  2271,
-    2271,  2282,  2282,  2292,  2293,  2297,  2298,  2301,  2301,  2311,
-    2321,  2321,  2331,  2331,  2342,  2343,  2347,  2351,  2351,  2363,
-    2364,  2368,  2368,  2376,  2377,  2380,  2381,  2382,  2383,  2384,
-    2385,  2386,  2389,  2394,  2394,  2402,  2402,  2412,  2413,  2416,
-    2416,  2424,  2425,  2428,  2429,  2430,  2431,  2432,  2435,  2435,
-    2443,  2448,  2453,  2458,  2458
+       0,   277,   277,   277,   278,   278,   279,   279,   280,   280,
+     281,   281,   282,   282,   283,   283,   284,   284,   285,   285,
+     286,   286,   287,   287,   288,   288,   289,   289,   290,   290,
+     291,   291,   299,   300,   301,   302,   303,   304,   305,   308,
+     313,   313,   324,   327,   328,   331,   335,   342,   342,   349,
+     350,   353,   357,   364,   364,   371,   372,   375,   379,   390,
+     400,   400,   415,   416,   420,   421,   422,   423,   424,   425,
+     428,   428,   443,   443,   452,   453,   458,   459,   460,   461,
+     462,   463,   464,   465,   466,   467,   468,   469,   470,   471,
+     472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
+     482,   483,   484,   485,   486,   487,   488,   489,   490,   491,
+     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   505,   506,   509,   509,   517,   522,   527,
+     532,   537,   542,   547,   552,   557,   562,   567,   572,   577,
+     582,   587,   592,   592,   600,   603,   606,   609,   612,   618,
+     618,   626,   626,   634,   634,   642,   642,   650,   650,   658,
+     658,   669,   669,   678,   679,   682,   683,   684,   685,   686,
+     689,   689,   699,   705,   705,   717,   717,   729,   729,   739,
+     740,   743,   744,   747,   747,   757,   758,   761,   762,   763,
+     764,   765,   766,   767,   768,   769,   770,   771,   772,   773,
+     774,   775,   776,   777,   778,   779,   780,   781,   784,   784,
+     791,   792,   793,   794,   797,   797,   805,   805,   813,   813,
+     821,   826,   826,   834,   839,   844,   849,   854,   859,   864,
+     869,   874,   879,   879,   887,   892,   892,   900,   900,   908,
+     908,   916,   916,   926,   927,   929,   931,   931,   949,   949,
+     959,   960,   963,   964,   967,   972,   977,   977,   987,   988,
+     991,   992,   993,   996,  1001,  1008,  1008,  1018,  1018,  1028,
+    1029,  1032,  1033,  1036,  1036,  1046,  1046,  1056,  1057,  1058,
+    1061,  1062,  1065,  1065,  1073,  1073,  1081,  1081,  1092,  1093,
+    1096,  1097,  1098,  1099,  1100,  1101,  1104,  1109,  1114,  1119,
+    1124,  1129,  1137,  1137,  1150,  1151,  1154,  1155,  1162,  1162,
+    1188,  1188,  1199,  1200,  1204,  1205,  1206,  1207,  1208,  1209,
+    1210,  1211,  1212,  1213,  1214,  1215,  1216,  1217,  1218,  1219,
+    1220,  1221,  1222,  1223,  1224,  1225,  1226,  1227,  1228,  1229,
+    1230,  1231,  1232,  1233,  1234,  1235,  1236,  1237,  1238,  1241,
+    1241,  1249,  1249,  1257,  1257,  1265,  1265,  1273,  1273,  1283,
+    1283,  1290,  1291,  1292,  1293,  1296,  1301,  1309,  1309,  1320,
+    1321,  1325,  1326,  1329,  1329,  1337,  1338,  1341,  1342,  1343,
+    1344,  1345,  1346,  1347,  1348,  1349,  1350,  1351,  1352,  1353,
+    1354,  1355,  1356,  1357,  1358,  1359,  1360,  1361,  1362,  1363,
+    1364,  1365,  1366,  1367,  1368,  1369,  1370,  1371,  1372,  1379,
+    1379,  1392,  1392,  1401,  1402,  1405,  1406,  1411,  1411,  1426,
+    1426,  1440,  1441,  1444,  1445,  1448,  1449,  1450,  1451,  1452,
+    1453,  1454,  1455,  1456,  1457,  1460,  1462,  1467,  1469,  1469,
+    1477,  1477,  1485,  1485,  1493,  1495,  1495,  1503,  1512,  1512,
+    1524,  1525,  1530,  1531,  1536,  1536,  1548,  1548,  1560,  1561,
+    1566,  1567,  1572,  1573,  1574,  1575,  1576,  1577,  1578,  1579,
+    1580,  1583,  1585,  1585,  1593,  1595,  1597,  1602,  1610,  1610,
+    1622,  1623,  1626,  1627,  1630,  1630,  1640,  1640,  1649,  1650,
+    1653,  1654,  1655,  1656,  1657,  1658,  1659,  1662,  1662,  1670,
+    1670,  1695,  1695,  1725,  1725,  1737,  1738,  1741,  1742,  1745,
+    1745,  1757,  1757,  1769,  1770,  1773,  1774,  1775,  1776,  1777,
+    1778,  1779,  1780,  1781,  1782,  1783,  1786,  1786,  1794,  1799,
+    1799,  1807,  1812,  1820,  1820,  1830,  1831,  1834,  1835,  1838,
+    1838,  1847,  1847,  1856,  1857,  1860,  1861,  1865,  1866,  1867,
+    1868,  1869,  1870,  1871,  1872,  1873,  1874,  1875,  1878,  1878,
+    1888,  1888,  1898,  1898,  1906,  1906,  1914,  1914,  1922,  1922,
+    1930,  1930,  1943,  1943,  1953,  1954,  1957,  1957,  1968,  1968,
+    1978,  1979,  1982,  1982,  1992,  1993,  1996,  1997,  2000,  2001,
+    2002,  2003,  2004,  2005,  2006,  2009,  2011,  2011,  2019,  2027,
+    2027,  2039,  2040,  2043,  2044,  2045,  2046,  2047,  2048,  2049,
+    2050,  2051,  2054,  2054,  2061,  2062,  2063,  2066,  2071,  2071,
+    2079,  2084,  2091,  2098,  2098,  2108,  2109,  2112,  2113,  2114,
+    2115,  2116,  2119,  2119,  2127,  2127,  2137,  2137,  2177,  2177,
+    2189,  2189,  2199,  2200,  2203,  2204,  2205,  2206,  2207,  2208,
+    2209,  2210,  2211,  2212,  2213,  2214,  2215,  2216,  2217,  2218,
+    2219,  2220,  2223,  2228,  2228,  2236,  2236,  2244,  2249,  2249,
+    2257,  2262,  2267,  2267,  2275,  2276,  2279,  2279,  2288,  2294,
+    2300,  2300,  2308,  2308,  2317,  2317,  2326,  2326,  2336,  2336,
+    2343,  2343,  2350,  2350,  2359,  2359,  2370,  2370,  2380,  2381,
+    2385,  2386,  2389,  2389,  2399,  2409,  2409,  2419,  2419,  2430,
+    2431,  2435,  2439,  2439,  2451,  2452,  2456,  2456,  2464,  2465,
+    2468,  2469,  2470,  2471,  2472,  2473,  2474,  2477,  2482,  2482,
+    2490,  2490,  2500,  2501,  2504,  2504,  2512,  2513,  2516,  2517,
+    2518,  2519,  2520,  2523,  2523,  2531,  2536,  2541,  2546,  2546
   };
 
   // Print the state stack on the debug stream.
@@ -5285,11 +5433,10 @@ namespace isc { namespace dhcp {
 #endif // PARSER6_DEBUG
 
 
-#line 14 "dhcp6_parser.yy"
+#line 14 "dhcp6_parser.yy" // lalr1.cc:1218
 } } // isc::dhcp
-#line 5291 "dhcp6_parser.cc"
-
-#line 2466 "dhcp6_parser.yy"
+#line 5439 "dhcp6_parser.cc" // lalr1.cc:1218
+#line 2554 "dhcp6_parser.yy" // lalr1.cc:1219
 
 
 void
index 2d67048ecbff43e6b3d9b055dec76a767a4a0073..675e8450d338a5c66347adab525f4a36dad9aca4 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #ifndef YY_PARSER6_DHCP6_PARSER_H_INCLUDED
 # define YY_PARSER6_DHCP6_PARSER_H_INCLUDED
 // //                    "%code requires" blocks.
-#line 17 "dhcp6_parser.yy"
+#line 17 "dhcp6_parser.yy" // lalr1.cc:404
 
 #include <string>
 #include <cc/data.h>
@@ -56,7 +56,7 @@ using namespace isc::dhcp;
 using namespace isc::data;
 using namespace std;
 
-#line 60 "dhcp6_parser.h"
+#line 60 "dhcp6_parser.h" // lalr1.cc:404
 
 # include <cassert>
 # include <cstdlib> // std::abort
@@ -65,14 +65,8 @@ using namespace std;
 # include <string>
 # include <vector>
 
-#if defined __cplusplus
-# define YY_CPLUSPLUS __cplusplus
-#else
-# define YY_CPLUSPLUS 199711L
-#endif
-
 // Support move semantics when possible.
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
 # define YY_MOVE           std::move
 # define YY_MOVE_OR_COPY   move
 # define YY_MOVE_REF(Type) Type&&
@@ -85,22 +79,6 @@ using namespace std;
 # define YY_RVREF(Type)    const Type&
 # define YY_COPY(Type)     const Type&
 #endif
-
-// Support noexcept when possible.
-#if 201103L <= YY_CPLUSPLUS
-# define YY_NOEXCEPT noexcept
-# define YY_NOTHROW
-#else
-# define YY_NOEXCEPT
-# define YY_NOTHROW throw ()
-#endif
-
-// Support constexpr when possible.
-#if 201703 <= YY_CPLUSPLUS
-# define YY_CONSTEXPR constexpr
-#else
-# define YY_CONSTEXPR
-#endif
 # include "location.hh"
 #include <typeinfo>
 #ifndef YYASSERT
@@ -178,80 +156,193 @@ using namespace std;
 # endif /* ! defined YYDEBUG */
 #endif  /* ! defined PARSER6_DEBUG */
 
-#line 14 "dhcp6_parser.yy"
+#line 14 "dhcp6_parser.yy" // lalr1.cc:404
 namespace isc { namespace dhcp {
-#line 184 "dhcp6_parser.h"
+#line 162 "dhcp6_parser.h" // lalr1.cc:404
+
+  /// A stack with random access from its top.
+  template <typename T, typename S = std::vector<T> >
+  class stack
+  {
+  public:
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+    typedef typename S::size_type size_type;
 
+    stack (size_type n = 200)
+      : seq_ (n)
+    {}
+
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (size_type i)
+    {
+      return seq_[size () - 1 - i];
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (int i)
+    {
+      return operator[] (size_type (i));
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (size_type i) const
+    {
+      return seq_[size () - 1 - i];
+    }
 
-  /// A Bison parser.
-  class Dhcp6Parser
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (int i) const
+    {
+      return operator[] (size_type (i));
+    }
+
+    /// Steal the contents of \a t.
+    ///
+    /// Close to move-semantics.
+    void
+    push (YY_MOVE_REF (T) t)
+    {
+      seq_.push_back (T ());
+      operator[](0).move (t);
+    }
+
+    void
+    pop (int n = 1)
+    {
+      for (; 0 < n; --n)
+        seq_.pop_back ();
+    }
+
+    void
+    clear ()
+    {
+      seq_.clear ();
+    }
+
+    size_type
+    size () const
+    {
+      return seq_.size ();
+    }
+
+    const_iterator
+    begin () const
+    {
+      return seq_.rbegin ();
+    }
+
+    const_iterator
+    end () const
+    {
+      return seq_.rend ();
+    }
+
+  private:
+    stack (const stack&);
+    stack& operator= (const stack&);
+    /// The wrapped container.
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <typename T, typename S = stack<T> >
+  class slice
   {
   public:
-#ifndef PARSER6_STYPE
-  /// A buffer to store and retrieve objects.
+    slice (const S& stack, int range)
+      : stack_ (stack)
+      , range_ (range)
+    {}
+
+    const T&
+    operator[] (int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+    const S& stack_;
+    int range_;
+  };
+
+
+
+  /// A char[S] buffer to store and retrieve objects.
   ///
   /// Sort of a variant, but does not keep track of the nature
   /// of the stored data, since that knowledge is available
-  /// via the current parser state.
-  class semantic_type
+  /// via the current state.
+  template <size_t S>
+  struct variant
   {
-  public:
     /// Type of *this.
-    typedef semantic_type self_type;
+    typedef variant<S> self_type;
 
     /// Empty construction.
-    semantic_type () YY_NOEXCEPT
+    variant ()
       : yybuffer_ ()
       , yytypeid_ (YY_NULLPTR)
     {}
 
     /// Construct and fill.
     template <typename T>
-    semantic_type (YY_RVREF (T) t)
+    variant (YY_RVREF (T) t)
       : yytypeid_ (&typeid (T))
     {
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       new (yyas_<T> ()) T (YY_MOVE (t));
     }
 
     /// Destruction, allowed only if empty.
-    ~semantic_type () YY_NOEXCEPT
+    ~variant ()
     {
       YYASSERT (!yytypeid_);
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Instantiate a \a T in here from \a t.
-    template <typename T, typename... U>
-    T&
-    emplace (U&&... u)
-    {
-      YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
-      yytypeid_ = & typeid (T);
-      return *new (yyas_<T> ()) T (std::forward <U>(u)...);
-    }
-# else
     /// Instantiate an empty \a T in here.
     template <typename T>
     T&
     emplace ()
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T ();
     }
 
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Instantiate a \a T in here from \a t.
+    template <typename T, typename U>
+    T&
+    emplace (U&& u)
+    {
+      YYASSERT (!yytypeid_);
+      YYASSERT (sizeof (T) <= S);
+      yytypeid_ = & typeid (T);
+      return *new (yyas_<T> ()) T (std::forward <U>(u));
+    }
+# else
     /// Instantiate a \a T in here from \a t.
     template <typename T>
     T&
     emplace (const T& t)
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T (t);
     }
@@ -278,75 +369,75 @@ namespace isc { namespace dhcp {
     /// Accessor to a built \a T.
     template <typename T>
     T&
-    as () YY_NOEXCEPT
+    as ()
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
     /// Const accessor to a built \a T (for %printer).
     template <typename T>
     const T&
-    as () const YY_NOEXCEPT
+    as () const
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
-    /// Swap the content with \a that, of same type.
+    /// Swap the content with \a other, of same type.
     ///
     /// Both variants must be built beforehand, because swapping the actual
     /// data requires reading it (with as()), and this is not possible on
     /// unconstructed variants: it would require some dynamic testing, which
     /// should not be the variant's responsibility.
     /// Swapping between built and (possibly) non-built is done with
-    /// self_type::move ().
+    /// variant::move ().
     template <typename T>
     void
-    swap (self_type& that) YY_NOEXCEPT
+    swap (self_type& other)
     {
       YYASSERT (yytypeid_);
-      YYASSERT (*yytypeid_ == *that.yytypeid_);
-      std::swap (as<T> (), that.as<T> ());
+      YYASSERT (*yytypeid_ == *other.yytypeid_);
+      std::swap (as<T> (), other.as<T> ());
     }
 
-    /// Move the content of \a that to this.
+    /// Move the content of \a other to this.
     ///
-    /// Destroys \a that.
+    /// Destroys \a other.
     template <typename T>
     void
-    move (self_type& that)
+    move (self_type& other)
     {
-# if 201103L <= YY_CPLUSPLUS
-      emplace<T> (std::move (that.as<T> ()));
+# if defined __cplusplus && 201103L <= __cplusplus
+      emplace<T> (std::move (other.as<T> ()));
 # else
       emplace<T> ();
-      swap<T> (that);
+      swap<T> (other);
 # endif
-      that.destroy<T> ();
+      other.destroy<T> ();
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Move the content of \a that to this.
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Move the content of \a other to this.
     template <typename T>
     void
-    move (self_type&& that)
+    move (self_type&& other)
     {
-      emplace<T> (std::move (that.as<T> ()));
-      that.destroy<T> ();
+      emplace<T> (std::move (other.as<T> ()));
+      other.destroy<T> ();
     }
 #endif
 
-    /// Copy the content of \a that to this.
+    /// Copy the content of \a other to this.
     template <typename T>
     void
-    copy (const self_type& that)
+    copy (const self_type& other)
     {
-      emplace<T> (that.as<T> ());
+      emplace<T> (other.as<T> ());
     }
 
     /// Destroy the stored \a T.
@@ -361,12 +452,12 @@ namespace isc { namespace dhcp {
   private:
     /// Prohibit blind copies.
     self_type& operator= (const self_type&);
-    semantic_type (const self_type&);
+    variant (const self_type&);
 
     /// Accessor to raw memory as \a T.
     template <typename T>
     T*
-    yyas_ () YY_NOEXCEPT
+    yyas_ ()
     {
       void *yyp = yybuffer_.yyraw;
       return static_cast<T*> (yyp);
@@ -375,22 +466,40 @@ namespace isc { namespace dhcp {
     /// Const accessor to raw memory as \a T.
     template <typename T>
     const T*
-    yyas_ () const YY_NOEXCEPT
+    yyas_ () const
     {
       const void *yyp = yybuffer_.yyraw;
       return static_cast<const T*> (yyp);
      }
 
+    union
+    {
+      /// Strongest alignment constraints.
+      long double yyalign_me;
+      /// A buffer large enough to store any of the semantic values.
+      char yyraw[S];
+    } yybuffer_;
+
+    /// Whether the content is built: if defined, the name of the stored type.
+    const std::type_info *yytypeid_;
+  };
+
+
+  /// A Bison parser.
+  class Dhcp6Parser
+  {
+  public:
+#ifndef PARSER6_STYPE
     /// An auxiliary type to compute the largest semantic type.
     union union_type
     {
       // value
       // map_value
+      // ddns_replace_client_name_value
       // db_type
       // hr_mode
       // duid_type
       // ncr_protocol_value
-      // replace_client_name_value
       char dummy1[sizeof (ElementPtr)];
 
       // "boolean"
@@ -404,24 +513,10 @@ namespace isc { namespace dhcp {
 
       // "constant string"
       char dummy5[sizeof (std::string)];
-    };
-
-    /// The size of the largest semantic type.
-    enum { size = sizeof (union_type) };
-
-    /// A buffer to store semantic values.
-    union
-    {
-      /// Strongest alignment constraints.
-      long double yyalign_me;
-      /// A buffer large enough to store any of the semantic values.
-      char yyraw[size];
-    } yybuffer_;
-
-    /// Whether the content is built: if defined, the name of the stored type.
-    const std::type_info *yytypeid_;
-  };
+};
 
+    /// Symbol semantic values.
+    typedef variant<sizeof (union_type)> semantic_type;
 #else
     typedef PARSER6_STYPE semantic_type;
 #endif
@@ -431,18 +526,7 @@ namespace isc { namespace dhcp {
     /// Syntax errors thrown from user actions.
     struct syntax_error : std::runtime_error
     {
-      syntax_error (const location_type& l, const std::string& m)
-        : std::runtime_error (m)
-        , location (l)
-      {}
-
-      syntax_error (const syntax_error& s)
-        : std::runtime_error (s.what ())
-        , location (s.location)
-      {}
-
-      ~syntax_error () YY_NOEXCEPT YY_NOTHROW;
-
+      syntax_error (const location_type& l, const std::string& m);
       location_type location;
     };
 
@@ -506,136 +590,142 @@ namespace isc { namespace dhcp {
         TOKEN_T2_PERCENT = 309,
         TOKEN_DECLINE_PROBATION_PERIOD = 310,
         TOKEN_SERVER_TAG = 311,
-        TOKEN_SUBNET6 = 312,
-        TOKEN_OPTION_DEF = 313,
-        TOKEN_OPTION_DATA = 314,
-        TOKEN_NAME = 315,
-        TOKEN_DATA = 316,
-        TOKEN_CODE = 317,
-        TOKEN_SPACE = 318,
-        TOKEN_CSV_FORMAT = 319,
-        TOKEN_ALWAYS_SEND = 320,
-        TOKEN_RECORD_TYPES = 321,
-        TOKEN_ENCAPSULATE = 322,
-        TOKEN_ARRAY = 323,
-        TOKEN_POOLS = 324,
-        TOKEN_POOL = 325,
-        TOKEN_PD_POOLS = 326,
-        TOKEN_PREFIX = 327,
-        TOKEN_PREFIX_LEN = 328,
-        TOKEN_EXCLUDED_PREFIX = 329,
-        TOKEN_EXCLUDED_PREFIX_LEN = 330,
-        TOKEN_DELEGATED_LEN = 331,
-        TOKEN_USER_CONTEXT = 332,
-        TOKEN_COMMENT = 333,
-        TOKEN_SUBNET = 334,
-        TOKEN_INTERFACE = 335,
-        TOKEN_INTERFACE_ID = 336,
-        TOKEN_ID = 337,
-        TOKEN_RAPID_COMMIT = 338,
-        TOKEN_RESERVATION_MODE = 339,
-        TOKEN_DISABLED = 340,
-        TOKEN_OUT_OF_POOL = 341,
-        TOKEN_GLOBAL = 342,
-        TOKEN_ALL = 343,
-        TOKEN_SHARED_NETWORKS = 344,
-        TOKEN_MAC_SOURCES = 345,
-        TOKEN_RELAY_SUPPLIED_OPTIONS = 346,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 347,
-        TOKEN_SANITY_CHECKS = 348,
-        TOKEN_LEASE_CHECKS = 349,
-        TOKEN_CLIENT_CLASSES = 350,
-        TOKEN_REQUIRE_CLIENT_CLASSES = 351,
-        TOKEN_TEST = 352,
-        TOKEN_ONLY_IF_REQUIRED = 353,
-        TOKEN_CLIENT_CLASS = 354,
-        TOKEN_RESERVATIONS = 355,
-        TOKEN_IP_ADDRESSES = 356,
-        TOKEN_PREFIXES = 357,
-        TOKEN_DUID = 358,
-        TOKEN_HW_ADDRESS = 359,
-        TOKEN_HOSTNAME = 360,
-        TOKEN_FLEX_ID = 361,
-        TOKEN_RELAY = 362,
-        TOKEN_IP_ADDRESS = 363,
-        TOKEN_HOOKS_LIBRARIES = 364,
-        TOKEN_LIBRARY = 365,
-        TOKEN_PARAMETERS = 366,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 367,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 368,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 369,
-        TOKEN_HOLD_RECLAIMED_TIME = 370,
-        TOKEN_MAX_RECLAIM_LEASES = 371,
-        TOKEN_MAX_RECLAIM_TIME = 372,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 373,
-        TOKEN_SERVER_ID = 374,
-        TOKEN_LLT = 375,
-        TOKEN_EN = 376,
-        TOKEN_LL = 377,
-        TOKEN_IDENTIFIER = 378,
-        TOKEN_HTYPE = 379,
-        TOKEN_TIME = 380,
-        TOKEN_ENTERPRISE_ID = 381,
-        TOKEN_DHCP4O6_PORT = 382,
-        TOKEN_CONTROL_SOCKET = 383,
-        TOKEN_SOCKET_TYPE = 384,
-        TOKEN_SOCKET_NAME = 385,
-        TOKEN_DHCP_QUEUE_CONTROL = 386,
-        TOKEN_DHCP_DDNS = 387,
-        TOKEN_ENABLE_UPDATES = 388,
-        TOKEN_QUALIFYING_SUFFIX = 389,
-        TOKEN_SERVER_IP = 390,
-        TOKEN_SERVER_PORT = 391,
-        TOKEN_SENDER_IP = 392,
-        TOKEN_SENDER_PORT = 393,
-        TOKEN_MAX_QUEUE_SIZE = 394,
-        TOKEN_NCR_PROTOCOL = 395,
-        TOKEN_NCR_FORMAT = 396,
-        TOKEN_OVERRIDE_NO_UPDATE = 397,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 398,
-        TOKEN_REPLACE_CLIENT_NAME = 399,
-        TOKEN_GENERATED_PREFIX = 400,
-        TOKEN_UDP = 401,
-        TOKEN_TCP = 402,
-        TOKEN_JSON = 403,
-        TOKEN_WHEN_PRESENT = 404,
-        TOKEN_NEVER = 405,
-        TOKEN_ALWAYS = 406,
-        TOKEN_WHEN_NOT_PRESENT = 407,
-        TOKEN_HOSTNAME_CHAR_SET = 408,
-        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 409,
-        TOKEN_LOGGING = 410,
-        TOKEN_LOGGERS = 411,
-        TOKEN_OUTPUT_OPTIONS = 412,
-        TOKEN_OUTPUT = 413,
-        TOKEN_DEBUGLEVEL = 414,
-        TOKEN_SEVERITY = 415,
-        TOKEN_FLUSH = 416,
-        TOKEN_MAXSIZE = 417,
-        TOKEN_MAXVER = 418,
-        TOKEN_PATTERN = 419,
-        TOKEN_DHCP4 = 420,
-        TOKEN_DHCPDDNS = 421,
-        TOKEN_CONTROL_AGENT = 422,
-        TOKEN_TOPLEVEL_JSON = 423,
-        TOKEN_TOPLEVEL_DHCP6 = 424,
-        TOKEN_SUB_DHCP6 = 425,
-        TOKEN_SUB_INTERFACES6 = 426,
-        TOKEN_SUB_SUBNET6 = 427,
-        TOKEN_SUB_POOL6 = 428,
-        TOKEN_SUB_PD_POOL = 429,
-        TOKEN_SUB_RESERVATION = 430,
-        TOKEN_SUB_OPTION_DEFS = 431,
-        TOKEN_SUB_OPTION_DEF = 432,
-        TOKEN_SUB_OPTION_DATA = 433,
-        TOKEN_SUB_HOOKS_LIBRARY = 434,
-        TOKEN_SUB_DHCP_DDNS = 435,
-        TOKEN_SUB_LOGGING = 436,
-        TOKEN_SUB_CONFIG_CONTROL = 437,
-        TOKEN_STRING = 438,
-        TOKEN_INTEGER = 439,
-        TOKEN_FLOAT = 440,
-        TOKEN_BOOLEAN = 441
+        TOKEN_DDNS_SEND_UPDATES = 312,
+        TOKEN_DDNS_OVERRIDE_NO_UPDATE = 313,
+        TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 314,
+        TOKEN_DDNS_REPLACE_CLIENT_NAME = 315,
+        TOKEN_DDNS_GENERATED_PREFIX = 316,
+        TOKEN_DDNS_QUALIFYING_SUFFIX = 317,
+        TOKEN_SUBNET6 = 318,
+        TOKEN_OPTION_DEF = 319,
+        TOKEN_OPTION_DATA = 320,
+        TOKEN_NAME = 321,
+        TOKEN_DATA = 322,
+        TOKEN_CODE = 323,
+        TOKEN_SPACE = 324,
+        TOKEN_CSV_FORMAT = 325,
+        TOKEN_ALWAYS_SEND = 326,
+        TOKEN_RECORD_TYPES = 327,
+        TOKEN_ENCAPSULATE = 328,
+        TOKEN_ARRAY = 329,
+        TOKEN_POOLS = 330,
+        TOKEN_POOL = 331,
+        TOKEN_PD_POOLS = 332,
+        TOKEN_PREFIX = 333,
+        TOKEN_PREFIX_LEN = 334,
+        TOKEN_EXCLUDED_PREFIX = 335,
+        TOKEN_EXCLUDED_PREFIX_LEN = 336,
+        TOKEN_DELEGATED_LEN = 337,
+        TOKEN_USER_CONTEXT = 338,
+        TOKEN_COMMENT = 339,
+        TOKEN_SUBNET = 340,
+        TOKEN_INTERFACE = 341,
+        TOKEN_INTERFACE_ID = 342,
+        TOKEN_ID = 343,
+        TOKEN_RAPID_COMMIT = 344,
+        TOKEN_RESERVATION_MODE = 345,
+        TOKEN_DISABLED = 346,
+        TOKEN_OUT_OF_POOL = 347,
+        TOKEN_GLOBAL = 348,
+        TOKEN_ALL = 349,
+        TOKEN_SHARED_NETWORKS = 350,
+        TOKEN_MAC_SOURCES = 351,
+        TOKEN_RELAY_SUPPLIED_OPTIONS = 352,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 353,
+        TOKEN_SANITY_CHECKS = 354,
+        TOKEN_LEASE_CHECKS = 355,
+        TOKEN_CLIENT_CLASSES = 356,
+        TOKEN_REQUIRE_CLIENT_CLASSES = 357,
+        TOKEN_TEST = 358,
+        TOKEN_ONLY_IF_REQUIRED = 359,
+        TOKEN_CLIENT_CLASS = 360,
+        TOKEN_RESERVATIONS = 361,
+        TOKEN_IP_ADDRESSES = 362,
+        TOKEN_PREFIXES = 363,
+        TOKEN_DUID = 364,
+        TOKEN_HW_ADDRESS = 365,
+        TOKEN_HOSTNAME = 366,
+        TOKEN_FLEX_ID = 367,
+        TOKEN_RELAY = 368,
+        TOKEN_IP_ADDRESS = 369,
+        TOKEN_HOOKS_LIBRARIES = 370,
+        TOKEN_LIBRARY = 371,
+        TOKEN_PARAMETERS = 372,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 373,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 374,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 375,
+        TOKEN_HOLD_RECLAIMED_TIME = 376,
+        TOKEN_MAX_RECLAIM_LEASES = 377,
+        TOKEN_MAX_RECLAIM_TIME = 378,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 379,
+        TOKEN_SERVER_ID = 380,
+        TOKEN_LLT = 381,
+        TOKEN_EN = 382,
+        TOKEN_LL = 383,
+        TOKEN_IDENTIFIER = 384,
+        TOKEN_HTYPE = 385,
+        TOKEN_TIME = 386,
+        TOKEN_ENTERPRISE_ID = 387,
+        TOKEN_DHCP4O6_PORT = 388,
+        TOKEN_CONTROL_SOCKET = 389,
+        TOKEN_SOCKET_TYPE = 390,
+        TOKEN_SOCKET_NAME = 391,
+        TOKEN_DHCP_QUEUE_CONTROL = 392,
+        TOKEN_DHCP_DDNS = 393,
+        TOKEN_ENABLE_UPDATES = 394,
+        TOKEN_QUALIFYING_SUFFIX = 395,
+        TOKEN_SERVER_IP = 396,
+        TOKEN_SERVER_PORT = 397,
+        TOKEN_SENDER_IP = 398,
+        TOKEN_SENDER_PORT = 399,
+        TOKEN_MAX_QUEUE_SIZE = 400,
+        TOKEN_NCR_PROTOCOL = 401,
+        TOKEN_NCR_FORMAT = 402,
+        TOKEN_OVERRIDE_NO_UPDATE = 403,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 404,
+        TOKEN_REPLACE_CLIENT_NAME = 405,
+        TOKEN_GENERATED_PREFIX = 406,
+        TOKEN_UDP = 407,
+        TOKEN_TCP = 408,
+        TOKEN_JSON = 409,
+        TOKEN_WHEN_PRESENT = 410,
+        TOKEN_NEVER = 411,
+        TOKEN_ALWAYS = 412,
+        TOKEN_WHEN_NOT_PRESENT = 413,
+        TOKEN_HOSTNAME_CHAR_SET = 414,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 415,
+        TOKEN_LOGGING = 416,
+        TOKEN_LOGGERS = 417,
+        TOKEN_OUTPUT_OPTIONS = 418,
+        TOKEN_OUTPUT = 419,
+        TOKEN_DEBUGLEVEL = 420,
+        TOKEN_SEVERITY = 421,
+        TOKEN_FLUSH = 422,
+        TOKEN_MAXSIZE = 423,
+        TOKEN_MAXVER = 424,
+        TOKEN_PATTERN = 425,
+        TOKEN_DHCP4 = 426,
+        TOKEN_DHCPDDNS = 427,
+        TOKEN_CONTROL_AGENT = 428,
+        TOKEN_TOPLEVEL_JSON = 429,
+        TOKEN_TOPLEVEL_DHCP6 = 430,
+        TOKEN_SUB_DHCP6 = 431,
+        TOKEN_SUB_INTERFACES6 = 432,
+        TOKEN_SUB_SUBNET6 = 433,
+        TOKEN_SUB_POOL6 = 434,
+        TOKEN_SUB_PD_POOL = 435,
+        TOKEN_SUB_RESERVATION = 436,
+        TOKEN_SUB_OPTION_DEFS = 437,
+        TOKEN_SUB_OPTION_DEF = 438,
+        TOKEN_SUB_OPTION_DATA = 439,
+        TOKEN_SUB_HOOKS_LIBRARY = 440,
+        TOKEN_SUB_DHCP_DDNS = 441,
+        TOKEN_SUB_LOGGING = 442,
+        TOKEN_SUB_CONFIG_CONTROL = 443,
+        TOKEN_STRING = 444,
+        TOKEN_INTEGER = 445,
+        TOKEN_FLOAT = 446,
+        TOKEN_BOOLEAN = 447
       };
     };
 
@@ -664,154 +754,29 @@ namespace isc { namespace dhcp {
       typedef Base super_type;
 
       /// Default constructor.
-      basic_symbol ()
-        : value ()
-        , location ()
-      {}
-
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      basic_symbol (basic_symbol&& that);
-#endif
+      basic_symbol ();
+
+      /// Move or copy constructor.
+      basic_symbol (YY_RVREF (basic_symbol) other);
 
-      /// Copy constructor.
-      basic_symbol (const basic_symbol& that);
 
       /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, location_type&& l)
-        : Base (t)
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const location_type& l)
-        : Base (t)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
+      basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l);
+
 
       /// Destroy the symbol.
-      ~basic_symbol ()
-      {
-        clear ();
-      }
+      ~basic_symbol ();
 
       /// Destroy contents, and record that is empty.
-      void clear ()
-      {
-        // User destructor.
-        symbol_number_type yytype = this->type_get ();
-        basic_symbol<Base>& yysym = *this;
-        (void) yysym;
-        switch (yytype)
-        {
-       default:
-          break;
-        }
-
-        // Type destructor.
-switch (yytype)
-    {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
-        value.template destroy< ElementPtr > ();
-        break;
-
-      case 186: // "boolean"
-        value.template destroy< bool > ();
-        break;
-
-      case 185: // "floating point"
-        value.template destroy< double > ();
-        break;
-
-      case 184: // "integer"
-        value.template destroy< int64_t > ();
-        break;
-
-      case 183: // "constant string"
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-        Base::clear ();
-      }
+      void clear ();
 
       /// Whether empty.
-      bool empty () const YY_NOEXCEPT;
+      bool empty () const;
 
       /// Destructive move, \a s is emptied into this.
       void move (basic_symbol& s);
@@ -823,9 +788,9 @@ switch (yytype)
       location_type location;
 
     private:
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
       /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& that);
+      basic_symbol& operator= (const basic_symbol& other);
 #endif
     };
 
@@ -835,13 +800,8 @@ switch (yytype)
       /// Default constructor.
       by_type ();
 
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      by_type (by_type&& that);
-#endif
-
       /// Copy constructor.
-      by_type (const by_type& that);
+      by_type (const by_type& other);
 
       /// The symbol type as needed by the constructor.
       typedef token_type kind_type;
@@ -857,10 +817,10 @@ switch (yytype)
 
       /// The (internal) type number (corresponding to \a type).
       /// \a empty when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+      symbol_number_type type_get () const;
 
       /// The token.
-      token_type token () const YY_NOEXCEPT;
+      token_type token () const;
 
       /// The symbol type.
       /// \a empty_symbol when empty.
@@ -869,81 +829,7 @@ switch (yytype)
     };
 
     /// "External" symbols: returned by the scanner.
-    struct symbol_type : basic_symbol<by_type>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_type> super_type;
-
-      /// Empty symbol.
-      symbol_type () {}
-
-      /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, location_type l)
-        : super_type(token_type (tok), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
-      }
-#else
-      symbol_type (int tok, const location_type& l)
-        : super_type(token_type (tok), l)
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, bool v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#else
-      symbol_type (int tok, const bool& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, double v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#else
-      symbol_type (int tok, const double& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, int64_t v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#else
-      symbol_type (int tok, const int64_t& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, std::string v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#else
-      symbol_type (int tok, const std::string& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#endif
-    };
+    typedef basic_symbol<by_type> symbol_type;
 
     /// Build a parser object.
     Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg);
@@ -979,3385 +865,2648 @@ switch (yytype)
     /// Report a syntax error.
     void error (const syntax_error& err);
 
-    // Implementation of make_symbol for each symbol type.
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_END (location_type l)
-      {
-        return symbol_type (token::TOKEN_END, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_END (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_END, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMA (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COLON (location_type l)
-      {
-        return symbol_type (token::TOKEN_COLON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COLON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COLON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NULL_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NULL_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DATA_DIRECTORY (location_type l)
-      {
-        return symbol_type (token::TOKEN_DATA_DIRECTORY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DATA_DIRECTORY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DATA_DIRECTORY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_DATABASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_DATABASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_DATABASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_DATABASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONFIG_FETCH_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONFIG_FETCH_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACES_CONFIG (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES_CONFIG, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACES_CONFIG (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES_CONFIG, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACES (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RE_DETECT (location_type l)
-      {
-        return symbol_type (token::TOKEN_RE_DETECT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RE_DETECT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RE_DETECT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LEASE_DATABASE (location_type l)
-      {
-        return symbol_type (token::TOKEN_LEASE_DATABASE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LEASE_DATABASE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LEASE_DATABASE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTS_DATABASE (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTS_DATABASE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTS_DATABASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTS_DATABASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTS_DATABASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MEMFILE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MEMFILE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MEMFILE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MEMFILE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MYSQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_MYSQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MYSQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MYSQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POSTGRESQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_POSTGRESQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POSTGRESQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POSTGRESQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CQL (location_type l)
-      {
-        return symbol_type (token::TOKEN_CQL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CQL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CQL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USER (location_type l)
-      {
-        return symbol_type (token::TOKEN_USER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PASSWORD (location_type l)
-      {
-        return symbol_type (token::TOKEN_PASSWORD, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PASSWORD (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PASSWORD, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOST (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PERSIST (location_type l)
-      {
-        return symbol_type (token::TOKEN_PERSIST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PERSIST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PERSIST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LFC_INTERVAL (location_type l)
-      {
-        return symbol_type (token::TOKEN_LFC_INTERVAL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LFC_INTERVAL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LFC_INTERVAL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_READONLY (location_type l)
-      {
-        return symbol_type (token::TOKEN_READONLY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_READONLY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_READONLY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONNECT_TIMEOUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONNECT_TIMEOUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONNECT_TIMEOUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTACT_POINTS (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTACT_POINTS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTACT_POINTS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTACT_POINTS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECONNECT_TRIES (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECONNECT_TRIES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECONNECT_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECONNECT_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_KEYSPACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_KEYSPACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_KEYSPACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_KEYSPACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONSISTENCY (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONSISTENCY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONSISTENCY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONSISTENCY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERIAL_CONSISTENCY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERIAL_CONSISTENCY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REQUEST_TIMEOUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_REQUEST_TIMEOUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REQUEST_TIMEOUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REQUEST_TIMEOUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP_KEEPALIVE (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP_KEEPALIVE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP_KEEPALIVE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP_KEEPALIVE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP_NODELAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP_NODELAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP_NODELAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP_NODELAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_ROW_ERRORS (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_ROW_ERRORS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_ROW_ERRORS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_ROW_ERRORS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PREFERRED_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_PREFERRED_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PREFERRED_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PREFERRED_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MIN_PREFERRED_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MIN_PREFERRED_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MIN_PREFERRED_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MIN_PREFERRED_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_PREFERRED_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_PREFERRED_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_PREFERRED_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_PREFERRED_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MIN_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MIN_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_VALID_LIFETIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_VALID_LIFETIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RENEW_TIMER (location_type l)
-      {
-        return symbol_type (token::TOKEN_RENEW_TIMER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RENEW_TIMER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RENEW_TIMER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REBIND_TIMER (location_type l)
-      {
-        return symbol_type (token::TOKEN_REBIND_TIMER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REBIND_TIMER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REBIND_TIMER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CALCULATE_TEE_TIMES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CALCULATE_TEE_TIMES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_T1_PERCENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_T1_PERCENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_T1_PERCENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_T1_PERCENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_T2_PERCENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_T2_PERCENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_T2_PERCENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_T2_PERCENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DECLINE_PROBATION_PERIOD (location_type l)
-      {
-        return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DECLINE_PROBATION_PERIOD (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_TAG (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_TAG, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_TAG (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_TAG, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OPTION_DEF (location_type l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DEF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OPTION_DEF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DEF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OPTION_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OPTION_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OPTION_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CODE (location_type l)
-      {
-        return symbol_type (token::TOKEN_CODE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CODE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CODE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SPACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SPACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SPACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SPACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CSV_FORMAT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CSV_FORMAT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CSV_FORMAT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CSV_FORMAT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALWAYS_SEND (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS_SEND, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALWAYS_SEND (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS_SEND, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECORD_TYPES (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECORD_TYPES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECORD_TYPES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECORD_TYPES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ENCAPSULATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_ENCAPSULATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ENCAPSULATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ENCAPSULATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ARRAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_ARRAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ARRAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ARRAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POOLS (location_type l)
-      {
-        return symbol_type (token::TOKEN_POOLS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POOLS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POOLS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_POOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_POOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_POOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_POOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PD_POOLS (location_type l)
-      {
-        return symbol_type (token::TOKEN_PD_POOLS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PD_POOLS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PD_POOLS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PREFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_PREFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PREFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PREFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PREFIX_LEN (location_type l)
-      {
-        return symbol_type (token::TOKEN_PREFIX_LEN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PREFIX_LEN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PREFIX_LEN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_EXCLUDED_PREFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_EXCLUDED_PREFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_EXCLUDED_PREFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_EXCLUDED_PREFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_EXCLUDED_PREFIX_LEN (location_type l)
-      {
-        return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_EXCLUDED_PREFIX_LEN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DELEGATED_LEN (location_type l)
-      {
-        return symbol_type (token::TOKEN_DELEGATED_LEN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DELEGATED_LEN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DELEGATED_LEN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USER_CONTEXT (location_type l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USER_CONTEXT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBNET (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBNET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBNET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBNET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACE (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTERFACE_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTERFACE_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTERFACE_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RAPID_COMMIT (location_type l)
-      {
-        return symbol_type (token::TOKEN_RAPID_COMMIT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RAPID_COMMIT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RAPID_COMMIT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RESERVATION_MODE (location_type l)
-      {
-        return symbol_type (token::TOKEN_RESERVATION_MODE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RESERVATION_MODE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RESERVATION_MODE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DISABLED (location_type l)
-      {
-        return symbol_type (token::TOKEN_DISABLED, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DISABLED (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DISABLED, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUT_OF_POOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUT_OF_POOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUT_OF_POOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUT_OF_POOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_GLOBAL (location_type l)
-      {
-        return symbol_type (token::TOKEN_GLOBAL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_GLOBAL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_GLOBAL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALL (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SHARED_NETWORKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SHARED_NETWORKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SHARED_NETWORKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SHARED_NETWORKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAC_SOURCES (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAC_SOURCES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAC_SOURCES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAC_SOURCES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RELAY_SUPPLIED_OPTIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RELAY_SUPPLIED_OPTIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOST_RESERVATION_IDENTIFIERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOST_RESERVATION_IDENTIFIERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SANITY_CHECKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SANITY_CHECKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SANITY_CHECKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SANITY_CHECKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LEASE_CHECKS (location_type l)
-      {
-        return symbol_type (token::TOKEN_LEASE_CHECKS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LEASE_CHECKS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LEASE_CHECKS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CLIENT_CLASSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CLIENT_CLASSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REQUIRE_CLIENT_CLASSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REQUIRE_CLIENT_CLASSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TEST (location_type l)
-      {
-        return symbol_type (token::TOKEN_TEST, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TEST (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TEST, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ONLY_IF_REQUIRED (location_type l)
-      {
-        return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ONLY_IF_REQUIRED (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CLIENT_CLASS (location_type l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CLIENT_CLASS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CLIENT_CLASS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RESERVATIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_RESERVATIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RESERVATIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RESERVATIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_IP_ADDRESSES (location_type l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESSES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_IP_ADDRESSES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESSES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PREFIXES (location_type l)
-      {
-        return symbol_type (token::TOKEN_PREFIXES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PREFIXES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PREFIXES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DUID (location_type l)
-      {
-        return symbol_type (token::TOKEN_DUID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DUID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DUID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HW_ADDRESS (location_type l)
-      {
-        return symbol_type (token::TOKEN_HW_ADDRESS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HW_ADDRESS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HW_ADDRESS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLEX_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLEX_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLEX_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLEX_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RELAY (location_type l)
-      {
-        return symbol_type (token::TOKEN_RELAY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RELAY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RELAY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_IP_ADDRESS (location_type l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_IP_ADDRESS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_IP_ADDRESS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LIBRARY (location_type l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LIBRARY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PARAMETERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PARAMETERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_EXPIRED_LEASES_PROCESSING (location_type l)
-      {
-        return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_EXPIRED_LEASES_PROCESSING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RECLAIM_TIMER_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RECLAIM_TIMER_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOLD_RECLAIMED_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOLD_RECLAIMED_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECLAIM_LEASES (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECLAIM_LEASES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_RECLAIM_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_RECLAIM_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_UNWARNED_RECLAIM_CYCLES (location_type l)
-      {
-        return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_UNWARNED_RECLAIM_CYCLES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LLT (location_type l)
-      {
-        return symbol_type (token::TOKEN_LLT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LLT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LLT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_EN (location_type l)
-      {
-        return symbol_type (token::TOKEN_EN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_EN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_EN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LL (location_type l)
-      {
-        return symbol_type (token::TOKEN_LL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_IDENTIFIER (location_type l)
-      {
-        return symbol_type (token::TOKEN_IDENTIFIER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_IDENTIFIER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_IDENTIFIER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HTYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_HTYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HTYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HTYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TIME (location_type l)
-      {
-        return symbol_type (token::TOKEN_TIME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TIME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TIME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ENTERPRISE_ID (location_type l)
-      {
-        return symbol_type (token::TOKEN_ENTERPRISE_ID, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ENTERPRISE_ID (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ENTERPRISE_ID, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP4O6_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP4O6_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP4O6_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP4O6_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTROL_SOCKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTROL_SOCKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP_QUEUE_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP_QUEUE_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP_DDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP_DDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP_DDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP_DDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ENABLE_UPDATES (location_type l)
-      {
-        return symbol_type (token::TOKEN_ENABLE_UPDATES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ENABLE_UPDATES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ENABLE_UPDATES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_QUALIFYING_SUFFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_QUALIFYING_SUFFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_IP (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_IP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_IP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_IP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SERVER_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_SERVER_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SERVER_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SERVER_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SENDER_IP (location_type l)
-      {
-        return symbol_type (token::TOKEN_SENDER_IP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SENDER_IP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SENDER_IP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SENDER_PORT (location_type l)
-      {
-        return symbol_type (token::TOKEN_SENDER_PORT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SENDER_PORT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SENDER_PORT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAX_QUEUE_SIZE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAX_QUEUE_SIZE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NCR_PROTOCOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_NCR_PROTOCOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NCR_PROTOCOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NCR_PROTOCOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NCR_FORMAT (location_type l)
-      {
-        return symbol_type (token::TOKEN_NCR_FORMAT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NCR_FORMAT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NCR_FORMAT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OVERRIDE_NO_UPDATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OVERRIDE_NO_UPDATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OVERRIDE_CLIENT_UPDATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OVERRIDE_CLIENT_UPDATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_REPLACE_CLIENT_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_REPLACE_CLIENT_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_GENERATED_PREFIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_GENERATED_PREFIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_GENERATED_PREFIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_GENERATED_PREFIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_UDP (location_type l)
-      {
-        return symbol_type (token::TOKEN_UDP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_UDP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_UDP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TCP (location_type l)
-      {
-        return symbol_type (token::TOKEN_TCP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TCP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TCP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_JSON (location_type l)
-      {
-        return symbol_type (token::TOKEN_JSON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_JSON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_JSON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_WHEN_PRESENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_WHEN_PRESENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_WHEN_PRESENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_WHEN_PRESENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NEVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_NEVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NEVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NEVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_ALWAYS (location_type l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_ALWAYS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_ALWAYS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_WHEN_NOT_PRESENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_WHEN_NOT_PRESENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_SET (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_SET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_REPLACEMENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGING (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DEBUGLEVEL (location_type l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DEBUGLEVEL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SEVERITY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SEVERITY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLUSH (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLUSH (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXSIZE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXSIZE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PATTERN (location_type l)
-      {
-        return symbol_type (token::TOKEN_PATTERN, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PATTERN (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PATTERN, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP4 (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP4, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP4 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP4, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCPDDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCPDDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCPDDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCPDDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTROL_AGENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_AGENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTROL_AGENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_AGENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TOPLEVEL_JSON (location_type l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_JSON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TOPLEVEL_JSON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_JSON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_TOPLEVEL_DHCP6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_TOPLEVEL_DHCP6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_DHCP6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_DHCP6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_INTERFACES6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_INTERFACES6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_INTERFACES6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_INTERFACES6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_SUBNET6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_SUBNET6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_SUBNET6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_SUBNET6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_POOL6 (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_POOL6, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_POOL6 (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_POOL6, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_PD_POOL (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_PD_POOL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_PD_POOL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_PD_POOL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_RESERVATION (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_RESERVATION, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_RESERVATION (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_RESERVATION, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DEFS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEFS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DEFS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEFS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DEF (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DEF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DEF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_OPTION_DATA (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DATA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_OPTION_DATA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_OPTION_DATA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_HOOKS_LIBRARY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_HOOKS_LIBRARY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_DHCP_DDNS (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP_DDNS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_DHCP_DDNS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_DHCP_DDNS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_LOGGING (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_LOGGING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_LOGGING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_LOGGING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUB_CONFIG_CONTROL (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUB_CONFIG_CONTROL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_STRING (std::string v, location_type l)
-      {
-        return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_STRING (const std::string& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_STRING, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTEGER (int64_t v, location_type l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTEGER (const int64_t& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLOAT (double v, location_type l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLOAT (const double& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, v, l);
-      }
+    // Symbol constructors declarations.
+    static
+    symbol_type
+    make_END (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COLON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NULL_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DATA_DIRECTORY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_DATABASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACES_CONFIG (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RE_DETECT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LEASE_DATABASE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTS_DATABASE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTS_DATABASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MEMFILE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MYSQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POSTGRESQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CQL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PASSWORD (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PERSIST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LFC_INTERVAL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_READONLY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONNECT_TIMEOUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTACT_POINTS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_KEYSPACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONSISTENCY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERIAL_CONSISTENCY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REQUEST_TIMEOUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP_KEEPALIVE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP_NODELAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_ROW_ERRORS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PREFERRED_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MIN_PREFERRED_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_PREFERRED_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MIN_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_VALID_LIFETIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RENEW_TIMER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REBIND_TIMER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CALCULATE_TEE_TIMES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_T1_PERCENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_T2_PERCENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_TAG (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_SEND_UPDATES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_REPLACE_CLIENT_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_GENERATED_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DDNS_QUALIFYING_SUFFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OPTION_DEF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OPTION_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CODE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SPACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CSV_FORMAT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALWAYS_SEND (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECORD_TYPES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ENCAPSULATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ARRAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POOLS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_POOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PD_POOLS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PREFIX_LEN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_EXCLUDED_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_EXCLUDED_PREFIX_LEN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DELEGATED_LEN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USER_CONTEXT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBNET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTERFACE_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RAPID_COMMIT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RESERVATION_MODE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DISABLED (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUT_OF_POOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_GLOBAL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SHARED_NETWORKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAC_SOURCES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RELAY_SUPPLIED_OPTIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SANITY_CHECKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LEASE_CHECKS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CLIENT_CLASSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TEST (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ONLY_IF_REQUIRED (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CLIENT_CLASS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RESERVATIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_IP_ADDRESSES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PREFIXES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DUID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HW_ADDRESS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLEX_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RELAY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_IP_ADDRESS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOOKS_LIBRARIES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LIBRARY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PARAMETERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_RECLAIM_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LLT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_EN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_IDENTIFIER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HTYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TIME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ENTERPRISE_ID (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP4O6_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTROL_SOCKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP_DDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ENABLE_UPDATES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_QUALIFYING_SUFFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_IP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SERVER_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SENDER_IP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SENDER_PORT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAX_QUEUE_SIZE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NCR_PROTOCOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NCR_FORMAT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_GENERATED_PREFIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_UDP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TCP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_JSON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_WHEN_PRESENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NEVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_ALWAYS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_WHEN_NOT_PRESENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DEBUGLEVEL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SEVERITY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLUSH (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXSIZE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PATTERN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP4 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCPDDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTROL_AGENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_TOPLEVEL_DHCP6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_DHCP6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_INTERFACES6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_SUBNET6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_POOL6 (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_PD_POOL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_RESERVATION (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DEFS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DEF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_OPTION_DATA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_DHCP_DDNS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_LOGGING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l);
+
+
+
+  private:
+    /// This class is not copyable.
+    Dhcp6Parser (const Dhcp6Parser&);
+    Dhcp6Parser& operator= (const Dhcp6Parser&);
+
+    /// State numbers.
+    typedef int state_type;
+
+    /// Generate an error message.
+    /// \param yystate   the state where the error occurred.
+    /// \param yyla      the lookahead token.
+    virtual std::string yysyntax_error_ (state_type yystate,
+                                         const symbol_type& yyla) const;
+
+    /// Compute post-reduction state.
+    /// \param yystate   the current state
+    /// \param yysym     the nonterminal to push on the stack
+    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
+    static const short yypact_ninf_;
+    static const signed char yytable_ninf_;
+
+    /// Convert a scanner token number \a t to a symbol number.
+    static token_number_type yytranslate_ (token_type t);
+
+    // Tables.
+  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+  // STATE-NUM.
+  static const short yypact_[];
+
+  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+  // Performed when YYTABLE does not specify something else to do.  Zero
+  // means the default is an error.
+  static const unsigned short yydefact_[];
+
+  // YYPGOTO[NTERM-NUM].
+  static const short yypgoto_[];
+
+  // YYDEFGOTO[NTERM-NUM].
+  static const short yydefgoto_[];
+
+  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+  // positive, shift that token.  If negative, reduce the rule whose
+  // number is the opposite.  If YYTABLE_NINF, syntax error.
+  static const unsigned short yytable_[];
+
+  static const short yycheck_[];
+
+  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+  // symbol of state STATE-NUM.
+  static const unsigned short yystos_[];
+
+  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+  static const unsigned short yyr1_[];
+
+  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+  static const unsigned char yyr2_[];
+
+
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);
+
+
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#if PARSER6_DEBUG
+  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+  static const unsigned short yyrline_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+
+    /// Debugging level.
+    int yydebug_;
+    /// Debug stream.
+    std::ostream* yycdebug_;
+
+    /// \brief Display a symbol type, value and location.
+    /// \param yyo    The output stream.
+    /// \param yysym  The symbol.
+    template <typename Base>
+    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
 #endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_BOOLEAN (bool v, location_type l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_BOOLEAN (const bool& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, v, l);
-      }
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg     Why this token is reclaimed.
+    ///                  If null, print nothing.
+    /// \param yysym     The symbol.
+    template <typename Base>
+    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+
+  private:
+    /// Type access provider for state based symbols.
+    struct by_state
+    {
+      /// Default constructor.
+      by_state ();
+
+      /// The symbol type as needed by the constructor.
+      typedef state_type kind_type;
+
+      /// Constructor.
+      by_state (kind_type s);
+
+      /// Copy constructor.
+      by_state (const by_state& other);
+
+      /// Record that this symbol is empty.
+      void clear ();
+
+      /// Steal the symbol type from \a that.
+      void move (by_state& that);
+
+      /// The (internal) type number (corresponding to \a state).
+      /// \a empty_symbol when empty.
+      symbol_number_type type_get () const;
+
+      /// The state number used to denote an empty symbol.
+      enum { empty_state = -1 };
+
+      /// The state.
+      /// \a empty when empty.
+      state_type state;
+    };
+
+    /// "Internal" symbol: element of the stack.
+    struct stack_symbol_type : basic_symbol<by_state>
+    {
+      /// Superclass.
+      typedef basic_symbol<by_state> super_type;
+      /// Construct an empty symbol.
+      stack_symbol_type ();
+      /// Move or copy construction.
+      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
+      /// Steal the contents from \a sym to build this.
+      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
+#if !defined __cplusplus || __cplusplus < 201103L
+      /// Assignment, needed by push_back by some old implementations.
+      /// Moves the contents of that.
+      stack_symbol_type& operator= (stack_symbol_type& that);
 #endif
+    };
+
+    /// Stack type.
+    typedef stack<stack_symbol_type> stack_type;
+
+    /// The stack.
+    stack_type yystack_;
+
+    /// Push a new state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param sym  the symbol
+    /// \warning the contents of \a s.value is stolen.
+    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+
+    /// Push a new look ahead token on the state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param s    the state
+    /// \param sym  the symbol (for its value and location).
+    /// \warning the contents of \a sym.value is stolen.
+    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+
+    /// Pop \a n symbols from the stack.
+    void yypop_ (int n = 1);
+
+    /// Constants.
+    enum
+    {
+      yyeof_ = 0,
+      yylast_ = 1180,     ///< Last index in yytable_.
+      yynnts_ = 419,  ///< Number of nonterminal symbols.
+      yyfinal_ = 32, ///< Termination state number.
+      yyterror_ = 1,
+      yyerrcode_ = 256,
+      yyntokens_ = 193  ///< Number of tokens.
+    };
+
+
+    // User arguments.
+    isc::dhcp::Parser6Context& ctx;
+  };
+
+  // Symbol number corresponding to token number t.
+  inline
+  Dhcp6Parser::token_number_type
+  Dhcp6Parser::yytranslate_ (token_type t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     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,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192
+    };
+    const unsigned user_token_number_max_ = 447;
+    const token_number_type undef_token_ = 2;
+
+    if (static_cast<int> (t) <= yyeof_)
+      return yyeof_;
+    else if (static_cast<unsigned> (t) <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return undef_token_;
+  }
+
+  inline
+  Dhcp6Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
+    : std::runtime_error (m)
+    , location (l)
+  {}
+
+  // basic_symbol.
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol ()
+    : value ()
+    , location ()
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (YY_RVREF (basic_symbol) other)
+    : Base (YY_MOVE (other))
+    , value ()
+    , location (YY_MOVE (other.location))
+  {
+    switch (other.type_get ())
+    {
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
+        value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value));
+        break;
+
+      case 192: // "boolean"
+        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value));
+        break;
+
+      case 191: // "floating point"
+        value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value));
+        break;
+
+      case 190: // "integer"
+        value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value));
+        break;
+
+      case 189: // "constant string"
+        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value));
+        break;
+
+      default:
+        break;
+    }
+
+  }
+
+
+  // Implementation of basic_symbol constructor for each type.
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l)
+    : Base (t)
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+
+
+  template <typename Base>
+  Dhcp6Parser::basic_symbol<Base>::~basic_symbol ()
+  {
+    clear ();
+  }
+
+  template <typename Base>
+  void
+  Dhcp6Parser::basic_symbol<Base>::clear ()
+  {
+    // User destructor.
+    symbol_number_type yytype = this->type_get ();
+    basic_symbol<Base>& yysym = *this;
+    (void) yysym;
+    switch (yytype)
+    {
+   default:
+      break;
+    }
+
+    // Type destructor.
+  switch (yytype)
+    {
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
+        value.template destroy< ElementPtr > ();
+        break;
+
+      case 192: // "boolean"
+        value.template destroy< bool > ();
+        break;
+
+      case 191: // "floating point"
+        value.template destroy< double > ();
+        break;
+
+      case 190: // "integer"
+        value.template destroy< int64_t > ();
+        break;
+
+      case 189: // "constant string"
+        value.template destroy< std::string > ();
+        break;
+
+      default:
+        break;
+    }
+
+    Base::clear ();
+  }
+
+  template <typename Base>
+  bool
+  Dhcp6Parser::basic_symbol<Base>::empty () const
+  {
+    return Base::type_get () == empty_symbol;
+  }
+
+  template <typename Base>
+  void
+  Dhcp6Parser::basic_symbol<Base>::move (basic_symbol& s)
+  {
+    super_type::move (s);
+    switch (this->type_get ())
+    {
+      case 210: // value
+      case 214: // map_value
+      case 255: // ddns_replace_client_name_value
+      case 289: // db_type
+      case 383: // hr_mode
+      case 519: // duid_type
+      case 554: // ncr_protocol_value
+        value.move< ElementPtr > (YY_MOVE (s.value));
+        break;
+
+      case 192: // "boolean"
+        value.move< bool > (YY_MOVE (s.value));
+        break;
+
+      case 191: // "floating point"
+        value.move< double > (YY_MOVE (s.value));
+        break;
+
+      case 190: // "integer"
+        value.move< int64_t > (YY_MOVE (s.value));
+        break;
+
+      case 189: // "constant string"
+        value.move< std::string > (YY_MOVE (s.value));
+        break;
+
+      default:
+        break;
+    }
+
+    location = YY_MOVE (s.location);
+  }
+
+  // by_type.
+  inline
+  Dhcp6Parser::by_type::by_type ()
+    : type (empty_symbol)
+  {}
+
+  inline
+  Dhcp6Parser::by_type::by_type (const by_type& other)
+    : type (other.type)
+  {}
+
+  inline
+  Dhcp6Parser::by_type::by_type (token_type t)
+    : type (yytranslate_ (t))
+  {}
+
+  inline
+  void
+  Dhcp6Parser::by_type::clear ()
+  {
+    type = empty_symbol;
+  }
+
+  inline
+  void
+  Dhcp6Parser::by_type::move (by_type& that)
+  {
+    type = that.type;
+    that.clear ();
+  }
+
+  inline
+  int
+  Dhcp6Parser::by_type::type_get () const
+  {
+    return type;
+  }
+
+  inline
+  Dhcp6Parser::token_type
+  Dhcp6Parser::by_type::token () const
+  {
+    // YYTOKNUM[NUM] -- (External) token number corresponding to the
+    // (internal) symbol number NUM (which must be that of a token).  */
+    static
+    const unsigned short
+    yytoken_number_[] =
+    {
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     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,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447
+    };
+    return static_cast<token_type> (yytoken_number_[type]);
+  }
+
+  // Implementation of make_symbol for each symbol type.
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_END (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_END, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_COMMA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_COLON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COLON, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_NULL_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCP6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DATA_DIRECTORY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DATA_DIRECTORY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONFIG_CONTROL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_CONTROL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONFIG_DATABASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_DATABASES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_INTERFACES_CONFIG (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACES_CONFIG, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_INTERFACES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RE_DETECT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RE_DETECT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LEASE_DATABASE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LEASE_DATABASE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTS_DATABASE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTS_DATABASE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTS_DATABASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTS_DATABASES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MEMFILE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MEMFILE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MYSQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MYSQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_POSTGRESQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POSTGRESQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CQL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CQL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_USER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USER, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PASSWORD (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PASSWORD, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOST, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PORT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PERSIST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PERSIST, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LFC_INTERVAL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LFC_INTERVAL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_READONLY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_READONLY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONNECT_TIMEOUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONNECT_TIMEOUT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONTACT_POINTS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTACT_POINTS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_KEYSPACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_KEYSPACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONSISTENCY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONSISTENCY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SERIAL_CONSISTENCY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_REQUEST_TIMEOUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REQUEST_TIMEOUT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TCP_KEEPALIVE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP_KEEPALIVE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TCP_NODELAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP_NODELAY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_ROW_ERRORS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_ROW_ERRORS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PREFERRED_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PREFERRED_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MIN_PREFERRED_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MIN_PREFERRED_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_PREFERRED_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_PREFERRED_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_VALID_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MIN_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MIN_VALID_LIFETIME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_VALID_LIFETIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_VALID_LIFETIME, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RENEW_TIMER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RENEW_TIMER, YY_MOVE (l));
+  }
 
-  private:
-    /// This class is not copyable.
-    Dhcp6Parser (const Dhcp6Parser&);
-    Dhcp6Parser& operator= (const Dhcp6Parser&);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_REBIND_TIMER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REBIND_TIMER, YY_MOVE (l));
+  }
 
-    /// State numbers.
-    typedef int state_type;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CALCULATE_TEE_TIMES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CALCULATE_TEE_TIMES, YY_MOVE (l));
+  }
 
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yyla      the lookahead token.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         const symbol_type& yyla) const;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_T1_PERCENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_T1_PERCENT, YY_MOVE (l));
+  }
 
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yysym     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_T2_PERCENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_T2_PERCENT, YY_MOVE (l));
+  }
 
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SERVER_TAG (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_TAG, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_SEND_UPDATES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_SEND_UPDATES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_OVERRIDE_NO_UPDATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_REPLACE_CLIENT_NAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_GENERATED_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_GENERATED_PREFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DDNS_QUALIFYING_SUFFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUBNET6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET6, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OPTION_DEF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OPTION_DEF, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OPTION_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OPTION_DATA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NAME, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DATA, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CODE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CODE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SPACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SPACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CSV_FORMAT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CSV_FORMAT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ALWAYS_SEND (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ALWAYS_SEND, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RECORD_TYPES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECORD_TYPES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ENCAPSULATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ENCAPSULATE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ARRAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ARRAY, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_POOLS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POOLS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_POOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_POOL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PD_POOLS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PD_POOLS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PREFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PREFIX_LEN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PREFIX_LEN, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_EXCLUDED_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_EXCLUDED_PREFIX, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_EXCLUDED_PREFIX_LEN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DELEGATED_LEN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DELEGATED_LEN, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_USER_CONTEXT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_COMMENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUBNET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBNET, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_INTERFACE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_INTERFACE_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTERFACE_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RAPID_COMMIT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RAPID_COMMIT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RESERVATION_MODE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RESERVATION_MODE, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DISABLED (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DISABLED, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OUT_OF_POOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUT_OF_POOL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_GLOBAL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_GLOBAL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ALL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ALL, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SHARED_NETWORKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SHARED_NETWORKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAC_SOURCES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAC_SOURCES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RELAY_SUPPLIED_OPTIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SANITY_CHECKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SANITY_CHECKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LEASE_CHECKS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LEASE_CHECKS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CLIENT_CLASSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CLIENT_CLASSES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TEST (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TEST, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ONLY_IF_REQUIRED (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CLIENT_CLASS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CLIENT_CLASS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RESERVATIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RESERVATIONS, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_IP_ADDRESSES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESSES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PREFIXES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PREFIXES, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DUID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DUID, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HW_ADDRESS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HW_ADDRESS, YY_MOVE (l));
+  }
 
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTNAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME, YY_MOVE (l));
+  }
 
-    static const short yypact_ninf_;
-    static const signed char yytable_ninf_;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_FLEX_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLEX_ID, YY_MOVE (l));
+  }
 
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (token_type t);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RELAY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RELAY, YY_MOVE (l));
+  }
 
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const short yypact_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_IP_ADDRESS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, YY_MOVE (l));
+  }
 
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned short yydefact_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOOKS_LIBRARIES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOOKS_LIBRARIES, YY_MOVE (l));
+  }
 
-  // YYPGOTO[NTERM-NUM].
-  static const short yypgoto_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LIBRARY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LIBRARY, YY_MOVE (l));
+  }
 
-  // YYDEFGOTO[NTERM-NUM].
-  static const short yydefgoto_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PARAMETERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PARAMETERS, YY_MOVE (l));
+  }
 
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const unsigned short yytable_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, YY_MOVE (l));
+  }
 
-  static const short yycheck_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, YY_MOVE (l));
+  }
 
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned short yystos_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, YY_MOVE (l));
+  }
 
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned short yyr1_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, YY_MOVE (l));
+  }
 
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_RECLAIM_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, YY_MOVE (l));
+  }
 
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SERVER_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_ID, YY_MOVE (l));
+  }
 
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if PARSER6_DEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LLT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LLT, YY_MOVE (l));
+  }
 
-    /// Debugging level.
-    int yydebug_;
-    /// Debug stream.
-    std::ostream* yycdebug_;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_EN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_EN, YY_MOVE (l));
+  }
 
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
-#endif
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LL, YY_MOVE (l));
+  }
 
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param yysym     The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_IDENTIFIER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_IDENTIFIER, YY_MOVE (l));
+  }
 
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state () YY_NOEXCEPT;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HTYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HTYPE, YY_MOVE (l));
+  }
 
-      /// The symbol type as needed by the constructor.
-      typedef state_type kind_type;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TIME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TIME, YY_MOVE (l));
+  }
 
-      /// Constructor.
-      by_state (kind_type s) YY_NOEXCEPT;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ENTERPRISE_ID (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ENTERPRISE_ID, YY_MOVE (l));
+  }
 
-      /// Copy constructor.
-      by_state (const by_state& that) YY_NOEXCEPT;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCP4O6_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP4O6_PORT, YY_MOVE (l));
+  }
 
-      /// Record that this symbol is empty.
-      void clear () YY_NOEXCEPT;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONTROL_SOCKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, YY_MOVE (l));
+  }
 
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SOCKET_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_TYPE, YY_MOVE (l));
+  }
 
-      /// The (internal) type number (corresponding to \a state).
-      /// \a empty_symbol when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SOCKET_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_NAME, YY_MOVE (l));
+  }
 
-      /// The state number used to denote an empty symbol.
-      enum { empty_state = -1 };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, YY_MOVE (l));
+  }
 
-      /// The state.
-      /// \a empty when empty.
-      state_type state;
-    };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCP_DDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP_DDNS, YY_MOVE (l));
+  }
 
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Move or copy construction.
-      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
-      /// Assignment, needed by push_back by some old implementations.
-      /// Moves the contents of that.
-      stack_symbol_type& operator= (stack_symbol_type& that);
-#endif
-    };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ENABLE_UPDATES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ENABLE_UPDATES, YY_MOVE (l));
+  }
 
-    /// A stack with random access from its top.
-    template <typename T, typename S = std::vector<T> >
-    class stack
-    {
-    public:
-      // Hide our reversed order.
-      typedef typename S::reverse_iterator iterator;
-      typedef typename S::const_reverse_iterator const_iterator;
-      typedef typename S::size_type size_type;
-
-      stack (size_type n = 200)
-        : seq_ (n)
-      {}
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (size_type i)
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (int i)
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (size_type i) const
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (int i) const
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Steal the contents of \a t.
-      ///
-      /// Close to move-semantics.
-      void
-      push (YY_MOVE_REF (T) t)
-      {
-        seq_.push_back (T ());
-        operator[] (0).move (t);
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_QUALIFYING_SUFFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, YY_MOVE (l));
+  }
 
-      /// Pop elements from the stack.
-      void
-      pop (int n = 1) YY_NOEXCEPT
-      {
-        for (; 0 < n; --n)
-          seq_.pop_back ();
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SERVER_IP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_IP, YY_MOVE (l));
+  }
 
-      /// Pop all elements from the stack.
-      void
-      clear () YY_NOEXCEPT
-      {
-        seq_.clear ();
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SERVER_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SERVER_PORT, YY_MOVE (l));
+  }
 
-      /// Number of elements on the stack.
-      size_type
-      size () const YY_NOEXCEPT
-      {
-        return seq_.size ();
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SENDER_IP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SENDER_IP, YY_MOVE (l));
+  }
 
-      /// Iterator on top of the stack (going downwards).
-      const_iterator
-      begin () const YY_NOEXCEPT
-      {
-        return seq_.rbegin ();
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SENDER_PORT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SENDER_PORT, YY_MOVE (l));
+  }
 
-      /// Bottom of the stack.
-      const_iterator
-      end () const YY_NOEXCEPT
-      {
-        return seq_.rend ();
-      }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_QUEUE_SIZE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, YY_MOVE (l));
+  }
 
-      /// Present a slice of the top of a stack.
-      class slice
-      {
-      public:
-        slice (const stack& stack, int range)
-          : stack_ (stack)
-          , range_ (range)
-        {}
-
-        const T&
-        operator[] (int i) const
-        {
-          return stack_[range_ - i];
-        }
-
-      private:
-        const stack& stack_;
-        int range_;
-      };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_NCR_PROTOCOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, YY_MOVE (l));
+  }
 
-    private:
-      stack (const stack&);
-      stack& operator= (const stack&);
-      /// The wrapped container.
-      S seq_;
-    };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_NCR_FORMAT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, YY_MOVE (l));
+  }
+
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, YY_MOVE (l));
+  }
 
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, YY_MOVE (l));
+  }
 
-    /// The stack.
-    stack_type yystack_;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_GENERATED_PREFIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_GENERATED_PREFIX, YY_MOVE (l));
+  }
 
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param sym  the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_UDP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_UDP, YY_MOVE (l));
+  }
 
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a sym.value is stolen.
-    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TCP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TCP, YY_MOVE (l));
+  }
 
-    /// Pop \a n symbols from the stack.
-    void yypop_ (int n = 1);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_JSON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_JSON, YY_MOVE (l));
+  }
 
-    /// Constants.
-    enum
-    {
-      yyeof_ = 0,
-      yylast_ = 1107,     ///< Last index in yytable_.
-      yynnts_ = 406,  ///< Number of nonterminal symbols.
-      yyfinal_ = 32, ///< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 187  ///< Number of tokens.
-    };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_WHEN_PRESENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_WHEN_PRESENT, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_NEVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NEVER, YY_MOVE (l));
+  }
 
-    // User arguments.
-    isc::dhcp::Parser6Context& ctx;
-  };
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_ALWAYS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_ALWAYS, YY_MOVE (l));
+  }
 
   inline
-  Dhcp6Parser::token_number_type
-  Dhcp6Parser::yytranslate_ (token_type t)
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_WHEN_NOT_PRESENT (YY_COPY (location_type) l)
   {
-    // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
-    // TOKEN-NUM as returned by yylex.
-    static
-    const token_number_type
-    translate_table[] =
-    {
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     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,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186
-    };
-    const unsigned user_token_number_max_ = 441;
-    const token_number_type undef_token_ = 2;
+    return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, YY_MOVE (l));
+  }
 
-    if (static_cast<int> (t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, YY_MOVE (l));
   }
 
-  // basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  Dhcp6Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
-    : Base (std::move (that))
-    , value ()
-    , location (std::move (that.location))
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l)
   {
-    switch (this->type_get ())
-    {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
-        value.move< ElementPtr > (std::move (that.value));
-        break;
+    return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, YY_MOVE (l));
+  }
 
-      case 186: // "boolean"
-        value.move< bool > (std::move (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LOGGING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l));
+  }
 
-      case 185: // "floating point"
-        value.move< double > (std::move (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_LOGGERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l));
+  }
 
-      case 184: // "integer"
-        value.move< int64_t > (std::move (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l));
+  }
 
-      case 183: // "constant string"
-        value.move< std::string > (std::move (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_OUTPUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DEBUGLEVEL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SEVERITY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l));
   }
-#endif
 
-  template <typename Base>
-  Dhcp6Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
-    : Base (that)
-    , value ()
-    , location (that.location)
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_FLUSH (YY_COPY (location_type) l)
   {
-    switch (this->type_get ())
-    {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
-        value.copy< ElementPtr > (YY_MOVE (that.value));
-        break;
+    return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l));
+  }
 
-      case 186: // "boolean"
-        value.copy< bool > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAXSIZE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l));
+  }
 
-      case 185: // "floating point"
-        value.copy< double > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAXVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l));
+  }
 
-      case 184: // "integer"
-        value.copy< int64_t > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_PATTERN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PATTERN, YY_MOVE (l));
+  }
 
-      case 183: // "constant string"
-        value.copy< std::string > (YY_MOVE (that.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCP4 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_DHCPDDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONTROL_AGENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, YY_MOVE (l));
   }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TOPLEVEL_JSON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, YY_MOVE (l));
+  }
 
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_TOPLEVEL_DHCP6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, YY_MOVE (l));
+  }
 
-  template <typename Base>
-  bool
-  Dhcp6Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_DHCP6 (YY_COPY (location_type) l)
   {
-    return Base::type_get () == empty_symbol;
+    return symbol_type (token::TOKEN_SUB_DHCP6, YY_MOVE (l));
   }
 
-  template <typename Base>
-  void
-  Dhcp6Parser::basic_symbol<Base>::move (basic_symbol& s)
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_INTERFACES6 (YY_COPY (location_type) l)
   {
-    super_type::move (s);
-    switch (this->type_get ())
-    {
-      case 204: // value
-      case 208: // map_value
-      case 269: // db_type
-      case 363: // hr_mode
-      case 499: // duid_type
-      case 534: // ncr_protocol_value
-      case 541: // replace_client_name_value
-        value.move< ElementPtr > (YY_MOVE (s.value));
-        break;
+    return symbol_type (token::TOKEN_SUB_INTERFACES6, YY_MOVE (l));
+  }
 
-      case 186: // "boolean"
-        value.move< bool > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_SUBNET6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_SUBNET6, YY_MOVE (l));
+  }
 
-      case 185: // "floating point"
-        value.move< double > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_POOL6 (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_POOL6, YY_MOVE (l));
+  }
 
-      case 184: // "integer"
-        value.move< int64_t > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_PD_POOL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_PD_POOL, YY_MOVE (l));
+  }
 
-      case 183: // "constant string"
-        value.move< std::string > (YY_MOVE (s.value));
-        break;
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_RESERVATION (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_RESERVATION, YY_MOVE (l));
+  }
 
-      default:
-        break;
-    }
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_OPTION_DEFS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEFS, YY_MOVE (l));
+  }
 
-    location = YY_MOVE (s.location);
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_OPTION_DEF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DEF, YY_MOVE (l));
   }
 
-  // by_type.
   inline
-  Dhcp6Parser::by_type::by_type ()
-    : type (empty_symbol)
-  {}
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_OPTION_DATA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_OPTION_DATA, YY_MOVE (l));
+  }
 
-#if 201103L <= YY_CPLUSPLUS
   inline
-  Dhcp6Parser::by_type::by_type (by_type&& that)
-    : type (that.type)
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l)
   {
-    that.clear ();
+    return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, YY_MOVE (l));
   }
-#endif
 
   inline
-  Dhcp6Parser::by_type::by_type (const by_type& that)
-    : type (that.type)
-  {}
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_DHCP_DDNS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_DHCP_DDNS, YY_MOVE (l));
+  }
 
   inline
-  Dhcp6Parser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_LOGGING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUB_LOGGING, YY_MOVE (l));
+  }
 
   inline
-  void
-  Dhcp6Parser::by_type::clear ()
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l)
   {
-    type = empty_symbol;
+    return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, YY_MOVE (l));
   }
 
   inline
-  void
-  Dhcp6Parser::by_type::move (by_type& that)
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l)
   {
-    type = that.type;
-    that.clear ();
+    return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l));
   }
 
   inline
-  int
-  Dhcp6Parser::by_type::type_get () const YY_NOEXCEPT
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l)
   {
-    return type;
+    return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l));
   }
 
   inline
-  Dhcp6Parser::token_type
-  Dhcp6Parser::by_type::token () const YY_NOEXCEPT
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l)
   {
-    // YYTOKNUM[NUM] -- (External) token number corresponding to the
-    // (internal) symbol number NUM (which must be that of a token).  */
-    static
-    const unsigned short
-    yytoken_number_[] =
-    {
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     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,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441
-    };
-    return token_type (yytoken_number_[type]);
+    return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l));
   }
 
-#line 14 "dhcp6_parser.yy"
-} } // isc::dhcp
-#line 4359 "dhcp6_parser.h"
+  inline
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l));
+  }
 
 
+#line 14 "dhcp6_parser.yy" // lalr1.cc:404
+} } // isc::dhcp
+#line 3509 "dhcp6_parser.h" // lalr1.cc:404
+
 
 
 
index 3523ad7de649f936b1c6ddae9b11f08a001bd66e..fc363c2a5a2cbeb9fbb3cbc7b8e81ce708585d49 100644 (file)
@@ -99,6 +99,12 @@ using namespace std;
   T2_PERCENT "t2-percent"
   DECLINE_PROBATION_PERIOD "decline-probation-period"
   SERVER_TAG "server-tag"
+  DDNS_SEND_UPDATES "ddns-send-updates"
+  DDNS_OVERRIDE_NO_UPDATE "ddns-override-no-update"
+  DDNS_OVERRIDE_CLIENT_UPDATE "ddns-override-client-update"
+  DDNS_REPLACE_CLIENT_NAME "ddns-replace-client-name"
+  DDNS_GENERATED_PREFIX "ddns-generated-prefix"
+  DDNS_QUALIFYING_SUFFIX "ddns-qualifying-suffix"
   SUBNET6 "subnet6"
   OPTION_DEF "option-def"
   OPTION_DATA "option-data"
@@ -257,7 +263,7 @@ using namespace std;
 %type <ElementPtr> hr_mode
 %type <ElementPtr> duid_type
 %type <ElementPtr> ncr_protocol_value
-%type <ElementPtr> replace_client_name_value
+%type <ElementPtr> ddns_replace_client_name_value
 
 %printer { yyoutput << $$; } <*>;
 
@@ -491,6 +497,12 @@ global_param: data_directory
             | loggers
             | hostname_char_set
             | hostname_char_replacement
+            | ddns_send_updates
+            | ddns_override_no_update
+            | ddns_override_client_update
+            | ddns_replace_client_name
+            | ddns_generated_prefix
+            | ddns_qualifying_suffix
             | unknown_map_entry
             ;
 
@@ -562,6 +574,79 @@ decline_probation_period: DECLINE_PROBATION_PERIOD COLON INTEGER {
     ctx.stack_.back()->set("decline-probation-period", dpp);
 };
 
+ddns_send_updates: DDNS_SEND_UPDATES COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-send-updates", b);
+};
+
+ddns_override_no_update: DDNS_OVERRIDE_NO_UPDATE COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-override-no-update", b);
+};
+
+ddns_override_client_update: DDNS_OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
+    ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("ddns-override-client-update", b);
+};
+
+ddns_replace_client_name: DDNS_REPLACE_CLIENT_NAME {
+    ctx.enter(ctx.REPLACE_CLIENT_NAME);
+} COLON ddns_replace_client_name_value {
+    ctx.stack_.back()->set("ddns-replace-client-name", $4);
+    ctx.leave();
+};
+
+ddns_replace_client_name_value:
+    WHEN_PRESENT {
+      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1)));
+      }
+  | NEVER {
+      $$ = ElementPtr(new StringElement("never", ctx.loc2pos(@1)));
+      }
+  | ALWAYS {
+      $$ = ElementPtr(new StringElement("always", ctx.loc2pos(@1)));
+      }
+  | WHEN_NOT_PRESENT {
+      $$ = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(@1)));
+      }
+  | BOOLEAN  {
+      error(@1, "boolean values for the replace-client-name are "
+                "no longer supported");
+      }
+  ;
+
+ddns_generated_prefix: DDNS_GENERATED_PREFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("ddns-generated-prefix", s);
+    ctx.leave();
+};
+
+ddns_qualifying_suffix: DDNS_QUALIFYING_SUFFIX {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("ddns-qualifying-suffix", s);
+    ctx.leave();
+};
+
+hostname_char_set: HOSTNAME_CHAR_SET {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-set", s);
+    ctx.leave();
+};
+
+hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON STRING {
+    ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("hostname-char-replacement", s);
+    ctx.leave();
+};
+
 server_tag: SERVER_TAG {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
@@ -1142,6 +1227,14 @@ subnet6_param: preferred_lifetime
              | calculate_tee_times
              | t1_percent
              | t2_percent
+             | hostname_char_set
+             | hostname_char_replacement
+             | ddns_send_updates
+             | ddns_override_no_update
+             | ddns_override_client_update
+             | ddns_replace_client_name
+             | ddns_generated_prefix
+             | ddns_qualifying_suffix
              | unknown_map_entry
              ;
 
@@ -1268,6 +1361,14 @@ shared_network_param: name
                     | calculate_tee_times
                     | t1_percent
                     | t2_percent
+                    | hostname_char_set
+                    | hostname_char_replacement
+                    | ddns_send_updates
+                    | ddns_override_no_update
+                    | ddns_override_client_update
+                    | ddns_replace_client_name
+                    | ddns_generated_prefix
+                    | ddns_qualifying_suffix
                     | unknown_map_entry
                     ;
 
@@ -2108,12 +2209,12 @@ dhcp_ddns_param: enable_updates
                | max_queue_size
                | ncr_protocol
                | ncr_format
-               | override_no_update
-               | override_client_update
-               | replace_client_name
-               | generated_prefix
-               | hostname_char_set
-               | hostname_char_replacement
+               | dep_override_no_update
+               | dep_override_client_update
+               | dep_replace_client_name
+               | dep_generated_prefix
+               | dep_hostname_char_set
+               | dep_hostname_char_replacement
                | user_context
                | comment
                | unknown_map_entry
@@ -2183,43 +2284,28 @@ ncr_format: NCR_FORMAT {
     ctx.leave();
 };
 
-override_no_update: OVERRIDE_NO_UPDATE COLON BOOLEAN {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_override_no_update: OVERRIDE_NO_UPDATE COLON BOOLEAN {
     ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("override-no-update", b);
 };
 
-override_client_update: OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_override_client_update: OVERRIDE_CLIENT_UPDATE COLON BOOLEAN {
     ElementPtr b(new BoolElement($3, ctx.loc2pos(@3)));
     ctx.stack_.back()->set("override-client-update", b);
 };
 
-replace_client_name: REPLACE_CLIENT_NAME {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_replace_client_name: REPLACE_CLIENT_NAME {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
-} COLON replace_client_name_value {
+} COLON ddns_replace_client_name_value {
     ctx.stack_.back()->set("replace-client-name", $4);
     ctx.leave();
 };
 
-replace_client_name_value:
-    WHEN_PRESENT {
-      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1)));
-      }
-  | NEVER {
-      $$ = ElementPtr(new StringElement("never", ctx.loc2pos(@1)));
-      }
-  | ALWAYS {
-      $$ = ElementPtr(new StringElement("always", ctx.loc2pos(@1)));
-      }
-  | WHEN_NOT_PRESENT {
-      $$ = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(@1)));
-      }
-  | BOOLEAN  {
-      error(@1, "boolean values for the replace-client-name are "
-                "no longer supported");
-      }
-  ;
-
-generated_prefix: GENERATED_PREFIX {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_generated_prefix: GENERATED_PREFIX {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
@@ -2227,7 +2313,8 @@ generated_prefix: GENERATED_PREFIX {
     ctx.leave();
 };
 
-hostname_char_set: HOSTNAME_CHAR_SET {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_hostname_char_set: HOSTNAME_CHAR_SET {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
@@ -2235,7 +2322,8 @@ hostname_char_set: HOSTNAME_CHAR_SET {
     ctx.leave();
 };
 
-hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
+// Deprecated, moved to global/network scopes. Eventually it should be removed.
+dep_hostname_char_replacement: HOSTNAME_CHAR_REPLACEMENT {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
     ElementPtr s(new StringElement($4, ctx.loc2pos(@4)));
index 453f65d7e2c73acd94e55dbcb13d8309970e5857..6f9236ac64c852b45e0782c44a0390544ba49205 100644 (file)
@@ -1595,17 +1595,16 @@ void
 Dhcpv6Srv::processClientFqdn(const Pkt6Ptr& question, const Pkt6Ptr& answer,
                              AllocEngine::ClientContext6& ctx) {
     D2ClientMgr& d2_mgr = CfgMgr::instance().getD2ClientMgr();
+    DdnsParamsPtr ddns_params = ctx.getDdnsParams();
 
     // Get Client FQDN Option from the client's message. If this option hasn't
     // been included, do nothing.
     Option6ClientFqdnPtr fqdn = boost::dynamic_pointer_cast<
         Option6ClientFqdn>(question->getOption(D6O_CLIENT_FQDN));
     if (!fqdn) {
-        D2ClientConfig::ReplaceClientNameMode replace_name_mode =
-            d2_mgr.getD2ClientConfig()->getReplaceClientNameMode();
-        if (d2_mgr.ddnsEnabled() &&
-            (replace_name_mode == D2ClientConfig::RCM_ALWAYS ||
-             replace_name_mode == D2ClientConfig::RCM_WHEN_NOT_PRESENT)) {
+        if (ddns_params->enable_updates_ &&
+            (ddns_params->replace_client_name_mode_ == D2ClientConfig::RCM_ALWAYS ||
+             ddns_params->replace_client_name_mode_ == D2ClientConfig::RCM_WHEN_NOT_PRESENT)) {
             // Fabricate an empty "client" FQDN with flags requesting
             // the server do all the updates.  The flags will get modified
             // below according the configuration options, the name will
@@ -1635,19 +1634,19 @@ Dhcpv6Srv::processClientFqdn(const Pkt6Ptr& question, const Pkt6Ptr& answer,
 
     // Set the server S, N, and O flags based on client's flags and
     // current configuration.
-    d2_mgr.adjustFqdnFlags<Option6ClientFqdn>(*fqdn, *fqdn_resp);
+    d2_mgr.adjustFqdnFlags<Option6ClientFqdn>(*fqdn, *fqdn_resp, *ddns_params);
 
     // If there's a reservation and it has a hostname specified, use it!
     if (ctx.currentHost() && !ctx.currentHost()->getHostname().empty()) {
         // Add the qualifying suffix.
         // After #3765, this will only occur if the suffix is not empty.
         fqdn_resp->setDomainName(d2_mgr.qualifyName(ctx.currentHost()->getHostname(),
-                                                    true),
+                                                    *ddns_params, true),
                                                     Option6ClientFqdn::FULL);
     } else {
         // Adjust the domain name based on domain name value and type sent by
         // the client and current configuration.
-        d2_mgr.adjustDomainName<Option6ClientFqdn>(*fqdn, *fqdn_resp);
+        d2_mgr.adjustDomainName<Option6ClientFqdn>(*fqdn, *fqdn_resp, *ddns_params);
     }
 
     // Once we have the FQDN setup to use it for the lease hostname.  This
@@ -1668,7 +1667,7 @@ void
 Dhcpv6Srv::createNameChangeRequests(const Pkt6Ptr& answer,
                                     AllocEngine::ClientContext6& ctx) {
     // Don't create NameChangeRequests if DNS updates are disabled.
-    if (!CfgMgr::instance().ddnsEnabled()) {
+    if (!(ctx.getDdnsParams()->enable_updates_)) {
         return;
     }
 
@@ -3651,7 +3650,7 @@ Dhcpv6Srv::requiredClassify(const Pkt6Ptr& pkt, AllocEngine::ClientContext6& ctx
 }
 
 void
-Dhcpv6Srv::updateReservedFqdn(const AllocEngine::ClientContext6& ctx,
+Dhcpv6Srv::updateReservedFqdn(AllocEngine::ClientContext6& ctx,
                               const Pkt6Ptr& answer) {
     if (!answer) {
         isc_throw(isc::Unexpected, "an instance of the object encapsulating"
@@ -3676,7 +3675,7 @@ Dhcpv6Srv::updateReservedFqdn(const AllocEngine::ClientContext6& ctx,
    if (ctx.currentHost() &&
        !ctx.currentHost()->getHostname().empty()) {
        std::string new_name = CfgMgr::instance().getD2ClientMgr().
-           qualifyName(ctx.currentHost()->getHostname(), true);
+           qualifyName(ctx.currentHost()->getHostname(), *ctx.getDdnsParams(), true);
 
        if (new_name != name) {
            fqdn->setDomainName(new_name, Option6ClientFqdn::FULL);
@@ -3723,7 +3722,7 @@ Dhcpv6Srv::generateFqdn(const Pkt6Ptr& answer,
     // Get the IPv6 address acquired by the client.
     IOAddress addr = iaaddr->getAddress();
     std::string generated_name =
-        CfgMgr::instance().getD2ClientMgr().generateFqdn(addr);
+        CfgMgr::instance().getD2ClientMgr().generateFqdn(addr, *ctx.getDdnsParams());
 
     LOG_DEBUG(ddns6_logger, DBG_DHCP6_DETAIL_DATA, DHCP6_DDNS_FQDN_GENERATED)
         .arg(answer->getLabel())
index 8a4b4411338717571c84c00f1f9522f13cbbbcb0..248e4c3eb8790cd3ac75978967f27bdbaa33baaa 100644 (file)
@@ -938,7 +938,7 @@ private:
     ///
     /// @throw isc::Unexpected if specified message is NULL. This is treated
     /// as a programmatic error.
-    void updateReservedFqdn(const AllocEngine::ClientContext6& ctx,
+    void updateReservedFqdn(AllocEngine::ClientContext6& ctx,
                             const Pkt6Ptr& answer);
 
     /// @private
index 93659a2861de5f8bc1f13be3a26a32c773ab0717..43d5f4dd2950e2f0c4a47726326412bbad5d5b7f 100644 (file)
@@ -451,6 +451,12 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
         // Get the staging configuration.
         srv_config = CfgMgr::instance().getStagingCfg();
 
+        // Relocate dhcp-ddns parameters that have moved to global scope.
+        // Rule is that a global value overrides the dhcp-ddns value, so
+        // we need to do this before we apply global defaults.
+        // Note this is done for backward compatibilty.
+        srv_config->moveDdnsParams(mutable_cfg);
+
         // Set all default values if not specified by the user.
         SimpleParser6::setAllDefaults(mutable_cfg);
 
@@ -682,8 +688,13 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
                  (config_pair.first == "t2-percent") ||
                  (config_pair.first == "loggers") ||
                  (config_pair.first == "hostname-char-set") ||
-                 (config_pair.first == "hostname-char-replacement")) {
-
+                 (config_pair.first == "hostname-char-replacement") ||
+                 (config_pair.first == "ddns-send-updates") ||
+                 (config_pair.first == "ddns-override-no-update") ||
+                 (config_pair.first == "ddns-override-client-update") ||
+                 (config_pair.first == "ddns-replace-client-name") ||
+                 (config_pair.first == "ddns-generated-prefix") ||
+                 (config_pair.first == "ddns-qualifying-suffix")) {
                 CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
                                                                         config_pair.second);
                 continue;
@@ -717,9 +728,6 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
         // Validate D2 client confuguration.
         if (!d2_client_cfg) {
             d2_client_cfg.reset(new D2ClientConfig());
-            d2_client_cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
-                return (CfgMgr::instance().getStagingCfg()->getConfiguredGlobals());
-             });
         }
         d2_client_cfg->validateContents();
         srv_config->setD2ClientConfig(d2_client_cfg);
index 238ec5955224b7959d19d1e071ff82d2052fc78a..94d877060d091c514c72e697e42ab50e7d49b4f4 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201908191238
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Locations for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 #  endif
 # endif
 
-#line 14 "dhcp6_parser.yy"
+#line 14 "dhcp6_parser.yy" // location.cc:339
 namespace isc { namespace dhcp {
-#line 60 "location.hh"
-
+#line 60 "location.hh" // location.cc:339
   /// A point in a source file.
   class position
   {
@@ -318,8 +316,7 @@ namespace isc { namespace dhcp {
     return ostr;
   }
 
-#line 14 "dhcp6_parser.yy"
+#line 14 "dhcp6_parser.yy" // location.cc:339
 } } // isc::dhcp
-#line 323 "location.hh"
-
+#line 322 "location.hh" // location.cc:339
 #endif // !YY_PARSER6_LOCATION_HH_INCLUDED
index c202e38cf421a1f2c784e7dcf24a9a456e57d57d..22ef35f744d2e26eb583a751ca8d621cf4b3a5bd 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201908191238
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined in "location.hh".
index 42822f65302250dca3e629db238ac0fc7a8b03a8..81e152d836b96a78a0b6b5cd75d1557e8601f5d0 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201908191238
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined with the parser itself.
index a35bdb1939b97688d4d88202c800a6fd7588e988..17d12797f941a7ef8c2020ddabac2a06654eae6d 100644 (file)
@@ -967,6 +967,22 @@ public:
         EXPECT_TRUE(pool);
     }
 
+    /// @brief Tests if the current config has a given global parameter value
+    /// @param name name of the global parameter expected to exist
+    /// @param value expected value of the global parameter
+    template <typename ValueType>
+    void checkGlobal(const std::string name, ValueType value) {
+        ConstElementPtr param;
+        ConstElementPtr exp_value;
+        param = CfgMgr::instance().getStagingCfg()->getConfiguredGlobal(name);
+        ASSERT_TRUE(param) << "global: " << name << ", expected but not found";
+        ASSERT_NO_THROW(exp_value = Element::create(value));
+        EXPECT_TRUE(param->equals(*exp_value)) << "global: " << name
+                                               << isc::data::prettyPrint(param)
+                                               << " does not match expected: "
+                                               << isc::data::prettyPrint(exp_value);
+    }
+
     int rcode_; ///< Return code (see @ref isc::config::parseAnswer)
     ControlledDhcpv6Srv srv_; ///< Instance of the ControlledDhcp6Srv used during tests
     ConstElementPtr comment_; ///< Comment (see @ref isc::config::parseAnswer)
@@ -4791,7 +4807,8 @@ TEST_F(Dhcp6ParserTest, d2ClientConfig) {
         "     \"sender-port\" : 778, "
         "     \"max-queue-size\" : 2048, "
         "     \"ncr-protocol\" : \"UDP\", "
-        "     \"ncr-format\" : \"JSON\", "
+        "     \"ncr-format\" : \"JSON\"}, "
+#if 0
         "     \"override-no-update\" : true, "
         "     \"override-client-update\" : true, "
         "     \"replace-client-name\" : \"when-present\", "
@@ -4799,6 +4816,7 @@ TEST_F(Dhcp6ParserTest, d2ClientConfig) {
         "     \"qualifying-suffix\" : \"test.suffix.\", "
         "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
         "     \"hostname-char-replacement\" : \"x\" }, "
+#endif
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4829,22 +4847,23 @@ TEST_F(Dhcp6ParserTest, d2ClientConfig) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // ddns-send-updates should be global default
+    checkGlobal("ddns-send-updates", true);
+
+    // The following, deprecated dhcp-ddns parameters,
+    // should all have global default values.
+    checkGlobal("ddns-send-updates", true);
+    checkGlobal("ddns-override-no-update", false);
+    checkGlobal("ddns-override-client-update", false);
+    checkGlobal("ddns-replace-client-name", "never");
+    checkGlobal("ddns-generated-prefix", "myhost");
+    checkGlobal("ddns-qualifying-suffix", "");
 }
 
-// This test checks the ability of the server to parse a configuration
-// containing a full, valid dhcp-ddns (D2ClientConfig) entry with
-// hostname-char-* at the global scope.
-TEST_F(Dhcp6ParserTest, d2ClientConfigGlobal) {
+// This test verifies that valid but deprecated dhcp-ddns parameters
+// get moved to the global scope when they do not already exist there.
+TEST_F(Dhcp6ParserTest, d2ClientConfigMoveToGlobal) {
     // Verify that the D2 configuration can be fetched and is set to disabled.
     D2ClientConfigPtr d2_client_config = CfgMgr::instance().getD2ClientConfig();
     EXPECT_FALSE(d2_client_config->getEnableUpdates());
@@ -4873,9 +4892,9 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigGlobal) {
         "     \"override-client-update\" : true, "
         "     \"replace-client-name\" : \"when-present\", "
         "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\" }, "
-        "\"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
-        "\"hostname-char-replacement\" : \"x\", "
+        "     \"qualifying-suffix\" : \"test.suffix.\", "
+        "     \"hostname-char-set\" : \"[^A-Z]\", "
+        "     \"hostname-char-replacement\" : \"x\"}, "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4906,21 +4925,22 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigGlobal) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // ddns-send-updates should be global default
+    checkGlobal("ddns-send-updates", true);
+
+    // The following should all have been moved from dhcp-ddns.
+    checkGlobal("ddns-override-no-update", true);
+    checkGlobal("ddns-override-client-update", true);
+    checkGlobal("ddns-replace-client-name", "when-present");
+    checkGlobal("ddns-generated-prefix", "test.prefix");
+    checkGlobal("ddns-qualifying-suffix", "test.suffix.");
+    checkGlobal("hostname-char-set", "[^A-Z]");
+    checkGlobal("hostname-char-replacement", "x");
 }
 
-// This test checks the ability of the server to parse a configuration
-// containing a full, valid dhcp-ddns (D2ClientConfig) entry with
-// hostname-char-* at the local and global scopes (local has the priority).
+// This test verifies that explicit global values override deprecated
+// dhcp-ddns parameters (i.e. global scope wins)
 TEST_F(Dhcp6ParserTest, d2ClientConfigBoth) {
     // Verify that the D2 configuration can be fetched and is set to disabled.
     D2ClientConfigPtr d2_client_config = CfgMgr::instance().getD2ClientConfig();
@@ -4946,15 +4966,21 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigBoth) {
         "     \"max-queue-size\" : 2048, "
         "     \"ncr-protocol\" : \"UDP\", "
         "     \"ncr-format\" : \"JSON\", "
-        "     \"override-no-update\" : true, "
-        "     \"override-client-update\" : true, "
+        "     \"override-no-update\" : false, "
+        "     \"override-client-update\" : false, "
         "     \"replace-client-name\" : \"when-present\", "
-        "     \"generated-prefix\" : \"test.prefix\", "
-        "     \"qualifying-suffix\" : \"test.suffix.\", "
-        "     \"hostname-char-set\" : \"[^A-Za-z0-9_-]\", "
-        "     \"hostname-char-replacement\" : \"x\" }, "
-        "\"hostname-char-set\" : \"[^A-Z]\", "
-        "\"hostname-char-replacement\" : \"z\", "
+        "     \"generated-prefix\" : \"d2.prefix\", "
+        "     \"qualifying-suffix\" : \"d2.suffix.\", "
+        "     \"hostname-char-set\" : \"[^0-9]\", "
+        "     \"hostname-char-replacement\" : \"z\" }, "
+        " \"ddns-send-updates\" : false, "
+        " \"ddns-override-no-update\" : true, "
+        " \"ddns-override-client-update\" : true, "
+        " \"ddns-replace-client-name\" : \"always\", "
+        " \"ddns-generated-prefix\" : \"global.prefix\", "
+        " \"ddns-qualifying-suffix\" : \"global.suffix.\", "
+        " \"hostname-char-set\" : \"[^A-Z]\", "
+        " \"hostname-char-replacement\" : \"x\", "
         "\"valid-lifetime\": 4000 }";
 
     // Convert the JSON string to configuration elements.
@@ -4985,16 +5011,16 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigBoth) {
     EXPECT_EQ(2048, d2_client_config->getMaxQueueSize());
     EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
     EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
-    EXPECT_TRUE(d2_client_config->getOverrideNoUpdate());
-    EXPECT_TRUE(d2_client_config->getOverrideClientUpdate());
-    EXPECT_EQ(D2ClientConfig::RCM_WHEN_PRESENT, d2_client_config->getReplaceClientNameMode());
-    EXPECT_EQ("test.prefix", d2_client_config->getGeneratedPrefix());
-    EXPECT_EQ("test.suffix.", d2_client_config->getQualifyingSuffix());
-    EXPECT_FALSE(d2_client_config->getHostnameCharSet().unspecified());
-    EXPECT_EQ("[^A-Za-z0-9_-]", d2_client_config->getHostnameCharSet().get());
-    EXPECT_FALSE(d2_client_config->getHostnameCharReplacement().unspecified());
-    EXPECT_EQ("x", d2_client_config->getHostnameCharReplacement().get());
-    EXPECT_TRUE(d2_client_config->getHostnameSanitizer());
+
+    // Verify all global values won.
+    checkGlobal("ddns-send-updates", false);
+    checkGlobal("ddns-override-no-update", true);
+    checkGlobal("ddns-override-client-update", true);
+    checkGlobal("ddns-replace-client-name", "always");
+    checkGlobal("ddns-generated-prefix", "global.prefix");
+    checkGlobal("ddns-qualifying-suffix", "global.suffix.");
+    checkGlobal("hostname-char-set", "[^A-Z]");
+    checkGlobal("hostname-char-replacement", "x");
 }
 
 // This test checks the ability of the server to handle a configuration
index a6ec3efb02e7fb78ee7b36977e8140eb7a9d921f..b801854f2e43402160cd7346001a95a1087a97e4 100644 (file)
@@ -36,6 +36,17 @@ using namespace std;
 
 namespace {
 
+#define ASSERT_NO_THROW_LOG(statement) \
+{ \
+    try { \
+        statement; \
+    } catch (const std::exception& ex)  { \
+        GTEST_FAIL() << #statement <<  "threw: " << ex.what(); \
+    } catch (...) { \
+        GTEST_FAIL() << #statement <<  "threw non-std::exception"; \
+    } \
+} \
+
 
 /// @brief A test fixture class for testing DHCPv6 Client FQDN Option handling.
 class FqdnDhcpv6SrvTest : public Dhcpv6SrvTest {
@@ -120,18 +131,38 @@ public:
         ASSERT_NO_THROW(cfg.reset(new D2ClientConfig(true,
                                   isc::asiolink::IOAddress("::1"), 53001,
                                   isc::asiolink::IOAddress("::"), 0,
-                                  1024,
-                                  dhcp_ddns::NCR_UDP, dhcp_ddns::FMT_JSON,
-                                  (mask & OVERRIDE_NO_UPDATE),
-                                  (mask & OVERRIDE_CLIENT_UPDATE),
-                                  ((mask & REPLACE_CLIENT_NAME) ?
-                                   D2ClientConfig::RCM_WHEN_PRESENT
-                                   : D2ClientConfig::RCM_NEVER),
-                                  "myhost", "example.com", "[^A-Za-z0-9-]", "x")));
+                                  1024, dhcp_ddns::NCR_UDP, dhcp_ddns::FMT_JSON)));
+
         ASSERT_NO_THROW(CfgMgr::instance().setD2ClientConfig(cfg));
+
+        // Now we'll set the DDNS parameters at the subnet level.
+        // These should get fetched when getDdnsParams() is invoked.
+        ASSERT_TRUE(subnet_) << "enableD2 called without subnet_ set";
+        subnet_->setDdnsSendUpdates(true);
+        subnet_->setDdnsOverrideNoUpdate(mask & OVERRIDE_NO_UPDATE);
+        subnet_->setDdnsOverrideClientUpdate(mask & OVERRIDE_CLIENT_UPDATE);
+        subnet_->setDdnsReplaceClientNameMode((mask & REPLACE_CLIENT_NAME) ?
+                                              D2ClientConfig::RCM_WHEN_PRESENT
+                                              : D2ClientConfig::RCM_NEVER);
+        subnet_->setDdnsGeneratedPrefix("myhost");
+        subnet_->setDdnsQualifyingSuffix("example.com");
+        subnet_->setHostnameCharSet("[^A-Za-z0-9-]");
+        subnet_->setHostnameCharReplacement("x");
+
         ASSERT_NO_THROW(srv_->startD2());
     }
 
+    // Fetch DDNS parameter set scoped to the current subnet_.
+    DdnsParamsPtr getDdnsParams() {
+        ConstElementPtr cfg = CfgMgr::instance().getCurrentCfg()->toElement();
+        if (!subnet_) {
+            ADD_FAILURE() << "getDdnsParams() - subnet_ is empty!";
+            return (DdnsParamsPtr(new DdnsParams()));
+        }
+
+        return(CfgMgr::instance().getCurrentCfg()->getDdnsParams(*subnet_));
+    }
+
     /// @brief Construct the DHCPv6 Client FQDN option using flags and
     /// domain-name.
     ///
@@ -170,10 +201,8 @@ public:
                             const bool include_oro,
                             OptionPtr srvid = OptionPtr()) {
         Pkt6Ptr pkt = Pkt6Ptr(new Pkt6(msg_type, 1234));
-        pkt->setRemoteAddr(IOAddress("fe80::abcd"));
         pkt->setIface("eth0");
         Option6IAPtr ia = generateIA(D6O_IA_NA, 234, 1500, 3000);
-
         if (msg_type != DHCPV6_REPLY) {
             IOAddress hint("2001:db8:1:1::dead:beef");
             OptionPtr hint_opt(new Option6IAAddr(D6O_IAADDR, hint, 300, 500));
@@ -208,6 +237,7 @@ public:
     /// @return An object representing the created message.
     Pkt6Ptr generateMessageWithIds(const uint8_t msg_type) {
         Pkt6Ptr pkt = Pkt6Ptr(new Pkt6(msg_type, 1234));
+        pkt->setIface("eth0");
         // Generate client-id.
         OptionPtr opt_clientid = generateClientId();
         pkt->addOption(opt_clientid);
@@ -333,6 +363,9 @@ public:
         addIA(1234, IOAddress("2001:db8:1::1"), answer);
 
         AllocEngine::ClientContext6 ctx;
+        // Set the selected subnet so ddns params get returned correctly.
+        ctx.subnet_ = subnet_;
+
         ASSERT_NO_THROW(srv_->processClientFqdn(question, answer, ctx));
         Option6ClientFqdnPtr answ_fqdn = boost::dynamic_pointer_cast<
             Option6ClientFqdn>(answer->getOption(D6O_CLIENT_FQDN));
@@ -367,7 +400,7 @@ public:
             // Call createNameChangeRequests
             ctx.fwd_dns_update_ =  exp_fwd.value_;
             ctx.rev_dns_update_ = exp_rev.value_;
-            ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx));
+            ASSERT_NO_THROW_LOG(srv_->createNameChangeRequests(answer, ctx));
             if (exp_fwd.value_ || exp_rev.value_) {
                 // Should have created 1 NCR.
                 NameChangeRequestPtr ncr;
@@ -410,7 +443,6 @@ public:
             "\"subnet6\": [ {  \n"
             "    \"pools\": [ { \"pool\": \"2001:db8:1::/64\" } ], \n"
             "    \"subnet\": \"2001:db8:1::/48\",  \n"
-            "    \"interface-id\": \"\", \n"
             "    \"interface\": \"eth0\" \n"
             " } ], \n"
             "\"dhcp-ddns\": { \n"
@@ -434,9 +466,12 @@ public:
             query = generateMessageWithIds(DHCPV6_SOLICIT);
         }
 
+        AllocEngine::ClientContext6 ctx;
+        bool drop = false;
+        srv_->initContext(query, ctx, drop);
+
         Pkt6Ptr answer = generateMessageWithIds(DHCPV6_ADVERTISE);
 
-        AllocEngine::ClientContext6 ctx;
         ASSERT_NO_THROW(srv_->processClientFqdn(query, answer, ctx));
 
         Option6ClientFqdnPtr answ_fqdn = boost::dynamic_pointer_cast<
@@ -495,6 +530,7 @@ public:
         AllocEngine::ClientContext6 ctx;
         bool drop = false;
         srv_->initContext(req, ctx, drop);
+
         ASSERT_FALSE(drop);
         if (msg_type == DHCPV6_SOLICIT) {
           ASSERT_NO_THROW(reply = srv_->processSolicit(ctx));
@@ -702,6 +738,7 @@ TEST_F(FqdnDhcpv6SrvTest, createNameChangeRequestsNoAnswer) {
     Pkt6Ptr answer;
 
     AllocEngine::ClientContext6 ctx;
+    ctx.subnet_ = subnet_;
     ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
     EXPECT_THROW(srv_->createNameChangeRequests(answer, ctx),
                  isc::Unexpected);
@@ -718,6 +755,7 @@ TEST_F(FqdnDhcpv6SrvTest, createNameChangeRequestsNoDUID) {
     answer->addOption(fqdn);
 
     AllocEngine::ClientContext6 ctx;
+    ctx.subnet_ = subnet_;
     ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
     EXPECT_THROW(srv_->createNameChangeRequests(answer, ctx), isc::Unexpected);
 
@@ -730,6 +768,7 @@ TEST_F(FqdnDhcpv6SrvTest, createNameChangeRequestsNoFQDN) {
     Pkt6Ptr answer = generateMessageWithIds(DHCPV6_REPLY);
 
     AllocEngine::ClientContext6 ctx;
+    ctx.subnet_ = subnet_;
     ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
     ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx));
 
@@ -778,6 +817,7 @@ TEST_F(FqdnDhcpv6SrvTest, createNameChangeRequests) {
 
     // Create NameChangeRequest for the first allocated address.
     AllocEngine::ClientContext6 ctx;
+    ctx.subnet_ = subnet_;
     ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
     ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx));
     ASSERT_EQ(1, d2_mgr_.getQueueSize());
@@ -812,6 +852,7 @@ TEST_F(FqdnDhcpv6SrvTest, noAddRequestsWhenDisabled) {
 
     // An attempt to send a NCR would throw.
     AllocEngine::ClientContext6 ctx;
+    ctx.subnet_ = subnet_;
     ctx.fwd_dns_update_ = ctx.rev_dns_update_ = true;
     ASSERT_NO_THROW(srv_->createNameChangeRequests(answer, ctx));
 }
@@ -1272,6 +1313,8 @@ TEST_F(FqdnDhcpv6SrvTest, processRequestReuseExpiredLease) {
     subnet_ = Subnet6Ptr(new Subnet6(IOAddress("2001:db8:1:1::"), 56, 1, 2,
                                      3, 4));
     subnet_->setIface("eth0");
+    subnet_->setDdnsSendUpdates(true);
+
     pool_ = Pool6Ptr(new Pool6(Lease::TYPE_NA, addr, addr));
     subnet_->addPool(pool_);
     CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->add(subnet_);
@@ -1499,6 +1542,7 @@ TEST_F(FqdnDhcpv6SrvTest, replaceClientNameModeTest) {
 
     testReplaceClientNameMode("never",
                               CLIENT_NAME_NOT_PRESENT, NAME_NOT_REPLACED);
+
     testReplaceClientNameMode("never",
                               CLIENT_NAME_PRESENT, NAME_NOT_REPLACED);
 
index ee99fc44a9f56364005635f3adb128446ae7ceb5..1f79f578e04692d6c96e9fd922ae4d46fc6075a6 100644 (file)
@@ -69,6 +69,7 @@ namespace {
 ///@{
 /// @brief extracted configurations
 const char* EXTRACTED_CONFIGS[] = {
+/// put this after const char* EXTRACTED_CONFIGS[] = {
     // CONFIGURATION 0
 "{\n"
 "        \"interfaces-config\": {\n"
@@ -1129,16 +1130,9 @@ const char* EXTRACTED_CONFIGS[] = {
 "{\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"3001::2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"3001::1\",\n"
@@ -1168,6 +1162,8 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
 "            \"generated-prefix\": \"test.prefix\",\n"
+"            \"hostname-char-replacement\": \"x\",\n"
+"            \"hostname-char-set\": \"[^A-Z]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
@@ -1180,8 +1176,6 @@ const char* EXTRACTED_CONFIGS[] = {
 "            \"server-ip\": \"3001::1\",\n"
 "            \"server-port\": 777\n"
 "        },\n"
-"        \"hostname-char-replacement\": \"x\",\n"
-"        \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
 "            \"re-detect\": false\n"
@@ -1203,24 +1197,30 @@ const char* EXTRACTED_CONFIGS[] = {
 "    }\n",
     // CONFIGURATION 37
 "{\n"
+"        \"ddns-generated-prefix\": \"global.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"always\",\n"
+"        \"ddns-send-updates\": false,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
+"            \"generated-prefix\": \"d2.prefix\",\n"
+"            \"hostname-char-replacement\": \"z\",\n"
+"            \"hostname-char-set\": \"[^0-9]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
+"            \"override-client-update\": false,\n"
+"            \"override-no-update\": false,\n"
+"            \"qualifying-suffix\": \"d2.suffix.\",\n"
 "            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"3001::2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"3001::1\",\n"
 "            \"server-port\": 777\n"
 "        },\n"
-"        \"hostname-char-replacement\": \"z\",\n"
+"        \"hostname-char-replacement\": \"x\",\n"
 "        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1919,25 +1919,232 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 60
+"{\n"
+"        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
+"        \"decline-probation-period\": 86400,\n"
+"        \"dhcp-ddns\": {\n"
+"            \"enable-updates\": false,\n"
+"            \"max-queue-size\": 1024,\n"
+"            \"ncr-format\": \"JSON\",\n"
+"            \"ncr-protocol\": \"UDP\",\n"
+"            \"sender-ip\": \"0.0.0.0\",\n"
+"            \"sender-port\": 0,\n"
+"            \"server-ip\": \"127.0.0.1\",\n"
+"            \"server-port\": 53001\n"
+"        },\n"
+"        \"dhcp-queue-control\": {\n"
+"            \"capacity\": 500,\n"
+"            \"enable-queue\": false,\n"
+"            \"queue-type\": \"kea-ring6\"\n"
+"        },\n"
+"        \"dhcp4o6-port\": 0,\n"
+"        \"expired-leases-processing\": {\n"
+"            \"flush-reclaimed-timer-wait-time\": 25,\n"
+"            \"hold-reclaimed-time\": 3600,\n"
+"            \"max-reclaim-leases\": 100,\n"
+"            \"max-reclaim-time\": 250,\n"
+"            \"reclaim-timer-wait-time\": 10,\n"
+"            \"unwarned-reclaim-cycles\": 5\n"
+"        },\n"
+"        \"hooks-libraries\": [ ],\n"
+"        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"lease-database\": {\n"
+"            \"type\": \"memfile\"\n"
+"        },\n"
+"        \"mac-sources\": [ \"any\" ],\n"
+"        \"option-data\": [ ],\n"
+"        \"option-def\": [ ],\n"
+"        \"preferred-lifetime\": 3000,\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"relay-supplied-options\": [ \"65\" ],\n"
+"        \"renew-timer\": 1000,\n"
+"        \"reservation-mode\": \"all\",\n"
+"        \"reservations\": [\n"
+"            {\n"
+"                \"client-classes\": [ ],\n"
+"                \"hostname\": \"\",\n"
+"                \"hw-address\": \"01:02:03:04:05:06\",\n"
+"                \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
+"                \"option-data\": [\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 23,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"2001:db8:2::abbc\",\n"
+"                        \"name\": \"dns-servers\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    },\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 7,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"25\",\n"
+"                        \"name\": \"preference\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    }\n"
+"                ],\n"
+"                \"prefixes\": [ ]\n"
+"            },\n"
+"            {\n"
+"                \"client-classes\": [ ],\n"
+"                \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
+"                \"hostname\": \"\",\n"
+"                \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
+"                \"option-data\": [\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 23,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"2001:db8:2::1111\",\n"
+"                        \"name\": \"dns-servers\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    },\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 7,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"11\",\n"
+"                        \"name\": \"preference\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    }\n"
+"                ],\n"
+"                \"prefixes\": [ ]\n"
+"            }\n"
+"        ],\n"
+"        \"sanity-checks\": {\n"
+"            \"lease-checks\": \"warn\"\n"
+"        },\n"
+"        \"server-id\": {\n"
+"            \"enterprise-id\": 0,\n"
+"            \"htype\": 0,\n"
+"            \"identifier\": \"\",\n"
+"            \"persist\": true,\n"
+"            \"time\": 0,\n"
+"            \"type\": \"LLT\"\n"
+"        },\n"
+"        \"server-tag\": \"\",\n"
+"        \"shared-networks\": [ ],\n"
+"        \"subnet6\": [\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 123,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"option-data\": [ ],\n"
+"                        \"pool\": \"2001:db8:1::/80\"\n"
+"                    }\n"
+"                ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:1::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            },\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 234,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [ ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:2::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            },\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 542,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [ ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:3::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            }\n"
+"        ],\n"
+"        \"t1-percent\": 0.5,\n"
+"        \"t2-percent\": 0.8,\n"
+"        \"valid-lifetime\": 4000\n"
 "    }\n"
 };
 
 /// @brief unparsed configurations
 const char* UNPARSED_CONFIGS[] = {
+///put this after const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 0
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -1995,17 +2202,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 1
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2062,6 +2270,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"max-preferred-lifetime\": 4000,\n"
 "                \"max-valid-lifetime\": 5000,\n"
@@ -2097,17 +2311,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 2
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2160,6 +2375,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2185,6 +2406,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2210,6 +2437,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2235,6 +2468,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2266,17 +2505,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 3
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2329,6 +2569,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1024,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2354,6 +2600,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 100,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2379,6 +2631,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2404,6 +2662,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 34,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2435,17 +2699,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 4
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2498,6 +2763,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2523,6 +2794,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2548,6 +2825,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2573,6 +2856,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2604,17 +2893,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 5
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2671,6 +2961,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"max-preferred-lifetime\": 4,\n"
 "                \"max-valid-lifetime\": 5,\n"
@@ -2706,17 +3002,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 6
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2769,6 +3066,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"interface\": \"eth0\",\n"
 "                \"option-data\": [ ],\n"
@@ -2801,17 +3104,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 7
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2864,6 +3168,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"interface-id\": \"foobar\",\n"
 "                \"option-data\": [ ],\n"
@@ -2896,17 +3206,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 8
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -2959,6 +3270,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -2988,6 +3305,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -3023,17 +3346,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 9
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3086,6 +3410,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -3117,17 +3447,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 10
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3180,6 +3511,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -3213,17 +3550,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 11
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3276,6 +3614,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -3311,17 +3655,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 12
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3374,6 +3719,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -3424,17 +3775,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 13
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3487,6 +3839,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -3520,17 +3878,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 14
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3596,17 +3955,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 15
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3672,17 +4032,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 16
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3757,17 +4118,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 17
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3833,17 +4195,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 18
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3909,17 +4272,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 19
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -3989,6 +4353,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -4020,17 +4390,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 20
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4083,6 +4454,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [\n"
 "                    {\n"
@@ -4131,17 +4508,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 21
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4221,6 +4599,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -4252,17 +4636,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 22
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4356,17 +4741,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 23
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4472,6 +4858,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -4503,17 +4895,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 24
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4566,6 +4959,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [\n"
 "                    {\n"
@@ -4600,6 +4999,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [\n"
 "                    {\n"
@@ -4640,17 +5045,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 25
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4703,6 +5109,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -4787,17 +5199,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 26
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4865,6 +5278,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -4896,17 +5315,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 27
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -4978,6 +5398,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5009,17 +5435,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 28
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5077,17 +5504,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 29
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5145,17 +5573,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 30
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5208,6 +5637,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5239,17 +5674,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 31
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5302,6 +5738,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5333,17 +5775,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 32
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5397,6 +5840,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
 "                \"client-class\": \"alpha\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5423,6 +5872,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
 "                \"client-class\": \"beta\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5449,6 +5904,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
 "                \"client-class\": \"gamma\",\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5474,6 +5935,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5505,17 +5972,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 33
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5568,6 +6036,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5614,17 +6088,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 34
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -5677,6 +6152,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -5731,19 +6212,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 35
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"3001::2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"3001::1\",\n"
@@ -5796,6 +6276,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5827,17 +6313,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 36
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"test.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"when-present\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"3001::2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"3001::1\",\n"
@@ -5860,7 +6347,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"hooks-libraries\": [ ],\n"
 "        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
 "        \"hostname-char-replacement\": \"x\",\n"
-"        \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
+"        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
 "            \"re-detect\": false\n"
@@ -5892,6 +6379,14 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"test.prefix\",\n"
+"                \"ddns-override-client-update\": true,\n"
+"                \"ddns-override-no-update\": true,\n"
+"                \"ddns-qualifying-suffix\": \"test.suffix.\",\n"
+"                \"ddns-replace-client-name\": \"when-present\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"hostname-char-replacement\": \"x\",\n"
+"                \"hostname-char-set\": \"[^A-Z]\",\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -5923,19 +6418,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 37
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"global.prefix\",\n"
+"        \"ddns-override-client-update\": true,\n"
+"        \"ddns-override-no-update\": true,\n"
+"        \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"        \"ddns-replace-client-name\": \"always\",\n"
+"        \"ddns-send-updates\": false,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
-"            \"generated-prefix\": \"test.prefix\",\n"
-"            \"hostname-char-replacement\": \"x\",\n"
-"            \"hostname-char-set\": \"[^A-Za-z0-9_-]\",\n"
 "            \"max-queue-size\": 2048,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": true,\n"
-"            \"override-no-update\": true,\n"
-"            \"qualifying-suffix\": \"test.suffix.\",\n"
-"            \"replace-client-name\": \"when-present\",\n"
 "            \"sender-ip\": \"3001::2\",\n"
 "            \"sender-port\": 778,\n"
 "            \"server-ip\": \"3001::1\",\n"
@@ -5957,7 +6451,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"hooks-libraries\": [ ],\n"
 "        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-"        \"hostname-char-replacement\": \"z\",\n"
+"        \"hostname-char-replacement\": \"x\",\n"
 "        \"hostname-char-set\": \"[^A-Z]\",\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -5990,6 +6484,14 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"global.prefix\",\n"
+"                \"ddns-override-client-update\": true,\n"
+"                \"ddns-override-no-update\": true,\n"
+"                \"ddns-qualifying-suffix\": \"global.suffix.\",\n"
+"                \"ddns-replace-client-name\": \"always\",\n"
+"                \"ddns-send-updates\": false,\n"
+"                \"hostname-char-replacement\": \"x\",\n"
+"                \"hostname-char-set\": \"[^A-Z]\",\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6021,17 +6523,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 38
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6084,6 +6587,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 123,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6109,6 +6618,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 234,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6180,6 +6695,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 542,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6240,17 +6761,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 39
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6313,6 +6835,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 234,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6357,17 +6885,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 40
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6425,17 +6954,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 41
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6493,17 +7023,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 42
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6556,6 +7087,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6581,6 +7118,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6606,6 +7149,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 3,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6631,6 +7180,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 4,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6656,6 +7211,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 5,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6687,17 +7248,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 43
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6750,6 +7312,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6775,6 +7343,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 2,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -6806,17 +7380,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 44
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6874,17 +7449,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 45
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -6940,17 +7516,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 46
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7006,17 +7583,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 47
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7072,17 +7650,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 48
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7152,17 +7731,18 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"option-data\": [ ]\n"
 "            }\n"
 "        ],\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7215,6 +7795,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -7246,17 +7832,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 50
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7309,6 +7896,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -7340,17 +7933,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 51
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7403,6 +7997,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -7435,17 +8035,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 52
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7498,6 +8099,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -7535,17 +8142,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 53
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7598,6 +8206,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -7635,17 +8249,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 54
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7698,6 +8313,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -7731,17 +8352,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 55
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7794,6 +8416,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -7828,17 +8456,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 56
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -7891,6 +8520,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 1,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [\n"
@@ -7930,17 +8565,18 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 57
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8038,18 +8674,19 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"socket-name\": \"/tmp/kea6-ctrl-socket\",\n"
 "            \"socket-type\": \"unix\"\n"
 "        },\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"comment\": \"No dynamic DNS\",\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8123,6 +8760,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            {\n"
 "                \"comment\": \"A shared network\",\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"interface\": \"\",\n"
 "                \"name\": \"foo\",\n"
 "                \"option-data\": [ ],\n"
@@ -8136,6 +8779,12 @@ const char* UNPARSED_CONFIGS[] = {
 "                    {\n"
 "                        \"comment\": \"A subnet\",\n"
 "                        \"calculate-tee-times\": true,\n"
+"                        \"ddns-generated-prefix\": \"myhost\",\n"
+"                        \"ddns-override-client-update\": false,\n"
+"                        \"ddns-override-no-update\": false,\n"
+"                        \"ddns-qualifying-suffix\": \"\",\n"
+"                        \"ddns-replace-client-name\": \"never\",\n"
+"                        \"ddns-send-updates\": true,\n"
 "                        \"id\": 100,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pd-pools\": [\n"
@@ -8200,17 +8849,223 @@ const char* UNPARSED_CONFIGS[] = {
     // CONFIGURATION 59
 "{\n"
 "        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
+"        \"decline-probation-period\": 86400,\n"
+"        \"dhcp-ddns\": {\n"
+"            \"enable-updates\": false,\n"
+"            \"max-queue-size\": 1024,\n"
+"            \"ncr-format\": \"JSON\",\n"
+"            \"ncr-protocol\": \"UDP\",\n"
+"            \"sender-ip\": \"0.0.0.0\",\n"
+"            \"sender-port\": 0,\n"
+"            \"server-ip\": \"127.0.0.1\",\n"
+"            \"server-port\": 53001\n"
+"        },\n"
+"        \"dhcp-queue-control\": {\n"
+"            \"capacity\": 500,\n"
+"            \"enable-queue\": false,\n"
+"            \"queue-type\": \"kea-ring6\"\n"
+"        },\n"
+"        \"dhcp4o6-port\": 0,\n"
+"        \"expired-leases-processing\": {\n"
+"            \"flush-reclaimed-timer-wait-time\": 25,\n"
+"            \"hold-reclaimed-time\": 3600,\n"
+"            \"max-reclaim-leases\": 100,\n"
+"            \"max-reclaim-time\": 250,\n"
+"            \"reclaim-timer-wait-time\": 10,\n"
+"            \"unwarned-reclaim-cycles\": 5\n"
+"        },\n"
+"        \"hooks-libraries\": [ ],\n"
+"        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
+"        \"interfaces-config\": {\n"
+"            \"interfaces\": [ \"*\" ],\n"
+"            \"re-detect\": false\n"
+"        },\n"
+"        \"lease-database\": {\n"
+"            \"type\": \"memfile\"\n"
+"        },\n"
+"        \"mac-sources\": [ \"any\" ],\n"
+"        \"option-data\": [ ],\n"
+"        \"option-def\": [ ],\n"
+"        \"preferred-lifetime\": 3000,\n"
+"        \"rebind-timer\": 2000,\n"
+"        \"relay-supplied-options\": [ \"65\" ],\n"
+"        \"renew-timer\": 1000,\n"
+"        \"reservation-mode\": \"all\",\n"
+"        \"reservations\": [\n"
+"            {\n"
+"                \"client-classes\": [ ],\n"
+"                \"hostname\": \"\",\n"
+"                \"hw-address\": \"01:02:03:04:05:06\",\n"
+"                \"ip-addresses\": [ \"2001:db8:2::abcd\" ],\n"
+"                \"option-data\": [\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 23,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"2001:db8:2::abbc\",\n"
+"                        \"name\": \"dns-servers\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    },\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 7,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"25\",\n"
+"                        \"name\": \"preference\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    }\n"
+"                ],\n"
+"                \"prefixes\": [ ]\n"
+"            },\n"
+"            {\n"
+"                \"client-classes\": [ ],\n"
+"                \"duid\": \"01:02:03:04:05:06:07:08:09:0a\",\n"
+"                \"hostname\": \"\",\n"
+"                \"ip-addresses\": [ \"2001:db8:2::1234\" ],\n"
+"                \"option-data\": [\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 23,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"2001:db8:2::1111\",\n"
+"                        \"name\": \"dns-servers\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    },\n"
+"                    {\n"
+"                        \"always-send\": false,\n"
+"                        \"code\": 7,\n"
+"                        \"csv-format\": true,\n"
+"                        \"data\": \"11\",\n"
+"                        \"name\": \"preference\",\n"
+"                        \"space\": \"dhcp6\"\n"
+"                    }\n"
+"                ],\n"
+"                \"prefixes\": [ ]\n"
+"            }\n"
+"        ],\n"
+"        \"sanity-checks\": {\n"
+"            \"lease-checks\": \"warn\"\n"
+"        },\n"
+"        \"server-id\": {\n"
+"            \"enterprise-id\": 0,\n"
+"            \"htype\": 0,\n"
+"            \"identifier\": \"\",\n"
+"            \"persist\": true,\n"
+"            \"time\": 0,\n"
+"            \"type\": \"LLT\"\n"
+"        },\n"
+"        \"server-tag\": \"\",\n"
+"        \"shared-networks\": [ ],\n"
+"        \"subnet6\": [\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 123,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [\n"
+"                    {\n"
+"                        \"option-data\": [ ],\n"
+"                        \"pool\": \"2001:db8:1::/80\"\n"
+"                    }\n"
+"                ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:1::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            },\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 234,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [ ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:2::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            },\n"
+"            {\n"
+"                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
+"                \"id\": 542,\n"
+"                \"option-data\": [ ],\n"
+"                \"pd-pools\": [ ],\n"
+"                \"pools\": [ ],\n"
+"                \"preferred-lifetime\": 3000,\n"
+"                \"rapid-commit\": false,\n"
+"                \"rebind-timer\": 2000,\n"
+"                \"relay\": {\n"
+"                    \"ip-addresses\": [ ]\n"
+"                },\n"
+"                \"renew-timer\": 1000,\n"
+"                \"reservation-mode\": \"all\",\n"
+"                \"reservations\": [ ],\n"
+"                \"subnet\": \"2001:db8:3::/64\",\n"
+"                \"t1-percent\": 0.5,\n"
+"                \"t2-percent\": 0.8,\n"
+"                \"valid-lifetime\": 4000\n"
+"            }\n"
+"        ],\n"
+"        \"t1-percent\": 0.5,\n"
+"        \"t2-percent\": 0.8,\n"
+"        \"valid-lifetime\": 4000\n"
+"    }\n",
+    // CONFIGURATION 60
+"{\n"
+"        \"calculate-tee-times\": true,\n"
+"        \"ddns-generated-prefix\": \"myhost\",\n"
+"        \"ddns-override-client-update\": false,\n"
+"        \"ddns-override-no-update\": false,\n"
+"        \"ddns-qualifying-suffix\": \"\",\n"
+"        \"ddns-replace-client-name\": \"never\",\n"
+"        \"ddns-send-updates\": true,\n"
 "        \"decline-probation-period\": 86400,\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": false,\n"
-"            \"generated-prefix\": \"myhost\",\n"
 "            \"max-queue-size\": 1024,\n"
 "            \"ncr-format\": \"JSON\",\n"
 "            \"ncr-protocol\": \"UDP\",\n"
-"            \"override-client-update\": false,\n"
-"            \"override-no-update\": false,\n"
-"            \"qualifying-suffix\": \"\",\n"
-"            \"replace-client-name\": \"never\",\n"
 "            \"sender-ip\": \"0.0.0.0\",\n"
 "            \"sender-port\": 0,\n"
 "            \"server-ip\": \"127.0.0.1\",\n"
@@ -8315,6 +9170,12 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"subnet6\": [\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 123,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -8340,6 +9201,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 234,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
@@ -8360,6 +9227,12 @@ const char* UNPARSED_CONFIGS[] = {
 "            },\n"
 "            {\n"
 "                \"calculate-tee-times\": true,\n"
+"                \"ddns-generated-prefix\": \"myhost\",\n"
+"                \"ddns-override-client-update\": false,\n"
+"                \"ddns-override-no-update\": false,\n"
+"                \"ddns-qualifying-suffix\": \"\",\n"
+"                \"ddns-replace-client-name\": \"never\",\n"
+"                \"ddns-send-updates\": true,\n"
 "                \"id\": 542,\n"
 "                \"option-data\": [ ],\n"
 "                \"pd-pools\": [ ],\n"
index 5be2a1d9be93f2481d3e725655cb5e2187ab1f25..95b1d6585236296584cc086ab54e393affffbe57 100644 (file)
@@ -431,7 +431,7 @@ AllocEngine::ClientContext6::ClientContext6()
     : query_(), fake_allocation_(false), subnet_(), host_subnet_(), duid_(),
       hwaddr_(), host_identifiers_(), hosts_(), fwd_dns_update_(false),
       rev_dns_update_(false), hostname_(), callout_handle_(), ias_(),
-      ddns_params_(new DdnsParams()) {
+      ddns_params_() {
 }
 
 AllocEngine::ClientContext6::ClientContext6(const Subnet6Ptr& subnet,