From d964aa47e4984ef1043c7e0efc820439c4835bfe Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Wed, 11 Jan 2023 22:28:12 +0100
Subject: [PATCH 01/12] [#2688] Added read-timeout and write-timeout

New parameters have been added for MySQL connection.
---
 src/lib/database/dbaccess_parser.cc           |  44 +++++--
 .../tests/dbaccess_parser_unittest.cc         | 116 ++++++++++++++++-
 src/lib/database/testutils/schema.cc          |   7 +
 src/lib/database/testutils/schema.h           |   7 +
 src/lib/mysql/mysql_connection.cc             | 123 ++++++++++--------
 src/lib/mysql/mysql_connection.h              |  21 +++
 .../mysql/tests/mysql_connection_unittest.cc  | 122 ++++++++++++++++-
 7 files changed, 368 insertions(+), 72 deletions(-)

diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc
index caee236282..e3d14b485f 100644
--- a/src/lib/database/dbaccess_parser.cc
+++ b/src/lib/database/dbaccess_parser.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -48,7 +48,9 @@ DbAccessParser::parse(std::string& access_string,
     DatabaseConnection::ParameterMap values_copy = values_;
 
     int64_t lfc_interval = 0;
-    int64_t timeout = 0;
+    int64_t connect_timeout = 0;
+    int64_t read_timeout = 0;
+    int64_t write_timeout = 0;
     int64_t port = 0;
     int64_t max_reconnect_tries = 0;
     int64_t reconnect_wait_time = 0;
@@ -68,9 +70,19 @@ DbAccessParser::parse(std::string& access_string,
                     boost::lexical_cast<std::string>(lfc_interval);
 
             } else if (param.first == "connect-timeout") {
-                timeout = param.second->intValue();
+                connect_timeout = param.second->intValue();
                 values_copy[param.first] =
-                    boost::lexical_cast<std::string>(timeout);
+                    boost::lexical_cast<std::string>(connect_timeout);
+
+            } else if (param.first == "read-timeout") {
+                read_timeout = param.second->intValue();
+                values_copy[param.first] =
+                    boost::lexical_cast<std::string>(read_timeout);
+
+            } else if (param.first == "write-timeout") {
+                write_timeout = param.second->intValue();
+                values_copy[param.first] =
+                    boost::lexical_cast<std::string>(write_timeout);
 
             } else if (param.first == "max-reconnect-tries") {
                 max_reconnect_tries = param.second->intValue();
@@ -148,11 +160,27 @@ DbAccessParser::parse(std::string& access_string,
                   << " (" << value->getPosition() << ")");
     }
 
-    // d. Check that the timeout is within a reasonable range.
-    if ((timeout < 0) ||
-        (timeout > std::numeric_limits<uint32_t>::max())) {
+    // d. Check that the timeouts are within a reasonable range.
+    if ((connect_timeout < 0) ||
+        (connect_timeout > std::numeric_limits<uint32_t>::max())) {
         ConstElementPtr value = database_config->get("connect-timeout");
-        isc_throw(DbConfigError, "connect-timeout value: " << timeout
+        isc_throw(DbConfigError, "connect-timeout value: " << connect_timeout
+                  << " is out of range, expected value: 0.."
+                  << std::numeric_limits<uint32_t>::max()
+                  << " (" << value->getPosition() << ")");
+    }
+    if ((read_timeout < 0) ||
+        (read_timeout > std::numeric_limits<uint32_t>::max())) {
+        ConstElementPtr value = database_config->get("read-timeout");
+        isc_throw(DbConfigError, "read-timeout value: " << read_timeout
+                  << " is out of range, expected value: 0.."
+                  << std::numeric_limits<uint32_t>::max()
+                  << " (" << value->getPosition() << ")");
+    }
+    if ((write_timeout < 0) ||
+        (write_timeout > std::numeric_limits<uint32_t>::max())) {
+        ConstElementPtr value = database_config->get("write-timeout");
+        isc_throw(DbConfigError, "write-timeout value: " << write_timeout
                   << " is out of range, expected value: 0.."
                   << std::numeric_limits<uint32_t>::max()
                   << " (" << value->getPosition() << ")");
diff --git a/src/lib/database/tests/dbaccess_parser_unittest.cc b/src/lib/database/tests/dbaccess_parser_unittest.cc
index dca15890f5..b51b6f4b80 100644
--- a/src/lib/database/tests/dbaccess_parser_unittest.cc
+++ b/src/lib/database/tests/dbaccess_parser_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2020 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -167,6 +167,8 @@ class DbAccessParserTest : public ::testing::Test {
      bool quoteValue(const std::string& parameter) const {
          return ((parameter != "persist") && (parameter != "lfc-interval") &&
                  (parameter != "connect-timeout") &&
+                 (parameter != "read-timeout") &&
+                 (parameter != "write-timeout") &&
                  (parameter != "port") &&
                  (parameter != "max-row-errors") &&
                  (parameter != "readonly"));
@@ -354,8 +356,8 @@ TEST_F(DbAccessParserTest, largeLFCInterval) {
 }
 
 // This test checks that the parser accepts the valid value of the
-// timeout parameter.
-TEST_F(DbAccessParserTest, validTimeout) {
+// connect-timeout parameter.
+TEST_F(DbAccessParserTest, validConnectTimeout) {
     const char* config[] = {"type", "memfile",
                             "name", "/opt/var/lib/kea/kea-leases6.csv",
                             "connect-timeout", "3600",
@@ -372,8 +374,8 @@ TEST_F(DbAccessParserTest, validTimeout) {
 }
 
 // This test checks that the parser rejects the negative value of the
-// timeout parameter.
-TEST_F(DbAccessParserTest, negativeTimeout) {
+// connect-timeout parameter.
+TEST_F(DbAccessParserTest, negativeConnectTimeout) {
     const char* config[] = {"type", "memfile",
                             "name", "/opt/var/lib/kea/kea-leases6.csv",
                             "connect-timeout", "-1",
@@ -388,8 +390,8 @@ TEST_F(DbAccessParserTest, negativeTimeout) {
 }
 
 // This test checks that the parser rejects a too large (greater than
-// the max uint32_t) value of the timeout parameter.
-TEST_F(DbAccessParserTest, largeTimeout) {
+// the max uint32_t) value of the connecttimeout parameter.
+TEST_F(DbAccessParserTest, largeConnectTimeout) {
     const char* config[] = {"type", "memfile",
                             "name", "/opt/var/lib/kea/kea-leases6.csv",
                             "connect-timeout", "4294967296",
@@ -403,6 +405,106 @@ TEST_F(DbAccessParserTest, largeTimeout) {
     EXPECT_THROW(parser.parse(json_elements), DbConfigError);
 }
 
+// This test checks that the parser accepts the valid value of the
+// read-timeout parameter.
+TEST_F(DbAccessParserTest, validReadTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "read-timeout", "3600",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_NO_THROW(parser.parse(json_elements));
+    checkAccessString("Valid read timeout", parser.getDbAccessParameters(),
+                      config);
+}
+
+// This test checks that the parser rejects the negative value of the
+// read-timeout parameter.
+TEST_F(DbAccessParserTest, negativeReadTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "read-timeout", "-1",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test checks that the parser rejects a too large (greater than
+// the max uint32_t) value of the read-timeout parameter.
+TEST_F(DbAccessParserTest, largeReadTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "read-timeout", "4294967296",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test checks that the parser accepts the valid value of the
+// write-timeout parameter.
+TEST_F(DbAccessParserTest, validWriteTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "write-timeout", "3600",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_NO_THROW(parser.parse(json_elements));
+    checkAccessString("Valid write timeout", parser.getDbAccessParameters(),
+                      config);
+}
+
+// This test checks that the parser rejects the negative value of the
+// write-timeout parameter.
+TEST_F(DbAccessParserTest, negativeWriteTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "write-timeout", "-1",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test checks that the parser rejects a too large (greater than
+// the max uint32_t) value of the write-timeout parameter.
+TEST_F(DbAccessParserTest, largeWriteTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "write-timeout", "4294967296",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
 // This test checks that the parser accepts the valid value of the
 // port parameter.
 TEST_F(DbAccessParserTest, validPort) {
diff --git a/src/lib/database/testutils/schema.cc b/src/lib/database/testutils/schema.cc
index d6aef69a3e..a794de6e6f 100644
--- a/src/lib/database/testutils/schema.cc
+++ b/src/lib/database/testutils/schema.cc
@@ -34,6 +34,13 @@ const char* INVALID_PASSWORD = "password=invalid";
 const char* VALID_TIMEOUT = "connect-timeout=10";
 const char* INVALID_TIMEOUT_1 = "connect-timeout=foo";
 const char* INVALID_TIMEOUT_2 = "connect-timeout=-17";
+const char* INVALID_TIMEOUT_3 = "connect-timeout=0";
+const char* VALID_READ_TIMEOUT = "read-timeout=11";
+const char* VALID_READ_TIMEOUT_ZERO = "read-timeout=0";
+const char* INVALID_READ_TIMEOUT_1 = "read-timeout=bar";
+const char* VALID_WRITE_TIMEOUT = "write-timeout=12";
+const char* VALID_WRITE_TIMEOUT_ZERO = "write-timeout=0";
+const char* INVALID_WRITE_TIMEOUT_1 = "write-timeout=baz";
 const char* VALID_READONLY_DB = "readonly=true";
 const char* INVALID_READONLY_DB = "readonly=5";
 const char* VALID_CERT = "cert-file=" TEST_CA_DIR "/kea-client.crt";
diff --git a/src/lib/database/testutils/schema.h b/src/lib/database/testutils/schema.h
index 9e10148f37..f278baa521 100644
--- a/src/lib/database/testutils/schema.h
+++ b/src/lib/database/testutils/schema.h
@@ -30,6 +30,13 @@ extern const char* INVALID_PASSWORD;
 extern const char* VALID_TIMEOUT;
 extern const char* INVALID_TIMEOUT_1;
 extern const char* INVALID_TIMEOUT_2;
+extern const char* INVALID_TIMEOUT_3;
+extern const char* VALID_READ_TIMEOUT;
+extern const char* VALID_READ_TIMEOUT_ZERO;
+extern const char* INVALID_READ_TIMEOUT_1;
+extern const char* VALID_WRITE_TIMEOUT;
+extern const char* VALID_WRITE_TIMEOUT_ZERO;
+extern const char* INVALID_WRITE_TIMEOUT_1;
 extern const char* VALID_READONLY_DB;
 extern const char* INVALID_READONLY_DB;
 extern const char* VALID_CERT;
diff --git a/src/lib/mysql/mysql_connection.cc b/src/lib/mysql/mysql_connection.cc
index fc65cce45b..aadb89bab7 100644
--- a/src/lib/mysql/mysql_connection.cc
+++ b/src/lib/mysql/mysql_connection.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -65,31 +65,12 @@ MySqlConnection::openDatabase() {
     }
 
     unsigned int port = 0;
-    string sport;
-    try {
-        sport = getParameter("port");
-    } catch (...) {
-        // No port parameter, we are going to use the default port.
-        sport = "";
-    }
-
-    if (sport.size() > 0) {
-        // Port was given, so try to convert it to an integer.
-
-        try {
-            port = boost::lexical_cast<unsigned int>(sport);
-        } catch (...) {
-            // Port given but could not be converted to an unsigned int.
-            // Just fall back to the default value.
-            port = 0;
-        }
-
-        // The port is only valid when it is in the 0..65535 range.
-        // Again fall back to the default when the given value is invalid.
-        if (port > numeric_limits<uint16_t>::max()) {
-            port = 0;
-        }
-    }
+    setIntParameterValue("port", 0, numeric_limits<unsigned int>::max(), port);
+    // The port is only valid when it is in the 0..65535 range.
+    // Again fall back to the default when the given value is invalid.
+     if (port > numeric_limits<uint16_t>::max()) {
+         port = 0;
+     }
 
     const char* user = NULL;
     string suser;
@@ -120,40 +101,18 @@ MySqlConnection::openDatabase() {
     }
 
     unsigned int connect_timeout = MYSQL_DEFAULT_CONNECTION_TIMEOUT;
-    string stimeout;
+    unsigned int read_timeout = 0;
+    unsigned int write_timeout = 0;
     try {
-        stimeout = getParameter("connect-timeout");
-    } catch (...) {
-        // No timeout parameter, we are going to use the default timeout.
-        stimeout = "";
-    }
-
-    if (stimeout.size() > 0) {
-        // Timeout was given, so try to convert it to an integer.
-
-        try {
-            connect_timeout = boost::lexical_cast<unsigned int>(stimeout);
-        } catch (...) {
-            // Timeout given but could not be converted to an unsigned int. Set
-            // the connection timeout to an invalid value to trigger throwing
-            // of an exception.
-            connect_timeout = 0;
-        }
-
         // The timeout is only valid if greater than zero, as depending on the
         // database, a zero timeout might signify something like "wait
         // indefinitely".
-        //
-        // The check below also rejects a value greater than the maximum
-        // integer value.  The lexical_cast operation used to obtain a numeric
-        // value from a string can get confused if trying to convert a negative
-        // integer to an unsigned int: instead of throwing an exception, it may
-        // produce a large positive value.
-        if ((connect_timeout == 0) ||
-            (connect_timeout > numeric_limits<int>::max())) {
-            isc_throw(DbInvalidTimeout, "database connection timeout (" <<
-                      stimeout << ") must be an integer greater than 0");
-        }
+        setIntParameterValue("connect-timeout", 1, numeric_limits<int>::max(), connect_timeout);
+        setIntParameterValue("read-timeout", 0, numeric_limits<int>::max(), read_timeout);
+        setIntParameterValue("write-timeout", 0, numeric_limits<int>::max(), write_timeout);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidTimeout, ex.what());
     }
 
     const char* ca_file(0);
@@ -241,6 +200,26 @@ MySqlConnection::openDatabase() {
                   mysql_error(mysql_));
     }
 
+    // Set the read timeout if it has been specified. Otherwise, the timeout is
+    // not used.
+    if (read_timeout > 0) {
+        result = mysql_options(mysql_, MYSQL_OPT_READ_TIMEOUT, &read_timeout);
+        if (result != 0) {
+            isc_throw(DbOpenError, "unable to set database read timeout: " <<
+                      mysql_error(mysql_));
+        }
+    }
+
+    // Set the write timeout if it has been specified. Otherwise, the timeout
+    // is not used.
+    if (write_timeout > 0) {
+        result = mysql_options(mysql_, MYSQL_OPT_WRITE_TIMEOUT, &write_timeout);
+        if (result != 0) {
+            isc_throw(DbOpenError, "unable to set database write timeout: " <<
+                      mysql_error(mysql_));
+        }
+    }
+
     // If TLS is enabled set it. If something should go wrong it will happen
     // later at the mysql_real_connect call.
     if (tls_) {
@@ -517,5 +496,37 @@ MySqlConnection::rollback() {
     }
 }
 
+template<typename T>
+void
+MySqlConnection::setIntParameterValue(const std::string& name, int64_t min, int64_t max, T& value) {
+    string svalue;
+    try {
+        svalue = getParameter(name);
+    } catch (...) {
+        // Do nothing if the parameter is not present.
+    }
+    if (svalue.empty()) {
+        return;
+    }
+    try {
+        // Try to convert the value.
+        auto parsed_value = boost::lexical_cast<T>(svalue);
+        // Check if the value is within the specified range.
+        if ((parsed_value < min) || (parsed_value > max)) {
+            isc_throw(BadValue, "bad " << svalue << " value");
+        }
+        // Everything is fine. Return the parsed value.
+        value = parsed_value;
+
+    } catch (...) {
+        // We may end up here when lexical_cast fails or when the
+        // parsed value is not within the desired range. In both
+        // cases let's throw the same general error.
+        isc_throw(BadValue, name << " parameter (" <<
+                  svalue << ") must be an integer between "
+                  << min << " and " << max);
+    }
+}
+
 } // namespace db
 } // namespace isc
diff --git a/src/lib/mysql/mysql_connection.h b/src/lib/mysql/mysql_connection.h
index 50ebc28d08..f68a42c5de 100644
--- a/src/lib/mysql/mysql_connection.h
+++ b/src/lib/mysql/mysql_connection.h
@@ -712,6 +712,27 @@ class MySqlConnection : public db::DatabaseConnection {
         return (cipher ? std::string(cipher) : "");
     }
 
+private:
+
+    /// @brief Convenience function parsing and setting an integer parameter,
+    /// if it exists.
+    ///
+    /// If the parameter is not present, this function doesn't change the @c value.
+    /// Otherwise, it tries to convert the parameter to the type @c T. Finally,
+    /// it checks if the converted number is within the specified range.
+    ///
+    /// @param name Parameter name.
+    /// @param min Expected minimal value.
+    /// @param max Expected maximal value.
+    /// @param [out] value Reference to a value returning the parsed parameter.
+    /// @tparam T Parameter type.
+    /// @throw BadValue if the parameter is not a valid number or if it is out
+    /// of range.
+    template<typename T>
+    void setIntParameterValue(const std::string& name, int64_t min, int64_t max, T& value);
+
+public:
+
     /// @brief Prepared statements
     ///
     /// This field is public, because it is used heavily from MySqlConnection
diff --git a/src/lib/mysql/tests/mysql_connection_unittest.cc b/src/lib/mysql/tests/mysql_connection_unittest.cc
index 19d1a6ae72..46a8cb0abc 100644
--- a/src/lib/mysql/tests/mysql_connection_unittest.cc
+++ b/src/lib/mysql/tests/mysql_connection_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2018-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2018-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -609,6 +609,126 @@ TEST_F(MySqlConnectionTest, transactions) {
     EXPECT_THROW(conn_.rollback(), isc::Unexpected);
 }
 
+// Tests that valid connection timeout is accepted.
+TEST_F(MySqlConnectionTest, connectionTimeout) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, VALID_TIMEOUT);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    ASSERT_NO_THROW_LOG(conn.openDatabase());
+
+    auto mysql = static_cast<MYSQL*>(conn.mysql_);
+    ASSERT_TRUE(mysql);
+    unsigned int timeout = 123;
+    EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout));
+    EXPECT_EQ(10, timeout);
+}
+
+// Tests that invalid timeout value type causes an error.
+TEST_F(MySqlConnectionTest, connectionTimeoutInvalid) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_TIMEOUT_1);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout);
+}
+
+// Tests that a negative connection timeout value causes an error.
+TEST_F(MySqlConnectionTest, connectionTimeoutInvalid2) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_TIMEOUT_2);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout);
+}
+
+// Tests that a zero connection timeout value causes an error.
+TEST_F(MySqlConnectionTest, connectionTimeoutInvalid3) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_TIMEOUT_3);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout);
+}
+
+// Tests that a valid read timeout is accepted.
+TEST_F(MySqlConnectionTest, readTimeout) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, VALID_READ_TIMEOUT);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    ASSERT_NO_THROW_LOG(conn.openDatabase());
+
+    auto mysql = static_cast<MYSQL*>(conn.mysql_);
+    ASSERT_TRUE(mysql);
+    unsigned int timeout = 123;
+    EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_READ_TIMEOUT, &timeout));
+    EXPECT_EQ(11, timeout);
+}
+
+// Tests that a zero read timeout is accepted.
+TEST_F(MySqlConnectionTest, readTimeoutZero) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, VALID_READ_TIMEOUT_ZERO);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    ASSERT_NO_THROW_LOG(conn.openDatabase());
+
+    auto mysql = static_cast<MYSQL*>(conn.mysql_);
+    ASSERT_TRUE(mysql);
+    unsigned int timeout = 123;
+    EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_READ_TIMEOUT, &timeout));
+    EXPECT_EQ(0, timeout);
+}
+
+// Tests that an invalid read timeout causes an error.
+TEST_F(MySqlConnectionTest, readTimeoutInvalid) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_READ_TIMEOUT_1);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout);
+}
+
+// Tests that a valid write timeout is accepted.
+TEST_F(MySqlConnectionTest, writeTimeout) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, VALID_WRITE_TIMEOUT);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    ASSERT_NO_THROW_LOG(conn.openDatabase());
+
+    auto mysql = static_cast<MYSQL*>(conn.mysql_);
+    ASSERT_TRUE(mysql);
+    unsigned int timeout = 123;
+    EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_WRITE_TIMEOUT, &timeout));
+    EXPECT_EQ(12, timeout);
+}
+
+// Tests that a zero write timeout is accepted.
+TEST_F(MySqlConnectionTest, writeTimeoutZero) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, VALID_WRITE_TIMEOUT_ZERO);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    ASSERT_NO_THROW_LOG(conn.openDatabase());
+
+    auto mysql = static_cast<MYSQL*>(conn.mysql_);
+    ASSERT_TRUE(mysql);
+    unsigned int timeout = 123;
+    EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_WRITE_TIMEOUT, &timeout));
+    EXPECT_EQ(0, timeout);
+}
+
+// Tests that an invalid write timeout causes an error.
+TEST_F(MySqlConnectionTest, writeTimeoutInvalid) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_WRITE_TIMEOUT_1);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout);
+}
+
 TEST_F(MySqlConnectionWithPrimaryKeyTest, select) {
     select();
 }

From 5aa7a3545dfd7e4cff098cecfa68085296bcc89f Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 17:34:58 +0100
Subject: [PATCH 02/12] [#2688] Added tcp_user_timeout parameter

---
 src/lib/database/dbaccess_parser.cc           |  14 ++
 .../tests/dbaccess_parser_unittest.cc         |  52 +++++++
 src/lib/database/testutils/schema.cc          |   5 +-
 src/lib/database/testutils/schema.h           |   3 +
 src/lib/mysql/mysql_connection.cc             |  10 +-
 src/lib/pgsql/pgsql_connection.cc             | 131 +++++++++---------
 src/lib/pgsql/pgsql_connection.h              |  31 +++++
 .../pgsql/tests/pgsql_connection_unittest.cc  |  76 +++++++++-
 8 files changed, 248 insertions(+), 74 deletions(-)

diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc
index e3d14b485f..3f54098b46 100644
--- a/src/lib/database/dbaccess_parser.cc
+++ b/src/lib/database/dbaccess_parser.cc
@@ -51,6 +51,7 @@ DbAccessParser::parse(std::string& access_string,
     int64_t connect_timeout = 0;
     int64_t read_timeout = 0;
     int64_t write_timeout = 0;
+    int64_t tcp_user_timeout = 0;
     int64_t port = 0;
     int64_t max_reconnect_tries = 0;
     int64_t reconnect_wait_time = 0;
@@ -84,6 +85,11 @@ DbAccessParser::parse(std::string& access_string,
                 values_copy[param.first] =
                     boost::lexical_cast<std::string>(write_timeout);
 
+            } else if (param.first == "tcp-user-timeout") {
+                tcp_user_timeout = param.second->intValue();
+                values_copy[param.first] =
+                    boost::lexical_cast<std::string>(tcp_user_timeout);
+
             } else if (param.first == "max-reconnect-tries") {
                 max_reconnect_tries = param.second->intValue();
                 values_copy[param.first] =
@@ -185,6 +191,14 @@ DbAccessParser::parse(std::string& access_string,
                   << std::numeric_limits<uint32_t>::max()
                   << " (" << value->getPosition() << ")");
     }
+    if ((tcp_user_timeout < 0) ||
+        (tcp_user_timeout > std::numeric_limits<uint32_t>::max())) {
+        ConstElementPtr value = database_config->get("tcp-user-timeout");
+        isc_throw(DbConfigError, "tcp-user-timeout value: " << tcp_user_timeout
+                  << " is out of range, expected value: 0.."
+                  << std::numeric_limits<uint32_t>::max()
+                  << " (" << value->getPosition() << ")");
+    }
 
     // e. Check that the port is within a reasonable range.
     if ((port < 0) ||
diff --git a/src/lib/database/tests/dbaccess_parser_unittest.cc b/src/lib/database/tests/dbaccess_parser_unittest.cc
index b51b6f4b80..ec6f1a9a6d 100644
--- a/src/lib/database/tests/dbaccess_parser_unittest.cc
+++ b/src/lib/database/tests/dbaccess_parser_unittest.cc
@@ -169,6 +169,7 @@ class DbAccessParserTest : public ::testing::Test {
                  (parameter != "connect-timeout") &&
                  (parameter != "read-timeout") &&
                  (parameter != "write-timeout") &&
+                 (parameter != "tcp-user-timeout") &&
                  (parameter != "port") &&
                  (parameter != "max-row-errors") &&
                  (parameter != "readonly"));
@@ -505,6 +506,57 @@ TEST_F(DbAccessParserTest, largeWriteTimeout) {
     EXPECT_THROW(parser.parse(json_elements), DbConfigError);
 }
 
+// This test checks that the parser accepts the valid value of the
+// tcp-user-timeout parameter.
+TEST_F(DbAccessParserTest, validTcpUserTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "tcp-user-timeout", "3600",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_NO_THROW(parser.parse(json_elements));
+    checkAccessString("Valid write timeout", parser.getDbAccessParameters(),
+                      config);
+}
+
+// This test checks that the parser rejects the negative value of the
+// tcp-user-timeout parameter.
+TEST_F(DbAccessParserTest, negativeTcpUserTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "tcp-user-timeout", "-1",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test checks that the parser rejects a too large (greater than
+// the max uint32_t) value of the tcp-user-timeout parameter.
+TEST_F(DbAccessParserTest, largeTcpUserTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+                            "tcp-user-timeout", "4294967296",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+
 // This test checks that the parser accepts the valid value of the
 // port parameter.
 TEST_F(DbAccessParserTest, validPort) {
diff --git a/src/lib/database/testutils/schema.cc b/src/lib/database/testutils/schema.cc
index a794de6e6f..80371e5abc 100644
--- a/src/lib/database/testutils/schema.cc
+++ b/src/lib/database/testutils/schema.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2016-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -41,6 +41,9 @@ const char* INVALID_READ_TIMEOUT_1 = "read-timeout=bar";
 const char* VALID_WRITE_TIMEOUT = "write-timeout=12";
 const char* VALID_WRITE_TIMEOUT_ZERO = "write-timeout=0";
 const char* INVALID_WRITE_TIMEOUT_1 = "write-timeout=baz";
+const char* VALID_TCP_USER_TIMEOUT = "tcp-user-timeout=8";
+const char* VALID_TCP_USER_TIMEOUT_ZERO = "tcp-user-timeout=0";
+const char* INVALID_TCP_USER_TIMEOUT_1 = "-7";
 const char* VALID_READONLY_DB = "readonly=true";
 const char* INVALID_READONLY_DB = "readonly=5";
 const char* VALID_CERT = "cert-file=" TEST_CA_DIR "/kea-client.crt";
diff --git a/src/lib/database/testutils/schema.h b/src/lib/database/testutils/schema.h
index f278baa521..55c7b77864 100644
--- a/src/lib/database/testutils/schema.h
+++ b/src/lib/database/testutils/schema.h
@@ -37,6 +37,9 @@ extern const char* INVALID_READ_TIMEOUT_1;
 extern const char* VALID_WRITE_TIMEOUT;
 extern const char* VALID_WRITE_TIMEOUT_ZERO;
 extern const char* INVALID_WRITE_TIMEOUT_1;
+extern const char* VALID_TCP_USER_TIMEOUT;
+extern const char* VALID_TCP_USER_TIMEOUT_ZERO;
+extern const char* INVALID_TCP_USER_TIMEOUT_1;
 extern const char* VALID_READONLY_DB;
 extern const char* INVALID_READONLY_DB;
 extern const char* VALID_CERT;
diff --git a/src/lib/mysql/mysql_connection.cc b/src/lib/mysql/mysql_connection.cc
index aadb89bab7..1b1e4fc7da 100644
--- a/src/lib/mysql/mysql_connection.cc
+++ b/src/lib/mysql/mysql_connection.cc
@@ -65,12 +65,7 @@ MySqlConnection::openDatabase() {
     }
 
     unsigned int port = 0;
-    setIntParameterValue("port", 0, numeric_limits<unsigned int>::max(), port);
-    // The port is only valid when it is in the 0..65535 range.
-    // Again fall back to the default when the given value is invalid.
-     if (port > numeric_limits<uint16_t>::max()) {
-         port = 0;
-     }
+    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
 
     const char* user = NULL;
     string suser;
@@ -108,6 +103,9 @@ MySqlConnection::openDatabase() {
         // database, a zero timeout might signify something like "wait
         // indefinitely".
         setIntParameterValue("connect-timeout", 1, numeric_limits<int>::max(), connect_timeout);
+        // Other timeouts can be 0, meaning that the database client will follow a default
+        // behavior. Earlier MySQL versions didn't have these parameters, so we allow 0
+        // to skip setting them.
         setIntParameterValue("read-timeout", 0, numeric_limits<int>::max(), read_timeout);
         setIntParameterValue("write-timeout", 0, numeric_limits<int>::max(), write_timeout);
 
diff --git a/src/lib/pgsql/pgsql_connection.cc b/src/lib/pgsql/pgsql_connection.cc
index ae314e45aa..d7a08686c0 100644
--- a/src/lib/pgsql/pgsql_connection.cc
+++ b/src/lib/pgsql/pgsql_connection.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2016-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -180,8 +180,8 @@ PgSqlConnection::prepareStatements(const PgSqlTaggedStatement* start_statement,
     }
 }
 
-void
-PgSqlConnection::openDatabase() {
+std::string
+PgSqlConnection::getConnParameters() {
     string dbconnparameters;
     string shost = "localhost";
     try {
@@ -192,38 +192,14 @@ PgSqlConnection::openDatabase() {
 
     dbconnparameters += "host = '" + shost + "'" ;
 
-    string sport;
-    try {
-        sport = getParameter("port");
-    } catch (...) {
-        // No port parameter, we are going to use the default port.
-        sport = "";
-    }
+    unsigned int port = 0;
+    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
 
-    if (sport.size() > 0) {
-        unsigned int port = 0;
-
-        // Port was given, so try to convert it to an integer.
-        try {
-            port = boost::lexical_cast<unsigned int>(sport);
-        } catch (...) {
-            // Port given but could not be converted to an unsigned int.
-            // Just fall back to the default value.
-            port = 0;
-        }
-
-        // The port is only valid when it is in the 0..65535 range.
-        // Again fall back to the default when the given value is invalid.
-        if (port > numeric_limits<uint16_t>::max()) {
-            port = 0;
-        }
-
-        // Add it to connection parameters when not default.
-        if (port > 0) {
-            std::ostringstream oss;
-            oss << port;
-            dbconnparameters += " port = " + oss.str();
-        }
+    // Add port to connection parameters when not default.
+    if (port > 0) {
+        std::ostringstream oss;
+        oss << port;
+        dbconnparameters += " port = " + oss.str();
     }
 
     string suser;
@@ -252,46 +228,36 @@ PgSqlConnection::openDatabase() {
     }
 
     unsigned int connect_timeout = PGSQL_DEFAULT_CONNECTION_TIMEOUT;
-    string stimeout;
+    unsigned int tcp_user_timeout = 0;
     try {
-        stimeout = getParameter("connect-timeout");
-    } catch (...) {
-        // No timeout parameter, we are going to use the default timeout.
-        stimeout = "";
-    }
-
-    if (stimeout.size() > 0) {
-        // Timeout was given, so try to convert it to an integer.
-
-        try {
-            connect_timeout = boost::lexical_cast<unsigned int>(stimeout);
-        } catch (...) {
-            // Timeout given but could not be converted to an unsigned int. Set
-            // the connection timeout to an invalid value to trigger throwing
-            // of an exception.
-            connect_timeout = 0;
-        }
-
         // The timeout is only valid if greater than zero, as depending on the
         // database, a zero timeout might signify something like "wait
         // indefinitely".
-        //
-        // The check below also rejects a value greater than the maximum
-        // integer value.  The lexical_cast operation used to obtain a numeric
-        // value from a string can get confused if trying to convert a negative
-        // integer to an unsigned int: instead of throwing an exception, it may
-        // produce a large positive value.
-        if ((connect_timeout == 0) ||
-            (connect_timeout > numeric_limits<int>::max())) {
-            isc_throw(DbInvalidTimeout, "database connection timeout (" <<
-                      stimeout << ") must be an integer greater than 0");
-        }
+        setIntParameterValue("connect-timeout", 1, numeric_limits<int>::max(), connect_timeout);
+        // This timeout value can be 0, meaning that the database client will
+        // follow a default behavior. Earlier Postgres versions didn't have
+        // this parameter, so we allow 0 to skip setting them for these
+        // earlier versions.
+        setIntParameterValue("tcp-user-timeout", 0, numeric_limits<int>::max(), tcp_user_timeout);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidTimeout, ex.what());
     }
 
+    // Append timeouts.
     std::ostringstream oss;
-    oss << connect_timeout;
-    dbconnparameters += " connect_timeout = " + oss.str();
+    oss << " connect_timeout = " << connect_timeout;
+    if (tcp_user_timeout > 0) {
+        oss << " tcp_user_timeout = " << tcp_user_timeout * 1000;
+    }
+    dbconnparameters += oss.str();
 
+    return (dbconnparameters);
+}
+
+void
+PgSqlConnection::openDatabase() {
+    std::string dbconnparameters = getConnParameters();
     // Connect to Postgres, saving the low level connection pointer
     // in the holder object
     PGconn* new_conn = PQconnectdb(dbconnparameters.c_str());
@@ -533,5 +499,38 @@ PgSqlConnection::updateDeleteQuery(PgSqlTaggedStatement& statement,
     return (boost::lexical_cast<int>(PQcmdTuples(*result_set)));
 }
 
+template<typename T>
+void
+PgSqlConnection::setIntParameterValue(const std::string& name, int64_t min, int64_t max, T& value) {
+    string svalue;
+    try {
+        svalue = getParameter(name);
+    } catch (...) {
+        // Do nothing if the parameter is not present.
+    }
+    if (svalue.empty()) {
+        return;
+    }
+    try {
+        // Try to convert the value.
+        auto parsed_value = boost::lexical_cast<T>(svalue);
+        // Check if the value is within the specified range.
+        if ((parsed_value < min) || (parsed_value > max)) {
+            isc_throw(BadValue, "bad " << svalue << " value");
+        }
+        // Everything is fine. Return the parsed value.
+        value = parsed_value;
+
+    } catch (...) {
+        // We may end up here when lexical_cast fails or when the
+        // parsed value is not within the desired range. In both
+        // cases let's throw the same general error.
+        isc_throw(BadValue, name << " parameter (" <<
+                  svalue << ") must be an integer between "
+                  << min << " and " << max);
+    }
+}
+
+
 } // end of isc::db namespace
 } // end of isc namespace
diff --git a/src/lib/pgsql/pgsql_connection.h b/src/lib/pgsql/pgsql_connection.h
index 65e8e42ada..eede3db055 100644
--- a/src/lib/pgsql/pgsql_connection.h
+++ b/src/lib/pgsql/pgsql_connection.h
@@ -265,6 +265,16 @@ class PgSqlConnection : public db::DatabaseConnection {
     void prepareStatements(const PgSqlTaggedStatement* start_statement,
                            const PgSqlTaggedStatement* end_statement);
 
+    /// @brief Creates connection string from specified parameters.
+    ///
+    /// This function is called frin the @c openDatabase and from the unit
+    /// tests.
+    ///
+    /// @return connection string for @c openDatabase.
+    /// @throw NoDatabaseName Mandatory database name not given
+    /// @throw DbInvalidTimeout when the database timeout is wrong.
+    std::string getConnParameters();
+
     /// @brief Open Database
     ///
     /// Opens the database using the information supplied in the parameters
@@ -500,6 +510,27 @@ class PgSqlConnection : public db::DatabaseConnection {
         return (conn_);
     }
 
+private:
+
+    /// @brief Convenience function parsing and setting an integer parameter,
+    /// if it exists.
+    ///
+    /// If the parameter is not present, this function doesn't change the @c value.
+    /// Otherwise, it tries to convert the parameter to the type @c T. Finally,
+    /// it checks if the converted number is within the specified range.
+    ///
+    /// @param name Parameter name.
+    /// @param min Expected minimal value.
+    /// @param max Expected maximal value.
+    /// @param [out] value Reference to a value returning the parsed parameter.
+    /// @tparam T Parameter type.
+    /// @throw BadValue if the parameter is not a valid number or if it is out
+    /// of range.
+    template<typename T>
+    void setIntParameterValue(const std::string& name, int64_t min, int64_t max, T& value);
+
+public:
+
     /// @brief Accessor function which returns the IOService that can be used to
     /// recover the connection.
     ///
diff --git a/src/lib/pgsql/tests/pgsql_connection_unittest.cc b/src/lib/pgsql/tests/pgsql_connection_unittest.cc
index b3b23e2fc0..897904a7ac 100644
--- a/src/lib/pgsql/tests/pgsql_connection_unittest.cc
+++ b/src/lib/pgsql/tests/pgsql_connection_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2021-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2021-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -562,4 +562,78 @@ TEST_F(PgSqlConnectionTest, savepoints) {
     TestRowSet three_rows{{1, "one"}, {2, "two"}, {3, "three"}};
     ASSERT_NO_THROW_LOG(testSelect(three_rows, 0, 10));
 }
+
+// Tests that valid connection timeout is accepted.
+TEST_F(PgSqlConnectionTest, connectionTimeout) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            VALID_TIMEOUT);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    std::string parameters;
+    ASSERT_NO_THROW_LOG(parameters = conn.getConnParameters());
+    EXPECT_TRUE(parameters.find("connect_timeout = 10") != std::string::npos)
+        << "parameter not found in " << parameters;
+}
+
+// Tests that invalid timeout value type causes an error.
+TEST_F(PgSqlConnectionTest, connectionTimeoutInvalid) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_TIMEOUT_1);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidTimeout);
+}
+
+// Tests that a negative connection timeout value causes an error.
+TEST_F(PgSqlConnectionTest, connectionTimeoutInvalid2) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_TIMEOUT_2);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidTimeout);
+}
+
+// Tests that a zero connection timeout value causes an error.
+TEST_F(PgSqlConnectionTest, connectionTimeoutInvalid3) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_TIMEOUT_3);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidTimeout);
+}
+
+// Tests that valid tcp user timeout is accepted.
+TEST_F(PgSqlConnectionTest, tcpUserTimeout) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            VALID_TCP_USER_TIMEOUT);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    std::string parameters;
+    ASSERT_NO_THROW_LOG(parameters = conn.getConnParameters());
+    EXPECT_TRUE(parameters.find("tcp_user_timeout = 8000") != std::string::npos)
+        << "parameter not found in " << parameters;
+}
+
+// Tests that a zero tcp user timeout is accepted.
+TEST_F(PgSqlConnectionTest, tcpUserTimeoutZero) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            VALID_TCP_USER_TIMEOUT_ZERO);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    std::string parameters;
+    ASSERT_NO_THROW_LOG(parameters = conn.getConnParameters());
+    EXPECT_FALSE(parameters.find("tcp_user_timeout") != std::string::npos)
+        << "parameter found in " << parameters << " but expected to be gone";
+}
+
+// Tests that an invalid tcp user timeout causes an error.
+TEST_F(PgSqlConnectionTest, tcpUserTimeoutInvalid) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_TIMEOUT_1);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidTimeout);
+}
+
+
 }; // namespace

From 3188be21cf5d5483ba1b3b239cf123944f0a3cf9 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 17:52:15 +0100
Subject: [PATCH 03/12] [#2688] New tests for invalid port number

---
 src/lib/database/database_connection.h           |  9 +++++++++
 src/lib/database/testutils/schema.cc             |  1 +
 src/lib/database/testutils/schema.h              |  1 +
 src/lib/mysql/mysql_connection.cc                |  7 ++++++-
 src/lib/mysql/tests/mysql_connection_unittest.cc | 10 ++++++++++
 src/lib/pgsql/pgsql_connection.cc                |  7 ++++++-
 src/lib/pgsql/tests/pgsql_connection_unittest.cc |  9 +++++++++
 7 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/lib/database/database_connection.h b/src/lib/database/database_connection.h
index 881bfbac3d..f28f326745 100644
--- a/src/lib/database/database_connection.h
+++ b/src/lib/database/database_connection.h
@@ -68,6 +68,15 @@ class DbInvalidTimeout : public Exception {
         isc::Exception(file, line, what) {}
 };
 
+/// @brief Invalid port number
+///
+/// Thrown when the port number specified for the database connection is invalid.
+class DbInvalidPort : public Exception {
+public:
+    DbInvalidPort(const char* file, size_t line, const char* what) :
+        isc::Exception(file, line, what) {}
+};
+
 /// @brief Invalid 'readonly' value specification.
 ///
 /// Thrown when the value of the 'readonly' boolean parameter is invalid.
diff --git a/src/lib/database/testutils/schema.cc b/src/lib/database/testutils/schema.cc
index 80371e5abc..b396b9ec45 100644
--- a/src/lib/database/testutils/schema.cc
+++ b/src/lib/database/testutils/schema.cc
@@ -25,6 +25,7 @@ const char* INVALID_NAME = "name=invalidname";
 const char* VALID_HOST = "host=localhost";
 const char* VALID_HOST_TCP = "host=127.0.0.1";
 const char* INVALID_HOST = "host=invalidhost";
+const char* INVALID_PORT_1 = "port=65536";
 const char* VALID_USER = "user=keatest";
 const char* VALID_READONLY_USER = "user=keatest_readonly";
 const char* VALID_SECURE_USER = "user=keatest_secure";
diff --git a/src/lib/database/testutils/schema.h b/src/lib/database/testutils/schema.h
index 55c7b77864..2c08bed334 100644
--- a/src/lib/database/testutils/schema.h
+++ b/src/lib/database/testutils/schema.h
@@ -21,6 +21,7 @@ extern const char* INVALID_NAME;
 extern const char* VALID_HOST;
 extern const char* VALID_HOST_TCP;
 extern const char* INVALID_HOST;
+extern const char* INVALID_PORT_1;
 extern const char* VALID_USER;
 extern const char* VALID_READONLY_USER;
 extern const char* VALID_SECURE_USER;
diff --git a/src/lib/mysql/mysql_connection.cc b/src/lib/mysql/mysql_connection.cc
index 1b1e4fc7da..9db0da5416 100644
--- a/src/lib/mysql/mysql_connection.cc
+++ b/src/lib/mysql/mysql_connection.cc
@@ -65,7 +65,12 @@ MySqlConnection::openDatabase() {
     }
 
     unsigned int port = 0;
-    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+    try {
+        setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidPort, ex.what());
+    }
 
     const char* user = NULL;
     string suser;
diff --git a/src/lib/mysql/tests/mysql_connection_unittest.cc b/src/lib/mysql/tests/mysql_connection_unittest.cc
index 46a8cb0abc..a6d4bbde49 100644
--- a/src/lib/mysql/tests/mysql_connection_unittest.cc
+++ b/src/lib/mysql/tests/mysql_connection_unittest.cc
@@ -609,6 +609,16 @@ TEST_F(MySqlConnectionTest, transactions) {
     EXPECT_THROW(conn_.rollback(), isc::Unexpected);
 }
 
+// Tests that invalid port value causes an error.
+TEST_F(MySqlConnectionTest, portInvalid) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_PORT_1);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidPort);
+}
+
+
 // Tests that valid connection timeout is accepted.
 TEST_F(MySqlConnectionTest, connectionTimeout) {
     std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
diff --git a/src/lib/pgsql/pgsql_connection.cc b/src/lib/pgsql/pgsql_connection.cc
index d7a08686c0..77b71260be 100644
--- a/src/lib/pgsql/pgsql_connection.cc
+++ b/src/lib/pgsql/pgsql_connection.cc
@@ -193,7 +193,12 @@ PgSqlConnection::getConnParameters() {
     dbconnparameters += "host = '" + shost + "'" ;
 
     unsigned int port = 0;
-    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+    try {
+        setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidPort, ex.what());
+    }
 
     // Add port to connection parameters when not default.
     if (port > 0) {
diff --git a/src/lib/pgsql/tests/pgsql_connection_unittest.cc b/src/lib/pgsql/tests/pgsql_connection_unittest.cc
index 897904a7ac..906b3fc389 100644
--- a/src/lib/pgsql/tests/pgsql_connection_unittest.cc
+++ b/src/lib/pgsql/tests/pgsql_connection_unittest.cc
@@ -563,6 +563,15 @@ TEST_F(PgSqlConnectionTest, savepoints) {
     ASSERT_NO_THROW_LOG(testSelect(three_rows, 0, 10));
 }
 
+// Tests that invalid port value causes an error.
+TEST_F(PgSqlConnectionTest, portInvalid) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_PORT_1);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidPort);
+}
+
 // Tests that valid connection timeout is accepted.
 TEST_F(PgSqlConnectionTest, connectionTimeout) {
     std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,

From b04ec1f49b6d257548f5064085112a812c8b4704 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 18:25:16 +0100
Subject: [PATCH 04/12] [#2688] Strict checking timeouts against backend type

The read- and write- timeouts are only allowed for the MySQL backend. The
tcp-user-timeout is only allowed for the postgresql backend.
---
 src/lib/database/dbaccess_parser.cc           |  15 ++
 src/lib/database/dbaccess_parser.h            |   7 +-
 .../tests/dbaccess_parser_unittest.cc         | 143 +++++++++++++++---
 3 files changed, 137 insertions(+), 28 deletions(-)

diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc
index 3f54098b46..e60fd91d5a 100644
--- a/src/lib/database/dbaccess_parser.cc
+++ b/src/lib/database/dbaccess_parser.cc
@@ -183,6 +183,11 @@ DbAccessParser::parse(std::string& access_string,
                   << std::numeric_limits<uint32_t>::max()
                   << " (" << value->getPosition() << ")");
     }
+    if (read_timeout > 0 && (dbtype != "mysql")) {
+        ConstElementPtr value = database_config->get("read-timeout");
+        isc_throw(DbConfigError, "read-timeout value is only supported by the mysql backend"
+                  << " (" << value->getPosition() << ")");
+    }
     if ((write_timeout < 0) ||
         (write_timeout > std::numeric_limits<uint32_t>::max())) {
         ConstElementPtr value = database_config->get("write-timeout");
@@ -191,6 +196,11 @@ DbAccessParser::parse(std::string& access_string,
                   << std::numeric_limits<uint32_t>::max()
                   << " (" << value->getPosition() << ")");
     }
+    if (write_timeout > 0 && (dbtype != "mysql")) {
+        ConstElementPtr value = database_config->get("write-timeout");
+        isc_throw(DbConfigError, "write-timeout value is only supported by the mysql backend"
+                  << " (" << value->getPosition() << ")");
+    }
     if ((tcp_user_timeout < 0) ||
         (tcp_user_timeout > std::numeric_limits<uint32_t>::max())) {
         ConstElementPtr value = database_config->get("tcp-user-timeout");
@@ -199,6 +209,11 @@ DbAccessParser::parse(std::string& access_string,
                   << std::numeric_limits<uint32_t>::max()
                   << " (" << value->getPosition() << ")");
     }
+    if (tcp_user_timeout > 0 && (dbtype != "postgresql")) {
+        ConstElementPtr value = database_config->get("tcp-user-timeout");
+        isc_throw(DbConfigError, "tcp-user-timeout value is only supported by the mysql backend"
+                  << " (" << value->getPosition() << ")");
+    }
 
     // e. Check that the port is within a reasonable range.
     if ((port < 0) ||
diff --git a/src/lib/database/dbaccess_parser.h b/src/lib/database/dbaccess_parser.h
index ce0c9e2e88..30a4ec9163 100644
--- a/src/lib/database/dbaccess_parser.h
+++ b/src/lib/database/dbaccess_parser.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2021 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -47,9 +47,8 @@ class DbAccessParser: public isc::data::SimpleParser {
     /// @param database_config The configuration value for the "*-database"
     ///        identifier.
     ///
-    /// @throw isc::dhcp::DbConfigError The 'type' keyword contains an
-    ///        unknown database type or is missing from the list of
-    ///        database access keywords.
+    /// @throw isc::dhcp::DbConfigError The connection parameters or their
+    /// combination is invalid.
     void parse(std::string& access_string,
                isc::data::ConstElementPtr database_config);
 
diff --git a/src/lib/database/tests/dbaccess_parser_unittest.cc b/src/lib/database/tests/dbaccess_parser_unittest.cc
index ec6f1a9a6d..29322e0727 100644
--- a/src/lib/database/tests/dbaccess_parser_unittest.cc
+++ b/src/lib/database/tests/dbaccess_parser_unittest.cc
@@ -359,8 +359,8 @@ TEST_F(DbAccessParserTest, largeLFCInterval) {
 // This test checks that the parser accepts the valid value of the
 // connect-timeout parameter.
 TEST_F(DbAccessParserTest, validConnectTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "connect-timeout", "3600",
                             NULL};
 
@@ -377,8 +377,8 @@ TEST_F(DbAccessParserTest, validConnectTimeout) {
 // This test checks that the parser rejects the negative value of the
 // connect-timeout parameter.
 TEST_F(DbAccessParserTest, negativeConnectTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "connect-timeout", "-1",
                             NULL};
 
@@ -393,8 +393,8 @@ TEST_F(DbAccessParserTest, negativeConnectTimeout) {
 // This test checks that the parser rejects a too large (greater than
 // the max uint32_t) value of the connecttimeout parameter.
 TEST_F(DbAccessParserTest, largeConnectTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "connect-timeout", "4294967296",
                             NULL};
 
@@ -409,8 +409,8 @@ TEST_F(DbAccessParserTest, largeConnectTimeout) {
 // This test checks that the parser accepts the valid value of the
 // read-timeout parameter.
 TEST_F(DbAccessParserTest, validReadTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "read-timeout", "3600",
                             NULL};
 
@@ -427,8 +427,8 @@ TEST_F(DbAccessParserTest, validReadTimeout) {
 // This test checks that the parser rejects the negative value of the
 // read-timeout parameter.
 TEST_F(DbAccessParserTest, negativeReadTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "read-timeout", "-1",
                             NULL};
 
@@ -443,8 +443,8 @@ TEST_F(DbAccessParserTest, negativeReadTimeout) {
 // This test checks that the parser rejects a too large (greater than
 // the max uint32_t) value of the read-timeout parameter.
 TEST_F(DbAccessParserTest, largeReadTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "read-timeout", "4294967296",
                             NULL};
 
@@ -459,8 +459,8 @@ TEST_F(DbAccessParserTest, largeReadTimeout) {
 // This test checks that the parser accepts the valid value of the
 // write-timeout parameter.
 TEST_F(DbAccessParserTest, validWriteTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "write-timeout", "3600",
                             NULL};
 
@@ -477,8 +477,8 @@ TEST_F(DbAccessParserTest, validWriteTimeout) {
 // This test checks that the parser rejects the negative value of the
 // write-timeout parameter.
 TEST_F(DbAccessParserTest, negativeWriteTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "write-timeout", "-1",
                             NULL};
 
@@ -493,8 +493,8 @@ TEST_F(DbAccessParserTest, negativeWriteTimeout) {
 // This test checks that the parser rejects a too large (greater than
 // the max uint32_t) value of the write-timeout parameter.
 TEST_F(DbAccessParserTest, largeWriteTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
                             "write-timeout", "4294967296",
                             NULL};
 
@@ -509,8 +509,8 @@ TEST_F(DbAccessParserTest, largeWriteTimeout) {
 // This test checks that the parser accepts the valid value of the
 // tcp-user-timeout parameter.
 TEST_F(DbAccessParserTest, validTcpUserTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "postgresql",
+                            "name", "keatest",
                             "tcp-user-timeout", "3600",
                             NULL};
 
@@ -527,8 +527,8 @@ TEST_F(DbAccessParserTest, validTcpUserTimeout) {
 // This test checks that the parser rejects the negative value of the
 // tcp-user-timeout parameter.
 TEST_F(DbAccessParserTest, negativeTcpUserTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "postgresql",
+                            "name", "keatest",
                             "tcp-user-timeout", "-1",
                             NULL};
 
@@ -543,8 +543,8 @@ TEST_F(DbAccessParserTest, negativeTcpUserTimeout) {
 // This test checks that the parser rejects a too large (greater than
 // the max uint32_t) value of the tcp-user-timeout parameter.
 TEST_F(DbAccessParserTest, largeTcpUserTimeout) {
-    const char* config[] = {"type", "memfile",
-                            "name", "/opt/var/lib/kea/kea-leases6.csv",
+    const char* config[] = {"type", "postgresql",
+                            "name", "keatest",
                             "tcp-user-timeout", "4294967296",
                             NULL};
 
@@ -556,6 +556,101 @@ TEST_F(DbAccessParserTest, largeTcpUserTimeout) {
     EXPECT_THROW(parser.parse(json_elements), DbConfigError);
 }
 
+// This test verifies that specifying the tcp-user-timeout for the
+// memfile backend is not allowed.
+TEST_F(DbAccessParserTest, memfileTcpUserTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "keatest",
+                            "tcp-user-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test verifies that specifying the tcp-user-timeout for the
+// mysql backend is not allowed.
+TEST_F(DbAccessParserTest, mysqlTcpUserTimeout) {
+    const char* config[] = {"type", "mysql",
+                            "name", "keatest",
+                            "tcp-user-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test verifies that specifying the read-timeout for the
+// memfile backend is not allowed.
+TEST_F(DbAccessParserTest, memfileReadTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "keatest",
+                            "read-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test verifies that specifying the read-timeout for the
+// postgresql backend is not allowed.
+TEST_F(DbAccessParserTest, postgresqlReadTimeout) {
+    const char* config[] = {"type", "postgresql",
+                            "name", "keatest",
+                            "read-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test verifies that specifying the write-timeout for the
+// memfile backend is not allowed.
+TEST_F(DbAccessParserTest, memfileWriteTimeout) {
+    const char* config[] = {"type", "memfile",
+                            "name", "keatest",
+                            "write-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
+
+// This test verifies that specifying the write-timeout for the
+// postgresql backend is not allowed.
+TEST_F(DbAccessParserTest, postgresqlWriteTimeout) {
+    const char* config[] = {"type", "postgresql",
+                            "name", "keatest",
+                            "write-timeout", "10",
+                            NULL};
+
+    string json_config = toJson(config);
+    ConstElementPtr json_elements = Element::fromJSON(json_config);
+    EXPECT_TRUE(json_elements);
+
+    TestDbAccessParser parser;
+    EXPECT_THROW(parser.parse(json_elements), DbConfigError);
+}
 
 // This test checks that the parser accepts the valid value of the
 // port parameter.

From a7b0ae550588cdf3b86fc675f98396e1eb6e5acd Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 19:52:18 +0100
Subject: [PATCH 05/12] [#2688] Documented new config parameters

---
 doc/sphinx/arm/dhcp4-srv.rst | 49 +++++++++++++++++++++++++++++++++++
 doc/sphinx/arm/dhcp6-srv.rst | 50 ++++++++++++++++++++++++++++++++++++
 2 files changed, 99 insertions(+)

diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst
index 534c18e4f7..f75ee6e3fd 100644
--- a/doc/sphinx/arm/dhcp4-srv.rst
+++ b/doc/sphinx/arm/dhcp4-srv.rst
@@ -548,6 +548,49 @@ access the database should be set:
 If there is no password to the account, set the password to the empty
 string ``""``. (This is the default.)
 
+.. _tuning-database-timeouts4:
+
+Tuning Database Timeouts
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+In rare cases, reading or writing to the database may hang. It can be
+caused by a temporary network issue or misconfiguration of the proxy
+server switching the connection between different database instances.
+These situations are rare, but we have received reports from the users
+that Kea can sometimes hang while performing the database IO operations.
+Setting appropriate timeout values can mitigate such issues.
+
+MySQL exposes two distinct connection options to configure the read and
+write timeouts. Kea's corresponding ``read-timeout`` and  ``write-timeout``
+configuration parameters specify the timeouts in seconds. For example:
+
+::
+
+   "Dhcp4": { "lease-database": { "read-timeout" : 10, "write-timeout": 20, ... }, ... }
+
+
+Setting these parameters to 0 is equivalent to not specifying them and
+causes the Kea server to establish a connection to the database with the
+MySQL defaults. In this case, Kea waits infinitely for the completion of
+the read and write operations.
+
+MySQL versions earlier than 5.6 do not support setting timeouts for the
+read and write operations. Moreover, the ``read-timeout`` and ``write-timeout``
+parameters can only be specified for the MySQL backend. Setting them for
+any other backend type causes a configuration error.
+
+To set a timeout for PostgreSQL, use the ``tcp-user-timeout`` parameter
+instead. For example:
+
+::
+
+   "Dhcp4": { "lease-database": { "tcp-user-timeout" : 10, ... }, ... }
+
+
+Specifying this parameter for other backend types causes a configuration
+error.
+
+
 .. _hosts4-storage:
 
 Hosts Storage
@@ -763,6 +806,12 @@ the parameter is not specified.
    The ``readonly`` parameter is only supported for MySQL and
    PostgreSQL databases.
 
+
+Tuning Database Timeouts for Hosts Storage
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+See :ref:`tuning-database-timeouts4`.
+
 .. _dhcp4-interface-configuration:
 
 Interface Configuration
diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst
index 1009a6ee2d..2fed23c104 100644
--- a/doc/sphinx/arm/dhcp6-srv.rst
+++ b/doc/sphinx/arm/dhcp6-srv.rst
@@ -505,6 +505,49 @@ access the database should be set:
 If there is no password to the account, set the password to the empty
 string ``""``. (This is the default.)
 
+.. _tuning-database-timeouts6:
+
+Tuning Database Timeouts
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+In rare cases, reading or writing to the database may hang. It can be
+caused by a temporary network issue or misconfiguration of the proxy
+server switching the connection between different database instances.
+These situations are rare, but we have received reports from the users
+that Kea can sometimes hang while performing the database IO operations.
+Setting appropriate timeout values can mitigate such issues.
+
+MySQL exposes two distinct connection options to configure the read and
+write timeouts. Kea's corresponding ``read-timeout`` and  ``write-timeout``
+configuration parameters specify the timeouts in seconds. For example:
+
+::
+
+   "Dhcp6": { "lease-database": { "read-timeout" : 10, "write-timeout": 20, ... }, ... }
+
+
+Setting these parameters to 0 is equivalent to not specifying them and
+causes the Kea server to establish a connection to the database with the
+MySQL defaults. In this case, Kea waits infinitely for the completion of
+the read and write operations.
+
+MySQL versions earlier than 5.6 do not support setting timeouts for the
+read and write operations. Moreover, the ``read-timeout`` and ``write-timeout``
+parameters can only be specified for the MySQL backend. Setting them for
+any other backend type causes a configuration error.
+
+To set a timeout for PostgreSQL, use the ``tcp-user-timeout`` parameter
+instead. For example:
+
+::
+
+   "Dhcp6": { "lease-database": { "tcp-user-timeout" : 10, ... }, ... }
+
+
+Specifying this parameter for other backend types causes a configuration
+error.
+
+
 .. _hosts6-storage:
 
 Hosts Storage
@@ -720,6 +763,13 @@ the parameter is not specified.
    The ``readonly`` parameter is only supported for MySQL and
    PostgreSQL databases.
 
+
+Tuning Database Timeouts for Hosts Storage
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+See :ref:`tuning-database-timeouts6`.
+
+
 .. _dhcp6-interface-configuration:
 
 Interface Configuration

From 50e6504c86cda387cbf0dd1d4cf2f5ca008182d1 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 21:43:44 +0100
Subject: [PATCH 06/12] [#2688] Updated DHCP server parsers

---
 doc/examples/kea4/all-keys.json |   13 +-
 doc/examples/kea6/all-keys.json |   13 +-
 src/bin/dhcp4/dhcp4_lexer.cc    | 2851 +++++++++++-----------
 src/bin/dhcp4/dhcp4_lexer.ll    |   33 +
 src/bin/dhcp4/dhcp4_parser.cc   | 3727 +++++++++++++++--------------
 src/bin/dhcp4/dhcp4_parser.h    | 1538 ++++++------
 src/bin/dhcp4/dhcp4_parser.yy   |   24 +
 src/bin/dhcp6/dhcp6_lexer.cc    | 2823 +++++++++++-----------
 src/bin/dhcp6/dhcp6_lexer.ll    |   33 +
 src/bin/dhcp6/dhcp6_parser.cc   | 3954 ++++++++++++++++---------------
 src/bin/dhcp6/dhcp6_parser.h    | 1663 ++++++-------
 src/bin/dhcp6/dhcp6_parser.yy   |   25 +
 12 files changed, 8573 insertions(+), 8124 deletions(-)

diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json
index 3b3b722b4e..b64450db23 100644
--- a/doc/examples/kea4/all-keys.json
+++ b/doc/examples/kea4/all-keys.json
@@ -349,7 +349,10 @@
                 "type": "postgresql",
 
                 // User name to be used to access the database.
-                "user": "keatest"
+                "user": "keatest",
+
+                // TCP user timeout while communicating with the database.
+                "tcp-user-timeout": 100
             },
             {
                 // Name of the database to connect to.
@@ -382,7 +385,13 @@
                 "on-fail": "stop-retry-exit",
 
                 // Connection connect timeout.
-                "connect-timeout": 100
+                "connect-timeout": 100,
+
+                // Data read from the database timeout.
+                "read-timeout": 120,
+
+                // Data write to the database timeout.
+                "write-timeout": 180
             }
         ],
 
diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json
index c9e251210d..5e2f438b82 100644
--- a/doc/examples/kea6/all-keys.json
+++ b/doc/examples/kea6/all-keys.json
@@ -308,7 +308,10 @@
                 "type": "postgresql",
 
                 // User name to be used to access the database.
-                "user": "keatest"
+                "user": "keatest",
+
+                // TCP user timeout while communicating with the database.
+                "tcp-user-timeout": 100
             },
             {
                 // Name of the database to connect to.
@@ -341,7 +344,13 @@
                 "on-fail": "stop-retry-exit",
 
                 // Connection connect timeout.
-                "connect-timeout": 100
+                "connect-timeout": 100,
+
+                // Data read from the database timeout.
+                "read-timeout": 120,
+
+                // Data write to the database timeout.
+                "write-timeout": 180
             }
         ],
 
diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc
index 4190ba2a66..47620c50e5 100644
--- a/src/bin/dhcp4/dhcp4_lexer.cc
+++ b/src/bin/dhcp4/dhcp4_lexer.cc
@@ -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 214
-#define YY_END_OF_BUFFER 215
+#define YY_NUM_RULES 217
+#define YY_END_OF_BUFFER 218
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,234 +700,239 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[2061] =
+static const flex_int16_t yy_accept[2100] =
     {   0,
-      207,  207,    0,    0,    0,    0,    0,    0,    0,    0,
-      215,  213,   10,   11,  213,    1,  207,  204,  207,  207,
-      213,  206,  205,  213,  213,  213,  213,  213,  200,  201,
-      213,  213,  213,  202,  203,    5,    5,    5,  213,  213,
-      213,   10,   11,    0,    0,  195,    0,    0,    0,    0,
+      210,  210,    0,    0,    0,    0,    0,    0,    0,    0,
+      218,  216,   10,   11,  216,    1,  210,  207,  210,  210,
+      216,  209,  208,  216,  216,  216,  216,  216,  203,  204,
+      216,  216,  216,  205,  206,    5,    5,    5,  216,  216,
+      216,   10,   11,    0,    0,  198,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    1,  207,  207,
-        0,  206,  207,    3,    2,    6,    0,  207,    0,    0,
-        0,    0,    0,    0,    4,    0,    0,    9,    0,  196,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  210,
+      210,    0,  209,  210,    3,    2,    6,    0,  210,    0,
+        0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
+      199,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  201,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  198,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    2,    0,    0,    0,    0,    0,    0,
-        0,    8,    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,    0,
 
-        0,    0,    0,  197,  199,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  200,  202,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   88,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   91,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,  212,  210,
-        0,  209,  208,    0,    0,    0,    0,    0,    0,    0,
-      173,    0,  172,    0,    0,   94,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  215,  213,    0,  212,  211,    0,    0,
+        0,    0,    0,    0,    0,  176,    0,  175,    0,    0,
+       97,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   91,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   94,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   17,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   17,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   18,    0,    0,    0,    0,  211,  208,    0,
-        0,    0,    0,    0,    0,  174,    0,  176,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   98,    0,    0,    0,    0,    0,    0,   80,    0,
-        0,    0,    0,    0,    0,  120,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   40,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   18,    0,
+        0,    0,    0,    0,  214,  211,    0,    0,    0,    0,
+        0,    0,  177,    0,  179,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
+        0,    0,    0,    0,    0,   83,    0,    0,    0,    0,
+        0,    0,  123,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   40,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   79,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   83,    0,
-       41,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   82,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   86,    0,   41,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      117,    0,    0,   34,    0,    0,   38,    0,    0,    0,
-        0,    0,    0,   12,  178,  177,    0,    0,    0,  130,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  120,
+        0,    0,   34,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,   12,  181,  180,    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,    0,    0,    0,  109,    0,    0,    0,    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,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,   36,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       82,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      131,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  126,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
+       85,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  134,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  129,    0,    0,    0,    0,
 
-      179,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        7,    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,   93,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  111,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  107,    0,    0,
+        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  114,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      110,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   86,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   85,    0,    0,
+        0,    0,    0,    0,    0,   89,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  124,    0,    0,    0,
+        0,    0,    0,   88,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  136,  105,    0,    0,    0,    0,    0,
-        0,  110,   35,    0,    0,    0,    0,    0,   46,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  127,    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,  112,
-       42,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      108,    0,    0,    0,    0,    0,    0,  113,   35,    0,
+        0,    0,    0,    0,   49,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  115,   42,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   74,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   77,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      155,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  158,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   90,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  125,
-
-        0,    0,    0,    0,    0,    0,   54,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,   93,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  128,    0,
+        0,    0,    0,    0,    0,   57,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   39,    0,    0,    0,    0,   33,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  113,    0,    0,    0,
+        0,   39,    0,    0,    0,    0,    0,   33,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  116,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   53,    0,    0,    0,  122,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,  156,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   56,    0,    0,    0,  125,    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,  159,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   90,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   23,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  161,    0,    0,    0,  159,
         0,    0,    0,    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,  123,    0,
+        0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  164,    0,
+        0,    0,  162,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  127,    0,    0,    0,
-        0,    0,    0,    0,  108,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  121,   22,    0,  132,    0,    0,    0,
+        0,    0,    0,  186,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  126,    0,    0,    0,    0,    0,    0,
+        0,  130,    0,    0,    0,    0,    0,    0,    0,  111,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  165,    0,    0,    0,    0,   77,    0,    0,    0,
-        0,    0,    0,  135,    0,   37,    0,  154,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   62,    0,    0,    0,    0,    0,    0,    0,
-      101,  102,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,   81,    0,    0,    0,    0,    0,   55,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  124,   22,
+        0,  135,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  168,    0,    0,    0,
+        0,   80,    0,    0,    0,    0,    0,    0,  138,    0,
+       37,    0,  157,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,   65,    0,
+        0,    0,    0,    0,    0,    0,  104,  105,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   84,
+        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,    0,    0,    0,  132,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  129,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  187,    0,   78,   92,
+        0,    0,    0,    0,  190,    0,   81,   95,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   59,    0,    0,    0,    0,    0,    0,  162,    0,
-        0,  160,    0,    0,  151,  150,    0,    0,    0,    0,
-        0,    0,   21,    0,    0,    0,    0,  175,    0,    0,
 
-        0,    0,    0,  116,    0,    0,    0,    0,    0,    0,
+       62,    0,    0,    0,    0,    0,    0,  165,    0,    0,
+      163,    0,    0,  154,  153,    0,    0,    0,    0,    0,
+        0,    0,   21,    0,    0,    0,    0,    0,  178,    0,
+        0,    0,    0,    0,  119,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  144,    0,    0,    0,  153,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  133,    0,   15,    0,
-        0,   43,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  164,    0,    0,    0,    0,    0,    0,    0,    0,
-       60,    0,    0,  128,    0,    0,    0,  119,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       52,    0,   84,    0,  181,    0,    0,  186,    0,  104,
-        0,    0,    0,  193,    0,    0,    0,    0,    0,    0,
+        0,    0,  147,    0,    0,    0,  156,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  136,    0,   15,
+        0,    0,   43,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  167,    0,    0,    0,    0,    0,    0,    0,
+        0,   45,   63,    0,    0,  131,    0,    0,    0,  122,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   55,    0,   87,    0,    0,  184,    0,
+        0,  189,    0,  107,    0,    0,    0,  196,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   14,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  189,    0,    0,  114,
-       30,    0,    0,    0,  149,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  184,    0,  157,
-        0,    0,    0,    0,    0,    0,    0,    0,   28,    0,
-
-        0,    0,   27,    0,    0,  163,    0,    0,    0,   51,
-        0,    0,    0,    0,    0,  106,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   14,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   46,
+
+        0,    0,  192,    0,    0,  117,   30,    0,    0,    0,
+      152,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  187,    0,  160,    0,    0,    0,    0,
+        0,    0,    0,    0,   28,    0,    0,    0,   27,    0,
+        0,  166,    0,    0,    0,   54,    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,   56,    0,    0,  103,    0,    0,    0,   44,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   59,    0,
+        0,  106,    0,    0,    0,   44,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  134,    0,    0,    0,
-       29,    0,    0,    0,  185,    0,    0,    0,    0,    0,
-      145,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   20,    0,    0,
-
-      188,    0,   76,    0,   47,    0,    0,    0,  182,  180,
-        0,   31,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   16,    0,    0,    0,    0,  169,    0,
-        0,    0,    0,    0,    0,    0,    0,  142,    0,    0,
-        0,  118,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   89,    0,    0,    0,    0,    0,   48,    0,
-        0,    0,    0,  147,    0,    0,    0,    0,    0,    0,
-        0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  170,   13,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  148,    0,  158,    0,    0,
 
+        0,    0,    0,  137,    0,    0,    0,   29,    0,    0,
+        0,  188,    0,    0,    0,    0,    0,  148,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   20,    0,    0,  191,    0,   79,
+        0,   50,    0,    0,    0,    0,  185,  183,    0,   31,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  152,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  141,    0,   58,   57,   19,    0,  166,    0,
+        0,   16,    0,    0,    0,    0,  172,    0,    0,    0,
+        0,    0,    0,    0,    0,  145,    0,    0,    0,  121,
         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,    0,    0,    0,  140,
-        0,    0,    0,    0,   50,    0,   63,    0,   45,  168,
-        0,   95,    0,    0,    0,    0,    0,    0,    0,    0,
-       75,    0,    0,    0,    0,    0,    0,    0,   72,    0,
+       92,    0,    0,    0,    0,    0,   51,    0,    0,    0,
 
+        0,   47,  150,    0,    0,    0,    0,    0,    0,    0,
+        0,   69,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  173,   13,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  151,    0,  161,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   49,    0,    0,    0,    0,
-        0,    0,   70,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   32,    0,
-        0,   71,    0,    0,    0,    0,  146,    0,    0,    0,
-        0,  191,  194,  167,    0,  115,   96,    0,    0,    0,
-        0,    0,    0,    0,    0,   67,    0,    0,    0,    0,
-        0,    0,    0,    0,  138,    0,    0,    0,    0,    0,
-        0,  143,    0,   69,    0,   61,    0,    0,    0,    0,
-
-        0,    0,   97,    0,    0,    0,    0,    0,    0,    0,
-      137,    0,    0,  171,  192,    0,    0,    0,    0,    0,
+        0,  155,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  144,    0,   61,   60,   19,    0,  169,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       68,    0,    0,    0,    0,   26,   24,    0,    0,    0,
-       73,    0,    0,   99,    0,   65,    0,    0,    0,    0,
-        0,    0,    0,    0,   64,    0,  139,   25,  190,    0
+        0,    0,    0,    0,  103,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,  143,    0,
+        0,    0,    0,   53,    0,   66,    0,   48,  171,    0,
+       98,    0,    0,    0,    0,    0,    0,    0,    0,   78,
+        0,    0,    0,    0,    0,    0,    0,   75,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   52,    0,    0,    0,    0,    0,
+        0,   73,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   32,    0,    0,
+       74,    0,    0,    0,    0,  149,    0,    0,    0,    0,
+
+      194,  197,  170,    0,  118,   99,    0,    0,    0,    0,
+        0,    0,    0,    0,   70,    0,    0,    0,    0,    0,
+        0,    0,    0,  141,    0,    0,    0,    0,    0,    0,
+      146,    0,   72,    0,   64,    0,    0,    0,    0,    0,
+        0,  100,    0,    0,    0,    0,    0,    0,    0,  140,
+        0,    0,  174,  195,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   71,
+        0,    0,    0,    0,   26,   24,    0,    0,    0,   76,
+        0,    0,  102,    0,   68,    0,    0,    0,    0,    0,
+        0,    0,    0,   67,    0,  142,   25,  193,    0
+
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -974,486 +979,496 @@ static const YY_CHAR yy_meta[74] =
         1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[2069] =
+static const flex_int16_t yy_base[2108] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     2447, 2448,   34, 2443,  145,    0,  207, 2448,  214,  221,
-       13,  228, 2448, 2423,  118,   25,    2,    6, 2448, 2448,
-       73,   11,   17, 2448, 2448, 2448,  104, 2431, 2384,    0,
-     2421,  108, 2438,   24,  262, 2448, 2380,   67, 2386,   84,
-       75,   88,  224,   91,   89,  290,  220, 2378,  206,  285,
-      236,  204,  197,   60,  232, 2387,  247,  294,  315,  307,
-      286, 2370,  212,  325,  354,  328, 2389,    0,  366,  382,
-      397,  411,  404, 2448,    0, 2448,  419,  425,  249,  319,
-      238,  331,  399,  329, 2448, 2386, 2427, 2448,  404, 2448,
-
-      438, 2414,  405, 2383,  415,   10,  409,  311,  411,  418,
-      428, 2424,    0,  499,  418, 2366, 2363, 2367,  402, 2363,
-       80, 2371,  216, 2357, 2358, 2363,   78, 2373, 2356, 2365,
-     2355, 2364,  221, 2355,  223, 2356, 2354,  400, 2402, 2406,
-     2346, 2399, 2339,  174, 2360, 2360, 2354,  278, 2347, 2345,
-     2346, 2338, 2343, 2337,  423, 2348,  346, 2333, 2332, 2346,
-      405, 2332,  420,  355, 2326,  495,  407,  428, 2347, 2344,
-     2345,  428, 2343, 2378, 2377, 2323, 2323,  433, 2324,  433,
-     2316, 2333, 2325,    0,  446,  462,  471,  464,  476,  481,
-     2324, 2448, 2369,  486, 2318,  466,  479,  485, 2372,  510,
-
-     2371,  502, 2370, 2448, 2448,  548, 2369,  521, 2328, 2320,
-     2307, 2318, 2322, 2323, 2303, 2314, 2318, 2315, 2314,  478,
-      518, 2352, 2316, 2297, 2294, 2302, 2297, 2311, 2307, 2298,
-     2294, 2306, 2306, 2297, 2281, 2285, 2298, 2300, 2297, 2289,
-     2279, 2297, 2448, 2292,  505, 2330, 2276, 2285, 2327, 2274,
-     2284, 2287,  518, 2283, 2322, 2267, 2269, 2280, 2318, 2263,
-     2321, 2275, 2255, 2270,  542, 2260, 2266,  524, 2257, 2255,
-     2255, 2261, 2252, 2251, 2258, 2248, 2307, 2263, 2262, 2256,
-      498, 2263, 2258, 2250, 2240, 2255, 2254, 2249, 2253, 2234,
-     2250, 2236, 2242, 2249, 2231,  457, 2236, 2233, 2232, 2227,
-
-     2241,  551, 2240, 2283, 2242,  529, 2233,  552, 2448, 2448,
-      554, 2448, 2448, 2220,  536,  543, 2268,  559, 2278,  553,
-     2448, 2277, 2448, 2271,  603, 2448,  552, 2211, 2220, 2268,
-     2228, 2211, 2228, 2264, 2224, 2207, 2213, 2265, 2220, 2223,
-     2214, 2217, 2203, 2214, 2258, 2252, 2210, 2207,  594, 2213,
-     2253, 2188, 2246, 2199, 2194, 2191, 2242, 2199, 2188, 2204,
-     2238, 2184,  601, 2198, 2183, 2196, 2194, 2192, 2192, 2191,
-     2186, 2193, 2188, 2184,  570, 2182, 2185, 2180, 2166, 2178,
-     2174, 2224,  563, 2218, 2448, 2182, 2216, 2166, 2165, 2164,
-     2157, 2159, 2171, 2162, 2169, 2150, 2167, 2162,  581, 2209,
-
-     2162, 2159, 2162, 2448, 2161, 2150, 2150, 2162,  547, 2137,
-     2138, 2159, 2150, 2140, 2191, 2136, 2150,  584, 2136, 2148,
-     2147, 2146, 2141, 2183, 2143, 2142, 2141, 2140, 2183, 2142,
-     2122, 2180, 2448, 2122, 2121,  629, 2134, 2448, 2448, 2133,
-     2122, 2114,  572, 2173, 2172, 2448, 2171, 2448,  607,  655,
-      610, 2170, 2112, 2123, 2162, 2115, 2117, 2119, 2106, 2114,
-     2102, 2448, 2107, 2100, 2112, 2115, 2102, 2101, 2448,  595,
-     2103, 2100,  613, 2098, 2100, 2448, 2145, 2107, 2104, 2089,
-     2102, 2097,  637, 2104, 2092, 2085, 2136, 2448, 2083, 2099,
-     2133, 2094, 2091, 2092, 2076, 2085, 2127, 2078, 2077, 2072,
-
-     2071, 2122, 2066,  626, 2085, 2059, 2066, 2071, 2081, 2115,
-     2119, 2448, 2064, 2060, 2058, 2067, 2066, 2060, 2067, 2051,
-     2051, 2061, 2049, 2063, 2063, 2051, 2047, 2045, 2448, 2102,
-     2448, 2044, 2055, 2094, 2039, 2044, 2053, 2047, 2041, 2050,
-     2092, 2086, 2048, 2032, 2027, 2047, 2022, 2028,  631, 2042,
-     2035, 2039, 2022, 2080, 2021, 2021, 2072, 2017, 2018, 2017,
-     2448, 2030, 2067, 2448, 2018, 2016, 2448, 2027, 2063, 2023,
-     2007, 2024, 2064, 2448, 2448, 2448,  630,  621,  681, 2448,
-     2015, 2014,  294, 2021, 2001, 2011, 2053, 1998, 2051, 1996,
-     2006, 2048, 1993, 2000, 1993, 2005, 1987, 1987, 2002, 2001,
-
-      603, 2000, 1999, 1999, 1981, 1986, 2027, 1994, 1991, 1985,
-     2030, 1974, 1990, 1989, 2448, 1974, 1971, 2029, 1984, 1976,
-     1982, 1973, 1981, 1966, 1982, 1964, 1976, 1968,  640, 1959,
-     1958, 1952, 1957, 1972, 1969, 1970, 1949, 1959, 1965, 2008,
-     1963, 1955, 1946, 2448, 1947, 1949, 1958, 1950, 1955, 1994,
-     1993, 1944,   16, 1953, 1990, 1935, 1988, 1935, 1938, 1931,
-     2448, 1945, 1924, 1928, 1942, 1934, 1979, 1931, 1938, 1976,
-     2448, 1921, 1935, 1934, 1937, 1918, 1970, 1969, 1916, 1967,
-     1927, 1911, 1964, 1963, 2448, 1908, 1922, 1921,  679, 1922,
-     1921, 1957, 1921, 1916, 1899, 1904, 1906, 2448, 1912, 1902,
-
-     2448,  654,  666, 1896, 1894, 1901, 1911, 1903, 1890, 1884,
-     1896, 1895, 1940,  659, 1944, 1898,  649,   20,  242,  210,
-      437,  541,  577,  564,  585,  646,  649,  641,  698,  651,
-      661,  664,  703,  666,  660,  664,  662,  664,  711,  717,
-      675,  676, 2448,  679,  675,  666,  681,  686,  683,  686,
-      685,  673,  687,  685,  693,  729,  691,  736,  737,  687,
-      679,  689,  736,  694,  744, 2448,  745,  698,  700,  696,
-      690,  693,  751,  747,  710,  699,  712, 2448,  702,  713,
-      702,  715,  705,  718,  762,  763,  706,  717,  702,  725,
-      704,  710,  765,  729,  713,  725,  769,  770,  717,  772,
-
-      736,  731,  736,  734,  778,  720,  732,  735,  739,  731,
-      728, 2448,  792,  751,  752,  742,  745,  756,  741,  748,
-      754,  746,  760,  800,  776,  763,  768,  765,  747,  754,
-      768,  813,  770,  767,  768,  766,  775, 2448,  771,  766,
-      781,  778,  764,  766,  785,  782,  770,  777,  778,  787,
-      791,  827,  789,  780,  778,  777,  788,  784,  840,  787,
-      798,  783,  784,  790,  806,  796, 2448,  806,  806,  799,
-      810,  808,  853,  795,  797,  812,  799,  798,  860,  817,
-      803,  809,  807, 2448, 2448,  817,  822,  827,  815,  825,
-      827, 2448, 2448,  828,  815,  833,  820,  814, 2448,  819,
-
-      837,  824,  874,  825,  877,  823,  827,  845,  886, 2448,
-     2448,  831,  835,  834,  831,  891,  844,  834,  835,  831,
-      844,  855,  856,  851,  852,  854,  847,  849,  845,  851,
-      851,  853,  868,  851,  910,  867,  872,  849,  872,  858,
-      857, 2448,  864,  865,  865,  878,  916,  874,  864,  879,
-      880,  867,  899,  907,  876,  871,  926,  927,  889,  929,
-     2448,  935,  878,  894,  898,  939,  889,  888,  883,  884,
-      896,  891,  887,  890,  891,  901,  910,  947,  894,  913,
-      905,  900,  958,  915,  916,  907, 2448,  921,  910,  913,
-      921,  923,  908,  924,  918,  965,  931,  915,  916, 2448,
-
-      932,  935,  918,  977,  920,  939, 2448,  938,  941,  927,
-      922,  940,  980,  938,  934,  931,  984,  985,  947,  933,
-      951,  950,  951,  937,  952,  944,  951,  941,  959,  958,
-      945,  962, 2448,  954,  960,  963, 1008, 2448,  957,  962,
-     1006,  958,  970,  964,  965,  963,  965,  975, 1020,  964,
-      965,  965, 1024,  968,  980,  973, 2448,  969,  977,  975,
-     1026,  968,  989,  975,  977,  983,  991,  982,  987,  997,
-      998, 1003, 1044, 1016, 1021, 1003, 1000,  996, 1010,  993,
-      993, 2448,  994, 1054,  997, 2448, 1008,  998, 1018, 1017,
-     1008, 1019, 1062, 1023, 1016, 1020, 1024, 1007, 1024, 1015,
-
-     1070, 1017, 2448, 1067, 1016, 1019, 1037, 1019, 1020, 1020,
-     1041, 1038, 1043, 1044, 1030, 1038, 1047, 1027, 1042, 1049,
-     1091, 2448, 1092, 1093, 1035, 1045, 1055, 1039, 1059, 1047,
-     1043, 1050, 1059, 1047, 1054, 1055, 1067, 1108, 1055, 1053,
-     1055, 1072, 1113, 1063, 1062, 1068, 1066, 1064, 1059, 1120,
-     1071, 1122, 1118, 1124, 2448, 1081, 1074, 1065, 1084, 1072,
-     1082, 1083, 1079, 1092, 1092, 2448, 1076, 1072, 1079, 2448,
-     1080, 1140, 1099, 1080, 1099, 1100, 1102, 1141, 1094, 1148,
-     1149, 1099, 1097, 1108, 1107, 1091, 1096, 1114, 2448, 1136,
-     1127, 1159, 1099, 1121, 1116, 1116, 1120, 1165, 2448, 1108,
-
-     1108, 1111, 1128, 1123, 1127, 1122, 2448, 1114, 1131, 1111,
-     1132, 1122, 1173, 1126, 2448, 1140, 1140, 1178, 1125, 1134,
-     1182, 1140, 1145, 1131, 1191, 1134, 1145, 1137, 1143, 1139,
-     1157, 1158, 1159, 2448, 2448, 1158, 2448, 1143, 1154, 1145,
-     1164, 1157, 1155, 1148, 1160, 1204, 1168, 1157, 1164, 1165,
-     1171, 2448, 1164, 1216, 1157, 1218, 2448, 1219, 1161, 1167,
-     1174, 1218, 1180, 2448, 1181, 2448, 1168, 2448, 1170, 1184,
-     1189, 1172, 1231, 1188, 1189, 1229, 1181, 1186, 1237, 1233,
-     1186, 1240, 2448, 1191, 1188, 1243, 1244, 1201, 1202, 1204,
-     2448, 2448, 1243, 1192, 1208, 1251, 1193, 1205, 1210, 1225,
-
-     1256, 2448, 1213, 1206, 1215, 1206, 1217, 2448, 1262, 1199,
-     1210, 1225, 1261, 1213, 1224, 1225, 1226, 1223, 1267, 1230,
-     1220, 1230, 1236, 1223, 1219, 1279, 1275, 1233, 1277, 1284,
-     1241, 2448, 1242, 1236, 1245, 1246, 1243, 1233, 1236, 1236,
-     1241, 1296, 1243, 1298, 1241, 1246, 1301, 1297, 1238, 1253,
-     1246, 1250, 1263, 1264, 1262, 1311, 2448, 1265, 2448, 2448,
-     1270, 1262, 1272, 1257, 1313, 1260, 1260, 1321, 1265, 1275,
-     1324, 2448, 1272, 1273, 1275, 1328, 1269, 1272, 2448, 1290,
-     1291, 2448, 1291, 1279, 2448, 2448, 1292, 1275, 1295, 1282,
-     1341, 1291, 2448, 1343, 1292, 1345, 1325, 2448, 1347, 1304,
-
-     1349, 1300, 1347, 2448, 1295, 1354, 1304, 1298, 1295, 1298,
-     1300, 1317, 1356, 1309, 1321, 1324, 1312, 1315, 1308, 1315,
-     1306, 2448, 1314, 1329, 1314, 2448, 1316, 1317, 1332, 1332,
-     1335, 1335, 1332, 1376, 1338, 1330, 2448, 1331, 2448, 1341,
-     1333, 2448, 1339, 1344, 1345, 1342, 1386, 1334, 1349, 1350,
-     1342, 2448, 1339, 1340, 1340, 1346, 1345, 1343, 1397, 1358,
-     2448, 1399, 1346, 2448, 1347, 1348, 1354, 2448, 1363, 1357,
-     1412, 1359, 1352, 1364, 1359, 1369, 1380, 1373, 1379, 1375,
-     2448, 1384, 2448, 1381, 2448, 1378, 1401, 2448, 1428, 2448,
-     1386, 1371, 1431, 2448, 1432, 1389, 1394, 1376, 1436, 1432,
-
-     1396, 1393, 1389, 1382, 1437, 1395, 1396, 1386, 1391, 1403,
-     1448, 1403, 1451, 1447, 1410, 1407, 1451, 1399, 1404, 1402,
-     1461, 1417, 1405, 1464, 1460, 1423, 1467, 1428, 1417, 1411,
-     1471, 1413, 1414, 1428, 1431, 1431, 1477, 1419, 1436, 1432,
-     1430, 1437, 1421, 1479, 1480, 1481, 1444, 1437, 1436, 1436,
-     1431, 1449, 2448, 1440, 1446, 1451, 1438, 1439, 1438, 1440,
-     1495, 1436, 1454, 1503, 1461, 1474, 2448, 1506, 1459, 2448,
-     2448, 1450, 1461, 1510, 2448, 1456, 1461, 1459, 1509, 1467,
-     1472, 1460, 1476, 1466, 1464, 1478, 1465, 2448, 1467, 2448,
-     1470, 1521, 1464, 1469, 1529, 1477, 1487, 1488, 2448, 1534,
-
-     1487, 1531, 2448, 1482, 1538, 2448, 1481, 1496, 1484, 2448,
-     1494, 1495, 1544, 1502, 1506, 2448, 1542, 1508, 1484, 1502,
-     1503, 1512, 1494, 1501, 1513, 1512, 1503, 1553, 1505, 1501,
-     1561, 1503, 1504, 1564, 1560, 1566, 1516, 1568, 1521, 1526,
-     1519, 2448, 1572, 1573, 2448, 1522, 1575, 1517, 2448, 1520,
-     1530, 1574, 1522, 1537, 1524, 1539, 1525, 1532, 1532, 1587,
-     1544, 1545, 1533, 1532, 1592, 1545, 2448, 1589, 1540, 1537,
-     2448, 1551, 1538, 1559, 2448, 1556, 1601, 1554, 1551, 1552,
-     2448, 1605, 1564, 1547, 1549, 1565, 1558, 1548, 1564, 1565,
-     1574, 1564, 1616, 1576, 1560, 1569, 1615, 2448, 1573, 1622,
-
-     2448, 1571, 2448, 1565, 2448, 1572, 1626, 1622, 2448, 2448,
-     1585, 2448, 1625, 1587, 1588, 1573, 1574, 1582, 1636, 1584,
-     1633, 1634, 1589, 2448, 1584, 1602, 1589, 1596, 2448, 1593,
-     1598, 1596, 1648, 1649, 1597, 1594, 1594, 2448, 1609, 1610,
-     1611, 2448, 1612, 1602, 1614, 1659, 1612, 1661, 1603, 1611,
-     1612, 1625, 2448, 1626, 1607, 1608, 1615, 1617, 2448, 1631,
-     1628, 1668, 1629, 2448, 1633, 1618, 1618, 1633, 1626, 1625,
-     1636, 1623, 2448, 1639, 1627, 1630, 1686, 1626, 1645, 1647,
-     1638, 1647, 1649, 1653, 2448, 2448, 1646, 1637, 1696, 1639,
-     1698, 1699, 1700, 1658, 1702, 2448, 1644, 2448, 1699, 1661,
-
-     1662, 1649, 1657, 1668, 1655, 1666, 1652, 1650, 1658, 1657,
-     1662, 1654, 1719, 1672, 1673, 1663, 1680, 1679, 1720, 1664,
-     1683, 1684, 2448, 1689, 1682, 1687, 1688, 1733, 1690, 1693,
-     1680, 1689, 2448, 1738, 2448, 2448, 2448, 1699, 2448, 1740,
-     1682, 1742, 1743, 1686, 1745, 1693, 1742, 1743, 1705, 1745,
-     1691, 1695, 1713, 1754, 1713, 2448, 1704, 1694, 1753, 1719,
-     1712, 1708, 1762, 1705, 1707, 1706, 1713, 1709, 1711, 2448,
-     1716, 1726, 1711, 1719, 2448, 1714, 2448, 1726, 2448, 2448,
-     1731, 2448, 1732, 1732, 1723, 1779, 1723, 1733, 1718, 1731,
-     2448, 1733, 1741, 1786, 1727, 1729, 1726, 1750, 2448, 1737,
-
-     1744, 1745, 1748, 1737, 1791, 1738, 1746, 1755, 1754, 1757,
-     1750, 1745, 1745, 1757, 1752, 2448, 1763, 1751, 1804, 1755,
-     1767, 1812, 2448, 1758, 1770, 1815, 1764, 1766, 1764, 1765,
-     1820, 1773, 1760, 1775, 1780, 1825, 1826, 1827, 1784, 1829,
-     1830, 1774, 1778, 1774, 1790, 1773, 1785, 1779, 2448, 1795,
-     1839, 2448, 1796, 1781, 1799, 1790, 2448, 1791, 1805, 1801,
-     1794, 2448, 2448, 2448, 1848, 2448, 2448, 1791, 1799, 1794,
-     1847, 1813, 1810, 1855, 1816, 2448, 1857, 1799, 1859, 1802,
-     1815, 1814, 1815, 1805, 2448, 1806, 1866, 1819, 1828, 1821,
-     1865, 2448, 1812, 2448, 1824, 2448, 1868, 1874, 1816, 1832,
-
-     1877, 1878, 2448, 1835, 1829, 1822, 1842, 1839, 1831, 1835,
-     2448, 1882, 1831, 2448, 2448, 1831, 1839, 1886, 1846, 1839,
-     1894, 1842, 1842, 1838, 1840, 1899, 1900, 1842, 1858, 1843,
-     2448, 1904, 1851, 1858, 1907, 2448, 2448, 1860, 1909, 1857,
-     2448, 1861, 1860, 2448, 1861, 2448, 1855, 1855, 1872, 1873,
-     1918, 1864, 1920, 1921, 2448, 1922, 2448, 2448, 2448, 2448,
-     1928, 1931, 1934, 1935, 1937, 1940, 1943, 1946
+     2489, 2490,   34, 2485,  145,    0,  207, 2490,  214,  221,
+       13,  228, 2490, 2465,  118,   25,    2,    6, 2490, 2490,
+       73,   11,   17, 2490, 2490, 2490,  104, 2473, 2426,    0,
+     2463,  108, 2480,   24,  262, 2490, 2422,   67, 2428,   84,
+       75,   88,  224,   91,   89,  290,  220, 2420,  206,  285,
+      236,  204,  197,   60,  232, 2429,  247,  294,  315,  307,
+      286, 2412,  212,  325,  354,  328, 2431,  330,    0,  381,
+      398,  412,  420,  425, 2490,    0, 2490,  439,  444,  249,
+      319,  238,  331,  349,  334, 2490, 2428, 2469, 2490,  339,
+
+     2490,  438, 2456,  341, 2425,  363,   10,  366,  323,  380,
+      388,  418, 2466,    0,  499,  410, 2408, 2405, 2409,  415,
+     2405,   80, 2413,  216, 2399, 2400, 2405,   78, 2415, 2398,
+     2407, 2397, 2406,  221, 2397,  223, 2398, 2396,  409, 2444,
+     2448, 2388, 2441, 2381,  174, 2402, 2402, 2396,  278, 2389,
+     2387, 2388, 2380, 2385, 2379,  425, 2390,  408, 2375, 2374,
+     2388,  423, 2374,  419,  434, 2368,  495,  432,  469, 2389,
+     2386, 2387,  447, 2385, 2420, 2419,  468, 2365, 2365,  471,
+     2366,  474, 2358, 2375, 2367, 2369,    0,  474,  443,  468,
+      475,  503,  469, 2365, 2490, 2410,  475, 2359,  476,  499,
+
+      503, 2413,  517, 2412,  519, 2411, 2490, 2490,  565, 2410,
+      538, 2369, 2361, 2348, 2359, 2363, 2364, 2344, 2355, 2359,
+     2356, 2355,  504,  504, 2393, 2357, 2338, 2335, 2343, 2338,
+     2352, 2348, 2339, 2335, 2347, 2347, 2338, 2322, 2326, 2339,
+     2341, 2338, 2330, 2320, 2338, 2490, 2333,  522, 2371, 2317,
+     2326, 2368, 2315, 2325, 2328,  509, 2324, 2363, 2308, 2310,
+     2321, 2359, 2304, 2362, 2316, 2296, 2311,  559, 2301, 2307,
+      355, 2298, 2296, 2296, 2302, 2293, 2292, 2299, 2289, 2348,
+     2304, 2303, 2297,  514, 2304, 2299, 2291, 2281, 2296, 2295,
+     2290, 2294, 2275, 2291, 2277, 2283, 2290, 2272,  503, 2277,
+
+     2274, 2273,  566, 2268, 2282,  559, 2281, 2324, 2283,  564,
+     2274, 2262,  560, 2490, 2490,  567, 2490, 2490, 2260,  541,
+      555, 2308,  571, 2318,  565, 2490, 2317, 2490, 2311,  615,
+     2490,  556, 2251, 2260, 2308, 2268, 2251, 2268, 2304, 2264,
+     2247, 2253, 2305, 2260, 2263, 2254, 2257, 2243, 2254, 2298,
+     2292, 2250, 2247,  590, 2253, 2293, 2228, 2286, 2239, 2234,
+     2231, 2282, 2239, 2228, 2244, 2278, 2224,  593, 2238, 2223,
+     2236, 2234, 2232, 2232, 2231, 2226, 2233, 2228, 2224,  582,
+     2222, 2225, 2220, 2206, 2218, 2214, 2264,  557, 2258, 2490,
+     2222, 2256, 2206, 2205, 2204, 2197, 2199, 2211, 2202, 2209,
+
+     2190, 2207, 2202,  596, 2249, 2202, 2199, 2202, 2490, 2201,
+      608, 2191, 2203,  587, 2178, 2179, 2200, 2191, 2181, 2232,
+     2177, 2191,  597, 2177, 2189, 2188, 2187, 2182, 2224, 2184,
+     2183, 2182, 2181, 2164, 2223, 2182, 2162, 2220, 2490, 2162,
+     2161,  642, 2174, 2172, 2490, 2490, 2172, 2161, 2153,  618,
+     2212, 2211, 2490, 2210, 2490,  624,  672,  637, 2209, 2151,
+     2162, 2201, 2154, 2156, 2158, 2145, 2153, 2141, 2490, 2146,
+     2139, 2151, 2154, 2141, 2140, 2490,  615, 2142, 2139,  573,
+     2137, 2139, 2490, 2184, 2146, 2143, 2128, 2141, 2136,  663,
+     2143, 2131, 2124, 2175, 2490, 2122, 2138, 2172, 2133, 2130,
+
+     2131, 2115, 2124, 2166, 2117, 2116, 2111, 2110, 2161, 2105,
+      574, 2124, 2098, 2105, 2110, 2120, 2154, 2158, 2490, 2103,
+     2099, 2097, 2106, 2105, 2099, 2106, 2090, 2090, 2100, 2088,
+     2102, 2102, 2090, 2086, 2084, 2490, 2141, 2490, 2083, 2094,
+     2133, 2078, 2077, 2082, 2091, 2085, 2079, 2088, 2130, 2124,
+     2086, 2070, 2065, 2085, 2060, 2066,  592, 2080, 2073, 2077,
+     2060, 2118, 2059, 2059, 2110, 2055, 2056, 2055, 2053, 2490,
+     2067, 2104, 2490, 2055, 2053, 2490, 2064, 2100, 2099, 2059,
+     2043, 2060, 2100, 2490, 2490, 2490,  643,  645,  696, 2490,
+     2051, 2050,  626, 2057, 2037, 2047, 2089, 2034, 2087, 2032,
+
+     2042, 2084, 2029, 2036, 2029, 2041, 2023, 2023, 2038, 2037,
+      645, 2036, 2035, 2035, 2017, 2022, 2063, 2030, 2027, 2021,
+     2066, 2010, 2026, 2025, 2490, 2010, 2007, 2065, 2020, 2012,
+     2018, 2009, 2017, 2002, 2018, 2000, 2012, 2004,  622, 1995,
+     1994, 1988, 1993, 2008, 2005, 2006, 1985, 1995, 2001, 2044,
+     1999, 1991, 1982, 2490, 1983, 1985, 1994, 1986, 1991, 2030,
+     2029, 1980,   16, 1989, 2026, 1971, 2024, 1971, 1974, 1967,
+     2490, 1981, 1960, 1964, 1978, 1973, 1969, 2014, 1966, 1973,
+     2011, 2490, 1956, 1970, 1969, 1972, 1953, 2005, 2004, 1951,
+     2002, 1962, 1946, 1999, 1998, 2490, 1943, 1957, 1956,  687,
+
+     1957, 1956, 1953, 1991, 1955, 1950, 1933, 1938, 1940, 1931,
+     2490, 1945, 1935, 2490,  668,  609, 1929, 1927, 1930,  207,
+      215,  287,  297,  346,  420,  488,  662,  527,  625,  663,
+      681,  683,  655,  656,  667,  678,  664,  667,  678,  678,
+      662,  719,  672,  682,  686,  724,  687,  680,  684,  681,
+      683,  730,  736,  694,  695, 2490,  698,  694,  685,  700,
+      705,  702,  705,  704,  692,  706,  704,  712,  748,  710,
+      755,  756,  706,  698,  708,  755,  713,  763, 2490,  764,
+      717,  719,  715,  709,  712,  770,  766,  729,  718,  731,
+     2490,  721,  732,  721,  734,  724,  737,  781,  782,  725,
+
+      736,  721,  744,  735,  724,  730,  785,  749,  733,  745,
+      789,  790,  737,  792,  756,  751,  756,  754,  798,  740,
+      752,  755,  759,  751,  748, 2490,  812,  771,  772,  760,
+      763,  766,  777,  762,  769,  775,  776,  768,  782,  822,
+      798,  785,  790,  787,  769,  776,  790,  835,  792,  789,
+      790,  788,  797, 2490,  793,  788,  803,  800,  786,  788,
+      807,  804,  792,  799,  800,  809,  813,  849,  811,  802,
+      800,  799,  810,  806,  862,  809,  820,  805,  806,  812,
+      828,  818, 2490,  828,  828,  821,  832,  830,  875,  817,
+      819,  834,  821,  820,  882,  839,  825,  831,  829, 2490,
+
+     2490,  839,  844,  849,  837,  847,  849, 2490, 2490,  850,
+      837,  855,  842,  836, 2490,  841,  859,  846,  896,  847,
+      899,  845,  849,  867,  908, 2490, 2490,  853,  857,  856,
+      853,  869,  914,  867,  857,  858,  854,  867,  878,  879,
+      874,  875,  877,  870,  872,  868,  874,  874,  876,  891,
+      874,  933,  890,  895,  872,  895,  881,  880, 2490,  887,
+      888,  937,  889,  902,  940,  898,  888,  903,  897,  905,
+      892,  924,  932,  901,  896,  951,  952,  914,  954, 2490,
+      960,  903,  919,  923,  964,  914,  913,  908,  909,  921,
+      916,  912,  915,  916,  926,  935,  972,  919,  938,  930,
+
+      925,  983,  940,  941,  932, 2490,  946,  935,  938,  946,
+      948,  933,  949,  943,  990,  956,  940,  941, 2490,  957,
+      960,  943, 1002,  945,  964, 2490,  963,  966,  952,  947,
+      965, 1005,  963,  959,  956, 1009, 1010,  972,  958,  976,
+      975,  976,  962,  977,  969,  976,  966,  984,  983,  970,
+      987, 2490,  979,  985,  988, 1033,  980, 2490,  983,  988,
+     1033,  984,  996,  990,  991,  989,  991, 1001, 1046,  990,
+      991,  991, 1050,  994, 1006,  999, 2490,  995, 1003, 1001,
+     1052,  994, 1015, 1002, 1003, 1004, 1010, 1018, 1009, 1014,
+     1024, 1025, 1026, 1031, 1072, 1044, 1049, 1031, 1028, 1024,
+
+     1038, 1021, 1021, 2490, 1022, 1082, 1025, 2490, 1036, 1026,
+     1046, 1045, 1036, 1047, 1090, 1051, 1044, 1048, 1052, 1035,
+     1052, 1043, 1098, 1045, 2490, 1095, 1044, 1047, 1065, 1047,
+     1048, 1048, 1069, 1066, 1071, 1072, 1058, 1066, 1075, 1055,
+     1070, 1077, 1119, 2490, 1120, 1121, 1063, 1073, 1083, 1067,
+     1087, 1075, 1071, 1078, 1087, 1075, 1082, 1083, 1095, 1136,
+     1083, 1081, 1083, 1100, 1141, 1091, 1090, 1096, 1094, 1092,
+     1087, 1148, 1099, 1150, 1146, 1152, 2490, 1093, 1110, 1103,
+     1094, 1113, 1101, 1111, 1112, 1108, 1121, 1121, 2490, 1105,
+     1102, 1108, 2490, 1109, 1169, 1128, 1109, 1128, 1129, 1131,
+
+     1170, 1123, 1177, 1178, 1131, 1129, 1127, 1138, 1137, 1121,
+     1126, 1132, 1145, 2490, 1167, 1158, 1190, 1130, 1152, 1147,
+     1147, 1151, 1196, 2490, 1139, 1139, 1142, 1159, 1154, 1158,
+     1153, 2490, 1145, 1162, 1142, 1163, 1153, 1204, 1157, 2490,
+     1171, 1171, 1209, 1156, 1165, 1213, 1171, 1176, 1162, 1222,
+     1165, 1176, 1168, 1174, 1170, 1188, 1189, 1190, 2490, 2490,
+     1189, 2490, 1174, 1185, 1176, 1195, 1188, 1186, 1179, 1191,
+     1235, 1199, 1188, 1195, 1196, 1202, 2490, 1195, 1247, 1188,
+     1249, 2490, 1250, 1192, 1198, 1205, 1249, 1211, 2490, 1212,
+     2490, 1199, 2490, 1199, 1202, 1216, 1221, 1204, 1263, 1220,
+
+     1221, 1261, 1213, 1218, 1269, 1265, 1218, 1272, 2490, 1223,
+     1220, 1275, 1276, 1233, 1234, 1236, 2490, 2490, 1228, 1276,
+     1225, 1241, 1284, 1226, 1238, 1227, 1244, 1259, 1290, 2490,
+     1247, 1240, 1249, 1240, 1251, 2490, 1296, 1233, 1244, 1259,
+     1295, 1247, 1258, 1259, 1260, 1257, 1301, 1264, 1254, 1264,
+     1270, 1257, 1253, 1313, 1309, 1267, 1311, 1318, 1276, 2490,
+     1277, 1270, 1279, 1280, 1277, 1267, 1270, 1270, 1275, 1330,
+     1277, 1332, 1275, 1280, 1335, 1331, 1272, 1287, 1280, 1284,
+     1297, 1298, 1296, 1345, 2490, 1299, 2490, 2490, 1304, 1296,
+     1306, 1291, 1347, 1294, 1294, 1355, 1356, 1300, 1310, 1359,
+
+     2490, 1307, 1308, 1310, 1363, 1304, 1307, 2490, 1325, 1326,
+     2490, 1326, 1314, 2490, 2490, 1327, 1310, 1330, 1331, 1318,
+     1377, 1327, 2490, 1379, 1328, 1322, 1382, 1362, 2490, 1384,
+     1341, 1386, 1337, 1384, 2490, 1332, 1391, 1341, 1335, 1332,
+     1335, 1337, 1354, 1393, 1346, 1358, 1361, 1349, 1352, 1345,
+     1352, 1343, 2490, 1351, 1366, 1351, 2490, 1353, 1354, 1369,
+     1369, 1372, 1372, 1369, 1413, 1375, 1367, 2490, 1368, 2490,
+     1378, 1370, 2490, 1376, 1381, 1382, 1379, 1423, 1371, 1386,
+     1387, 1379, 2490, 1376, 1377, 1377, 1383, 1382, 1380, 1434,
+     1395, 2490, 2490, 1436, 1383, 2490, 1384, 1385, 1391, 2490,
+
+     1400, 1394, 1449, 1396, 1389, 1401, 1396, 1406, 1417, 1410,
+     1416, 1406, 1413, 2490, 1422, 2490, 1419, 1464, 2490, 1417,
+     1440, 2490, 1467, 2490, 1425, 1410, 1470, 2490, 1471, 1428,
+     1433, 1415, 1475, 1471, 1435, 1432, 1428, 1421, 1476, 1434,
+     1435, 1425, 1430, 1442, 1487, 1442, 1490, 1486, 1449, 1446,
+     1490, 1438, 1443, 1441, 1500, 1456, 1444, 1503, 1499, 1462,
+     1506, 1467, 1456, 1450, 1510, 1452, 1453, 1467, 1470, 1470,
+     1516, 1458, 1475, 1471, 1469, 1476, 1460, 1518, 1519, 1520,
+     1483, 1476, 1475, 1475, 1470, 1488, 2490, 1479, 1485, 1490,
+     1477, 1478, 1477, 1479, 1534, 1480, 1476, 1494, 1543, 2490,
+
+     1501, 1514, 2490, 1546, 1499, 2490, 2490, 1490, 1501, 1550,
+     2490, 1496, 1501, 1499, 1549, 1507, 1512, 1500, 1517, 1506,
+     1504, 1518, 1505, 2490, 1507, 2490, 1510, 1561, 1504, 1509,
+     1569, 1517, 1527, 1528, 2490, 1574, 1527, 1571, 2490, 1522,
+     1578, 2490, 1521, 1536, 1524, 2490, 1534, 1535, 1584, 1542,
+     1546, 2490, 1582, 1548, 1524, 1542, 1543, 1552, 1534, 1541,
+     1553, 1552, 1543, 1593, 1545, 1541, 1601, 1543, 1544, 1604,
+     1600, 1606, 1556, 1608, 1561, 1551, 1567, 1560, 2490, 1613,
+     1614, 2490, 1563, 1616, 1558, 2490, 1561, 1571, 1615, 1563,
+     1578, 1565, 1580, 1566, 1573, 1573, 1628, 1585, 1586, 1574,
+
+     1573, 1633, 1586, 2490, 1630, 1581, 1578, 2490, 1592, 1579,
+     1600, 2490, 1597, 1642, 1595, 1592, 1593, 2490, 1646, 1605,
+     1588, 1590, 1606, 1599, 1589, 1605, 1606, 1615, 1605, 1657,
+     1617, 1601, 1610, 1656, 2490, 1614, 1663, 2490, 1612, 2490,
+     1606, 2490, 1613, 1667, 1668, 1665, 2490, 2490, 1627, 2490,
+     1667, 1629, 1630, 1615, 1616, 1624, 1678, 1626, 1675, 1676,
+     1631, 2490, 1626, 1644, 1631, 1638, 2490, 1635, 1640, 1638,
+     1690, 1691, 1639, 1636, 1636, 2490, 1651, 1652, 1653, 2490,
+     1654, 1644, 1656, 1701, 1654, 1703, 1645, 1653, 1654, 1667,
+     2490, 1668, 1649, 1650, 1657, 1659, 2490, 1673, 1670, 1710,
+
+     1671, 2490, 2490, 1675, 1660, 1660, 1675, 1668, 1667, 1678,
+     1665, 2490, 1681, 1669, 1672, 1728, 1668, 1687, 1689, 1680,
+     1689, 1691, 1695, 2490, 2490, 1688, 1679, 1738, 1681, 1740,
+     1741, 1742, 1700, 1744, 2490, 1686, 2490, 1741, 1703, 1704,
+     1691, 1699, 1710, 1697, 1708, 1694, 1692, 1700, 1699, 1704,
+     1696, 1761, 1714, 1715, 1705, 1722, 1721, 1762, 1706, 1725,
+     1726, 2490, 1731, 1724, 1729, 1730, 1775, 1732, 1735, 1722,
+     1731, 2490, 1780, 2490, 2490, 2490, 1741, 2490, 1782, 1724,
+     1784, 1785, 1728, 1787, 1735, 1784, 1785, 1747, 1787, 1733,
+     1737, 1755, 1796, 1755, 2490, 1746, 1736, 1795, 1761, 1754,
+
+     1750, 1804, 1747, 1749, 1748, 1755, 1751, 1753, 2490, 1758,
+     1768, 1753, 1761, 2490, 1756, 2490, 1768, 2490, 2490, 1773,
+     2490, 1774, 1774, 1765, 1821, 1765, 1775, 1760, 1773, 2490,
+     1775, 1783, 1828, 1769, 1771, 1768, 1792, 2490, 1779, 1786,
+     1787, 1790, 1779, 1833, 1780, 1788, 1797, 1796, 1799, 1792,
+     1787, 1787, 1799, 1794, 2490, 1805, 1793, 1846, 1797, 1809,
+     1854, 2490, 1800, 1812, 1857, 1806, 1808, 1806, 1807, 1862,
+     1815, 1802, 1817, 1822, 1867, 1868, 1869, 1826, 1871, 1872,
+     1816, 1820, 1816, 1832, 1815, 1827, 1821, 2490, 1837, 1881,
+     2490, 1838, 1823, 1841, 1832, 2490, 1833, 1847, 1843, 1836,
+
+     2490, 2490, 2490, 1890, 2490, 2490, 1833, 1841, 1836, 1889,
+     1855, 1852, 1897, 1858, 2490, 1899, 1841, 1901, 1844, 1857,
+     1856, 1857, 1847, 2490, 1848, 1908, 1861, 1870, 1863, 1907,
+     2490, 1854, 2490, 1866, 2490, 1910, 1916, 1858, 1874, 1919,
+     1920, 2490, 1877, 1871, 1864, 1884, 1881, 1873, 1877, 2490,
+     1924, 1873, 2490, 2490, 1873, 1881, 1928, 1888, 1881, 1936,
+     1884, 1884, 1880, 1882, 1941, 1942, 1884, 1900, 1885, 2490,
+     1946, 1893, 1900, 1949, 2490, 2490, 1902, 1951, 1899, 2490,
+     1903, 1902, 2490, 1903, 2490, 1897, 1897, 1914, 1915, 1960,
+     1906, 1962, 1963, 2490, 1964, 2490, 2490, 2490, 2490, 1970,
+
+     1973, 1976, 1977, 1979, 1982, 1985, 1988
     } ;
 
-static const flex_int16_t yy_def[2069] =
+static const flex_int16_t yy_def[2108] =
     {   0,
-     2061, 2061, 2062, 2062, 2061, 2061, 2061, 2061, 2061, 2061,
-     2060, 2060, 2060, 2060, 2060, 2063, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2064,
-     2060, 2060, 2060, 2065,   15, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2066,   45,   45,   45,   45,
+     2100, 2100, 2101, 2101, 2100, 2100, 2100, 2100, 2100, 2100,
+     2099, 2099, 2099, 2099, 2099, 2102, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2103,
+     2099, 2099, 2099, 2104,   15, 2099,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2105,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2063, 2060, 2060,
-     2060, 2060, 2060, 2060, 2067, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2064, 2060, 2065, 2060,
+       45,   45,   45,   45,   45,   45,   45,   45, 2102, 2099,
+     2099, 2099, 2099, 2099, 2099, 2106, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2103, 2099, 2104,
 
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2068,   45, 2066,   45,   45,   45,   45,   45,   45,
+     2099, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2107,   45, 2105,   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,   45,   45,
-       45,   45,   45, 2067, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2106, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099,   45,   45,   45,   45,   45,
 
-       45,   45, 2068, 2060, 2060,  114,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2107, 2099, 2099,  115,   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, 2060,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2099,   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, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060,   45,   45,   45,   45,   45,   45,
-     2060,   45, 2060,   45,  114, 2060,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2099, 2099, 2099, 2099, 2099, 2099, 2099,   45,
+       45,   45,   45,   45,   45, 2099,   45, 2099,   45,  115,
+     2099,   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, 2060,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 2060,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45, 2060, 2060, 2060,
-       45,   45,   45,   45,   45, 2060,   45, 2060,   45,  114,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45, 2060,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45,   45, 2099, 2099, 2099,   45,   45,   45,
+       45,   45, 2099,   45, 2099,   45,  115,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
+       45,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2060,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2099,   45, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45, 2060,   45,   45, 2060,   45,   45, 2060,
-       45,   45,   45, 2060, 2060, 2060,   45,   45,   45, 2060,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
+       45,   45, 2099,   45,   45, 2099,   45,   45,   45, 2099,
+       45,   45,   45, 2099, 2099, 2099,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2060,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2099,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
 
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2099,   45,   45, 2099,   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, 2060,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45,   45,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2099,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   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, 2060,   45,   45,
+       45,   45,   45,   45,   45, 2099,   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, 2099,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2060, 2060,   45,   45,   45,   45,   45,
-       45, 2060, 2060,   45,   45,   45,   45,   45, 2060,   45,
+       45,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2060,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2099,   45,   45,   45,   45,   45,   45, 2099, 2099,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2099, 2099,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2060,
-
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45, 2060,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2099,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45, 2060,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 2060,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45, 2060,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2060,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2060,   45,
+       45,   45,   45,   45,   45,   45, 2099,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2060, 2060,   45, 2060,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45, 2060,   45,   45,   45,
-       45,   45,   45, 2060,   45, 2060,   45, 2060,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45,   45,   45,   45,
-     2060, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45, 2060,   45,   45,   45,   45,   45, 2060,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099, 2099,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2099,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45, 2099,   45,
+     2099,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45,   45,   45,   45, 2099, 2099,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45, 2060, 2060,
+       45,   45,   45,   45, 2099,   45, 2099, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45, 2060,   45,
-       45, 2060,   45,   45, 2060, 2060,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45, 2060,   45,   45,
 
-       45,   45,   45, 2060,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45, 2060,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45, 2060,   45,   45,   45, 2060,   45,   45,
+     2099,   45,   45,   45,   45,   45,   45, 2099,   45,   45,
+     2099,   45,   45, 2099, 2099,   45,   45,   45,   45,   45,
+       45,   45, 2099,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45, 2060,   45, 2060,   45,   45, 2060,   45, 2060,
-       45,   45,   45, 2060,   45,   45,   45,   45,   45,   45,
+       45,   45, 2099,   45,   45,   45, 2099,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2099,   45, 2099,
+       45,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2099,   45,   45,   45,   45,   45,   45,   45,
+       45, 2099, 2099,   45,   45, 2099,   45,   45,   45, 2099,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45, 2099,   45,   45, 2099,   45,
+       45, 2099,   45, 2099,   45,   45,   45, 2099,   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, 2060,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45,   45, 2060,
-     2060,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45, 2060,
-       45,   45,   45,   45,   45,   45,   45,   45, 2060,   45,
-
-       45,   45, 2060,   45,   45, 2060,   45,   45,   45, 2060,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2099,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
+
+       45,   45, 2099,   45,   45, 2099, 2099,   45,   45,   45,
+     2099,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45, 2099,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45, 2099,   45,
+       45, 2099,   45,   45,   45, 2099,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2060,   45,   45, 2060,   45,   45,   45, 2060,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45, 2099,   45,   45,   45, 2099,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2060,   45,   45,   45,
-     2060,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45,   45,
-
-     2060,   45, 2060,   45, 2060,   45,   45,   45, 2060, 2060,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2060,   45,   45,   45,   45, 2060,   45,
-       45,   45,   45,   45,   45,   45,   45, 2060,   45,   45,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45,   45, 2060,   45,
-       45,   45,   45, 2060,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45, 2060,   45,   45,
 
+       45,   45,   45, 2099,   45,   45,   45, 2099,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45, 2099,   45, 2099,
+       45, 2099,   45,   45,   45,   45, 2099, 2099,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2060,   45, 2060, 2060, 2060,   45, 2060,   45,
+       45, 2099,   45,   45,   45,   45, 2099,   45,   45,   45,
+       45,   45,   45,   45,   45, 2099,   45,   45,   45, 2099,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2060,
-       45,   45,   45,   45, 2060,   45, 2060,   45, 2060, 2060,
-       45, 2060,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45,   45,   45,   45, 2060,   45,
+     2099,   45,   45,   45,   45,   45, 2099,   45,   45,   45,
 
+       45, 2099, 2099,   45,   45,   45,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099, 2099,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45, 2099,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45, 2060,   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, 2060,   45,
-       45, 2060,   45,   45,   45,   45, 2060,   45,   45,   45,
-       45, 2060, 2060, 2060,   45, 2060, 2060,   45,   45,   45,
-       45,   45,   45,   45,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45,   45,   45,   45,   45,
-       45, 2060,   45, 2060,   45, 2060,   45,   45,   45,   45,
-
-       45,   45, 2060,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45, 2060, 2060,   45,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2099,   45, 2099, 2099, 2099,   45, 2099,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45, 2099,   45,
+       45,   45,   45, 2099,   45, 2099,   45, 2099, 2099,   45,
+     2099,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
+       45,   45,   45,   45,   45,   45,   45, 2099,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2060,   45,   45,   45,   45, 2060, 2060,   45,   45,   45,
-     2060,   45,   45, 2060,   45, 2060,   45,   45,   45,   45,
-       45,   45,   45,   45, 2060,   45, 2060, 2060, 2060,    0,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
+       45, 2099,   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, 2099,   45,   45,
+     2099,   45,   45,   45,   45, 2099,   45,   45,   45,   45,
+
+     2099, 2099, 2099,   45, 2099, 2099,   45,   45,   45,   45,
+       45,   45,   45,   45, 2099,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45,   45,   45,   45,   45,   45,
+     2099,   45, 2099,   45, 2099,   45,   45,   45,   45,   45,
+       45, 2099,   45,   45,   45,   45,   45,   45,   45, 2099,
+       45,   45, 2099, 2099,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2099,
+       45,   45,   45,   45, 2099, 2099,   45,   45,   45, 2099,
+       45,   45, 2099,   45, 2099,   45,   45,   45,   45,   45,
+       45,   45,   45, 2099,   45, 2099, 2099, 2099,    0, 2099,
+
+     2099, 2099, 2099, 2099, 2099, 2099, 2099
     } ;
 
-static const flex_int16_t yy_nxt[2522] =
+static const flex_int16_t yy_nxt[2564] =
     {   0,
-     2060,   13,   14,   13, 2060,   15,   16, 2060,   17,   18,
+     2099,   13,   14,   13, 2099,   15,   16, 2099,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
-       84,  778,   37,   14,   37,   85,   25,   26,   38,  100,
-      843,   27,   37,   14,   37,   42,   28,   42,   38,   90,
-       91,   29,  197,   30,   13,   14,   13,   89,   90,   25,
-       31,   91,   13,   14,   13,   13,   14,   13,   32,   40,
-      779,   13,   14,   13,   33,   40,  101,   90,   91,  197,
-       89,   34,   35,   13,   14,   13,   93,   15,   16,   94,
+       85,  791,   37,   14,   37,   86,   25,   26,   38,  101,
+     2099,   27,   37,   14,   37,   42,   28,   42,   38,   91,
+       92,   29,  200,   30,   13,   14,   13,   90,   91,   25,
+       31,   92,   13,   14,   13,   13,   14,   13,   32,   40,
+      792,   13,   14,   13,   33,   40,  102,   91,   92,  200,
+       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,   89,   39,  103,   25,   26,
+       23,   24,   13,   14,   13,   90,   39,  104,   25,   26,
 
-       13,   14,   13,   27,   39,   42,  105,   42,   28,   42,
-      106,   42,   41,   29,  107,   30,  110,  111,   92,  138,
-       41,   25,   31,  103,  225,  226,   87,  139,   87,  105,
-       32,   88,   88,   88,   88,   88,   33,  107,  106,  110,
-      216,  111,  217,   34,   35,   44,   44,   44,   45,   45,
+       13,   14,   13,   27,   39,   42,  106,   42,   28,   42,
+      107,   42,   41,   29,  108,   30,  111,  112,   93,  139,
+       41,   25,   31,  104,  228,  229,   88,  140,   88,  106,
+       32,   89,   89,   89,   89,   89,   33,  108,  107,  111,
+      219,  112,  220,   34,   35,   44,   44,   44,   45,   45,
        46,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   47,   45,   45,   45,   45,   45,   48,   45,   45,
        49,   45,   50,   45,   51,   45,   52,   45,   45,   45,
@@ -1461,281 +1476,285 @@ static const flex_int16_t yy_nxt[2522] =
        57,   58,   59,   60,   61,   62,   63,   64,   65,   51,
 
        66,   67,   68,   69,   70,   71,   72,   73,   74,   75,
-       76,   77,   55,   45,   45,   45,   45,   45,   79,  247,
-       80,   80,   80,   80,   80,   79,  105,   82,   82,   82,
-       82,   82,  248,   81,   83,   83,   83,   83,   83,   79,
-       81,   82,   82,   82,   82,   82,  136,   81,  108,  105,
-      103,  119,  844,  137,   81,  120,   81,  165,  109,  121,
-      135,  166,  122,   81,  219,  123,  232,  845,  233,  124,
-       81,  108,  235,  220,  221,  187,  115,   81,   45,  185,
-      140,  131,  116,  132,   45,  117,  109,   45,  236,   45,
-      141,   45,  142,   45,  133,  113,  144,  145,   45,   45,
-
-      146,   45,   45,  187,  134,  185,  147,   45,   45,   45,
+       76,   77,   78,   45,   45,   45,   45,   45,   80,  250,
+       81,   81,   81,   81,   81,   80,  106,   83,   83,   83,
+       83,   83,  251,   82,   84,   84,   84,   84,   84,   80,
+       82,   83,   83,   83,   83,   83,  137,   82,  109,  106,
+      104,  120,  845,  138,   82,  121,   82,  166,  110,  122,
+      136,  167,  123,   82,  222,  124,  235,  846,  236,  125,
+       82,  109,  238,  223,  224,  190,  116,   82,   45,  188,
+      141,  132,  117,  133,   45,  118,  110,   45,  239,   45,
+      142,   45,  143,   45,  134,  114,  145,  146,   45,   45,
+
+      147,   45,   45,  190,  135,  188,  148,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      125,  161,   45,  126,  127,  162,   45,  128,  129,  148,
-       45,  107,  252,  149,  199,  163,  253,  150,   45,  186,
-      130,  707,   45,  110,   45,  114,  262,  156,  708,  151,
-      153,  185,  154,  152,  155,  157,  187,  158,  174,  175,
-      167,  199,  159,  160,  168,  186,  180,  169,  108,   83,
-       83,   83,   83,   83,  170,  171,  181,  188,  109,  172,
-      173,  182,   81,   79,  190,   80,   80,   80,   80,   80,
-
-      275,  108,  263,  176,  276,   87,  177,   87,   81,  100,
-       88,   88,   88,   88,   88,   81,  178,   83,   83,   83,
-       83,   83,   79,  179,   82,   82,   82,   82,   82,  186,
-       81,   81,   88,   88,   88,   88,   88,   81,   88,   88,
-       88,   88,   88,   99,  194,  196,  101,  198,  200,  212,
-       99,  201,  267,   81,  202,  189,  239,  194,  213,  240,
-       81,  198,  214,  241,  287,  288,  201,  268,  269,  270,
-      200,  196,  194,  295,  207,  198,  200,  202,  201,  272,
-       99,  308,  273,  274,   99,  208,  289,  296,   99,  198,
-      290,  260,  309,  304,  291,  846,   99,  310,  302,  308,
-
-       99,  318,   99,   99,  205,  278,  309,  310,  316,  308,
-      319,  320,  206,  206,  206,  206,  206,  424,  309,  425,
-      310,  206,  206,  206,  206,  206,  206,  311,  375,  318,
-      313,  316,  312,  324,  320,  339,  322,  319,  340,  435,
-      279,  280,  281,  316,  206,  206,  206,  206,  206,  206,
-      366,  282,  389,  283,  408,  284,  285,  409,  286,  322,
-      324,  325,  325,  325,  325,  325,  327,  367,  341,  394,
-      325,  325,  325,  325,  325,  325,  342,  322,  438,  395,
-      438,  376,  343,  443,  377,  445,  529,  447,  390,  441,
-      847,  436,  443,  325,  325,  325,  325,  325,  325,  442,
-
-      322,  438,  391,  439,  473,  539,  488,  573,  445,  540,
-      474,  489,  443,  513,  431,  447,  450,  450,  450,  450,
-      450,  451,  848,  514,  849,  450,  450,  450,  450,  450,
-      450,  503,  504,  549,  567,  573,  505,  550,  577,  568,
-      578,  679,  615,  850,  530,  573,  596,  616,  450,  450,
-      450,  450,  450,  450,  597,  703,  598,  599,  600,  490,
-      601,  604,  702,  726,  491,  577,  727,  578,   45,   45,
-       45,   45,   45,  579,  605,  636,  606,   45,   45,   45,
-       45,   45,   45,  703,  812,  637,  701,  754,  755,  702,
-      824,  704,  825,  680,  851,  813,  840,  841,  852,  842,
-
-       45,   45,   45,   45,   45,   45,  836,  853,  854,  855,
-      856,  857,  837,  858,  859,  825,  860,  861,  824,  862,
-      865,  866,  867,  863,  868,  869,  870,  864,  871,  872,
-      873,  874,  875,  876,  877,  878,  879,  880,  881,  882,
-      883,  884,  885,  886,  887,  888,  890,  891,  889,  892,
-      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
-      903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
-      913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
-      923,  924,  925,  926,  927,  929,  930,  931,  934,  935,
-      936,  928,  939,  937,  932,  940,  941,  942,  933,  938,
-
-      943,  944,  945,  946,  947,  948,  949,  950,  951,  952,
-      953,  954,  955,  956,  957,  958,  959,  960,  961,  962,
-      963,  964,  965,  966,  967,  968,  969,  970,  971,  972,
-      973,  974,  975,  976,  977,  978,  979,  980,  981,  954,
-      982,  983,  984,  985,  986,  987,  988,  989,  990,  991,
-      992,  993,  994,  995,  996,  997,  998,  999, 1000, 1002,
-     1003, 1004, 1005, 1001, 1006, 1007, 1008, 1009, 1010, 1011,
-     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
-     1022, 1023, 1024, 1026, 1027, 1028, 1025, 1029, 1030, 1031,
-     1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041,
-
-     1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
-     1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061,
-     1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071,
-     1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
-     1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
-     1092, 1093, 1094, 1095, 1096, 1097, 1075, 1098, 1099, 1074,
-     1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
-     1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
-     1120, 1121, 1122, 1124, 1125, 1126, 1127, 1128, 1129, 1130,
-     1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140,
-
-     1141, 1142, 1143, 1144, 1145, 1146, 1147, 1149, 1150, 1151,
-     1152, 1153, 1154, 1155, 1156, 1157, 1158, 1148, 1159, 1160,
-     1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
-     1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180,
-     1123, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
-     1190, 1192, 1191, 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, 1190, 1191,
-     1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227,
-     1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1237, 1239,
-
-     1240, 1241, 1236, 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, 1267, 1268,
-     1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278,
-     1279, 1280, 1238, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
-     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, 1300, 1323, 1324, 1325, 1326,
-     1327, 1301, 1328, 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,
-     1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386,
-     1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,
-     1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1406, 1407,
-     1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417,
-     1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1397, 1426,
-     1427, 1428, 1376, 1429, 1430, 1431, 1432, 1433, 1434, 1435,
-
-     1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
-     1447, 1405, 1448, 1449, 1450, 1451, 1452, 1446, 1453, 1454,
-     1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464,
-     1465, 1466, 1467, 1468, 1470, 1471, 1474, 1472, 1469, 1473,
-     1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484,
-     1485, 1487, 1488, 1489, 1490, 1486, 1491, 1492, 1493, 1494,
-     1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504,
-     1505, 1506, 1507, 1508, 1487, 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, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543,
-     1544, 1545, 1546, 1547, 1548, 1552, 1549, 1553, 1554, 1550,
-     1555, 1556, 1551, 1557, 1558, 1559, 1560, 1561, 1562, 1563,
-     1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573,
-     1574, 1575, 1576, 1577, 1579, 1580, 1581, 1582, 1583, 1584,
-     1585, 1586, 1587, 1588, 1578, 1589, 1590, 1591, 1592, 1566,
-     1593, 1594, 1595, 1596, 1597, 1598, 1599, 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, 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, 1600, 1658, 1659, 1660, 1661, 1662,
-     1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1644, 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, 1735, 1736, 1737, 1738, 1739, 1740, 1741,
-     1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751,
-     1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1762,
-     1763, 1764, 1765, 1761, 1766, 1767, 1768, 1769, 1770, 1771,
-     1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781,
-     1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791,
-     1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801,
-     1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811,
-     1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821,
-     1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831,
-
-     1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841,
-     1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851,
-     1853, 1854, 1852, 1855, 1856, 1857, 1858, 1859, 1860, 1861,
-     1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871,
-     1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881,
-     1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891,
-     1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901,
-     1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911,
-     1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921,
-     1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931,
-
-     1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941,
-     1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951,
-     1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961,
-     1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,
-     1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981,
-     1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
-     1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-     2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021, 2020,
-     2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031,
-
-     2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041,
-     2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051,
-     2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059,   12,   12,
-       12,   36,   36,   36,   78,   97,   78,   99,   99,   99,
-      112,  112,  112,  184,  839,  184,  203,  203,  203,  838,
-      835,  834,  833,  832,  831,  830,  829,  828,  827,  826,
-      823,  822,  821,  820,  819,  818,  817,  816,  815,  814,
-      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,  777,  776,  775,  774,  773,  772,  771,  770,
-      769,  768,  767,  766,  765,  764,  763,  762,  761,  760,
-      759,  758,  757,  756,  753,  752,  751,  750,  749,  748,
-      747,  746,  745,  744,  743,  742,  741,  740,  739,  738,
-      737,  736,  735,  734,  733,  732,  731,  730,  729,  728,
-      725,  724,  723,  722,  721,  720,  719,  718,  717,  716,
-      715,  714,  713,  712,  711,  710,  709,  706,  705,  701,
-      700,  699,  698,  697,  696,  695,  694,  693,  692,  691,
-      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
-      678,  677,  676,  675,  674,  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,  647,  646,  645,  644,  643,  642,  641,  640,  639,
-      638,  635,  634,  633,  632,  631,  630,  629,  628,  627,
-      626,  625,  624,  623,  622,  621,  620,  619,  618,  617,
-      614,  613,  612,  611,  610,  609,  608,  607,  603,  602,
-      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  576,  575,  574,  572,
-      571,  570,  569,  566,  565,  564,  563,  562,  561,  560,
-      559,  558,  557,  556,  555,  554,  553,  552,  551,  548,
-
-      547,  546,  545,  544,  543,  542,  541,  538,  537,  536,
-      535,  534,  533,  532,  531,  528,  527,  526,  525,  524,
-      523,  522,  521,  520,  519,  518,  517,  516,  515,  512,
-      511,  510,  509,  508,  507,  506,  502,  501,  500,  499,
-      498,  497,  496,  495,  494,  493,  492,  487,  486,  485,
-      484,  483,  482,  481,  480,  479,  478,  477,  476,  475,
-      472,  471,  470,  469,  468,  467,  466,  465,  464,  463,
-      462,  461,  460,  459,  458,  457,  456,  455,  454,  453,
-      452,  449,  448,  446,  444,  440,  437,  434,  433,  432,
-      430,  429,  428,  427,  426,  423,  422,  421,  420,  419,
-
-      418,  417,  416,  415,  414,  413,  412,  411,  410,  407,
-      406,  405,  404,  403,  402,  401,  400,  399,  398,  397,
-      396,  393,  392,  388,  387,  386,  385,  384,  383,  382,
-      381,  380,  379,  378,  374,  373,  372,  371,  370,  369,
-      368,  365,  364,  363,  362,  361,  360,  359,  358,  357,
-      356,  355,  354,  353,  352,  351,  350,  349,  348,  347,
-      346,  345,  344,  338,  337,  336,  335,  334,  333,  332,
-      331,  330,  329,  328,  326,  204,  323,  321,  317,  315,
-      314,  307,  306,  305,  303,  301,  300,  299,  298,  297,
-      294,  293,  292,  277,  271,  266,  265,  264,  261,  259,
-
-      258,  257,  256,  255,  254,  251,  250,  249,  246,  245,
-      244,  243,  242,  238,  237,  234,  231,  230,  229,  228,
-      227,  224,  223,  222,  218,  215,  211,  210,  209,  204,
-      195,  193,  192,  191,  183,  164,  143,  118,  104,  102,
-       43,   98,   96,   95,   86,   43, 2060,   11, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060
+      126,  162,   45,  127,  128,  163,   45,  129,  130,  149,
+       45,  108,  255,  150,  101,  164,  256,  151,   45,  189,
+      131,  847,   45,  111,   45,  115,  202,  157,  112,  152,
+      154,  188,  155,  153,  156,  158,  848,  159,  175,  176,
+      168,  190,  160,  161,  169,  189,  182,  170,  109,  189,
+      197,  102,  112,  202,  171,  172,  183,  191,  110,  173,
+      174,  184,  186,  199,   84,   84,   84,   84,   84,  193,
+
+      399,  177,  849,  178,  201,  192,  179,   82,  197,   80,
+      400,   81,   81,   81,   81,   81,  180,  203,  265,  199,
+       88,  204,   88,  181,   82,   89,   89,   89,   89,   89,
+       82,   80,  201,   83,   83,   83,   83,   83,   84,   84,
+       84,   84,   84,  100,  205,  203,   82,   82,  204,  197,
+      100,   82,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,  215,  201,  266,  242,  210,  205,  243,   82,
+      270,  216,  244,  314,   82,  217,  850,  211,  275,  278,
+      100,  276,  277,  279,  100,  271,  272,  273,  100,  290,
+      291,  201,  298,  263,  315,  315,  100,  321,  851,  314,
+
+      100,  202,  100,  100,  208,  281,  299,  204,  203,  313,
+      313,  323,  209,  209,  209,  209,  209,  315,  318,  380,
+      321,  209,  209,  209,  209,  209,  209,  292,  303,  325,
+      324,  293,  854,  314,  308,  294,  306,  313,  316,  323,
+      282,  283,  284,  327,  209,  209,  209,  209,  209,  209,
+      329,  285,  325,  286,  346,  287,  288,  324,  289,  317,
+      321,  344,  347,  429,  345,  430,  327,  371,  348,  394,
+      413,  326,  381,  414,  441,  382,  434,  329,  330,  330,
+      330,  330,  330,  332,  372,  327,  445,  330,  330,  330,
+      330,  330,  330,  445,  448,  450,  450,  452,  495,  454,
+
+      480,  536,  690,  496,  449,  395,  481,  520,  327,  445,
+      330,  330,  330,  330,  330,  330,  446,  521,  543,  396,
+      452,  614,  437,  646,  450,  458,  442,  454,  457,  457,
+      457,  457,  457,  647,  615,  841,  616,  457,  457,  457,
+      457,  457,  457,  510,  511,  547,  557,  576,  512,  548,
+      558,  497,  577,  583,  691,  587,  498,  588,  841,  537,
+      457,  457,  457,  457,  457,  457,  606,  544,  625,  767,
+      768,  855,  583,  626,  607,  715,  608,  609,  610,  716,
+      611,  583,  587,  720,  588,   45,   45,   45,   45,   45,
+      721,  859,  826,  860,   45,   45,   45,   45,   45,   45,
+
+      589,  714,  715,  827,  840,  739,  717,  716,  740,  852,
+      856,  857,  861,  858,  862,  853,  863,   45,   45,   45,
+       45,   45,   45,  864,  865,  866,  867,  868,  869,  870,
+      871,  872,  840,  873,  874,  875,  876,  877,  878,  881,
+      882,  883,  879,  884,  885,  886,  880,  887,  888,  889,
+      890,  891,  892,  893,  894,  895,  896,  897,  898,  899,
+      900,  901,  902,  903,  904,  906,  907,  905,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
+      920,  921,  922,  923,  924,  925,  926,  927,  928,  929,
+      930,  931,  932,  933,  934,  935,  936,  937,  938,  939,
+
+      940,  941,  942,  943,  944,  946,  947,  948,  951,  952,
+      953,  945,  956,  954,  949,  957,  958,  959,  950,  955,
+      960,  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,  973, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+     1019, 1021, 1022, 1023, 1024, 1020, 1025, 1026, 1027, 1028,
+     1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+
+     1039, 1040, 1041, 1042, 1043, 1045, 1046, 1047, 1044, 1048,
+     1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+     1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+     1069, 1070, 1071, 1072, 1073, 1074, 1075, 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, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,
+     1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118,
+     1119, 1097, 1120, 1121, 1096, 1122, 1123, 1124, 1125, 1126,
+     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
+
+     1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1146, 1147,
+     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
+     1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167,
+     1168, 1169, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178,
+     1179, 1180, 1170, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
+     1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197,
+     1198, 1199, 1200, 1201, 1202, 1145, 1203, 1204, 1205, 1206,
+     1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217,
+     1216, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
+     1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
+
+     1237, 1238, 1239, 1240, 1241, 1242, 1215, 1216, 1243, 1244,
+     1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
+     1255, 1256, 1257, 1258, 1259, 1260, 1262, 1264, 1265, 1266,
+     1261, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
+     1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+     1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
+     1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
+     1263, 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, 1333, 1334,
+
+     1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344,
+     1345, 1346, 1347, 1348, 1349, 1350, 1328, 1351, 1352, 1353,
+     1354, 1355, 1329, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
+     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+     1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382,
+     1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+     1403, 1404, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413,
+     1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423,
+     1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433,
+
+     1434, 1435, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444,
+     1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454,
+     1455, 1456, 1428, 1457, 1405, 1458, 1459, 1460, 1461, 1462,
+     1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472,
+     1473, 1474, 1475, 1476, 1478, 1436, 1479, 1480, 1481, 1482,
+     1483, 1477, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491,
+     1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1502,
+     1503, 1506, 1504, 1501, 1505, 1507, 1508, 1509, 1510, 1511,
+     1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1521, 1522,
+     1523, 1524, 1520, 1525, 1526, 1527, 1528, 1529, 1530, 1531,
+
+     1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541,
+     1542, 1521, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550,
+     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560,
+     1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570,
+     1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
+     1581, 1582, 1586, 1583, 1587, 1588, 1584, 1589, 1590, 1585,
+     1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600,
+     1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610,
+     1611, 1612, 1613, 1615, 1616, 1617, 1618, 1619, 1620, 1621,
+     1622, 1623, 1624, 1614, 1625, 1626, 1627, 1628, 1602, 1629,
+
+     1630, 1631, 1632, 1633, 1634, 1635, 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, 1636, 1694, 1695, 1696, 1697, 1698, 1699,
+     1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1681, 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, 1735, 1736, 1737, 1738,
+     1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748,
+     1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
+     1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768,
+     1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
+     1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788,
+     1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798,
+     1800, 1801, 1802, 1803, 1799, 1804, 1805, 1806, 1807, 1808,
+     1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818,
+     1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828,
+
+     1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838,
+     1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848,
+     1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858,
+     1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868,
+     1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878,
+     1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888,
+     1889, 1890, 1892, 1893, 1891, 1894, 1895, 1896, 1897, 1898,
+     1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908,
+     1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918,
+     1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928,
+
+     1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938,
+     1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948,
+     1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958,
+     1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968,
+     1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978,
+     1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988,
+     1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+     1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+     2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
+     2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028,
+
+     2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038,
+     2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048,
+     2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058,
+     2060, 2059, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068,
+     2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078,
+     2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088,
+     2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098,
+       12,   12,   12,   36,   36,   36,   79,   98,   79,  100,
+      100,  100,  113,  113,  113,  187,  844,  187,  206,  206,
+      206,  843,  842,  839,  838,  837,  836,  835,  834,  833,
+
+      832,  831,  830,  829,  828,  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,  793,  790,  789,
+      788,  787,  786,  785,  784,  783,  782,  781,  780,  779,
+      778,  777,  776,  775,  774,  773,  772,  771,  770,  769,
+      766,  765,  764,  763,  762,  761,  760,  759,  758,  757,
+      756,  755,  754,  753,  752,  751,  750,  749,  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,  719,  718,  714,  713,  712,  711,  710,
+      709,  708,  707,  706,  705,  704,  703,  702,  701,  700,
+      699,  698,  697,  696,  695,  694,  693,  692,  689,  688,
+      687,  686,  685,  684,  683,  682,  681,  680,  679,  678,
+      677,  676,  675,  674,  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,  624,
+      623,  622,  621,  620,  619,  618,  617,  613,  612,  605,
+
+      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      594,  593,  592,  591,  590,  586,  585,  584,  582,  581,
+      580,  579,  578,  575,  574,  573,  572,  571,  570,  569,
+      568,  567,  566,  565,  564,  563,  562,  561,  560,  559,
+      556,  555,  554,  553,  552,  551,  550,  549,  546,  545,
+      542,  541,  540,  539,  538,  535,  534,  533,  532,  531,
+      530,  529,  528,  527,  526,  525,  524,  523,  522,  519,
+      518,  517,  516,  515,  514,  513,  509,  508,  507,  506,
+      505,  504,  503,  502,  501,  500,  499,  494,  493,  492,
+      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
+
+      479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
+      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
+      459,  456,  455,  453,  451,  447,  444,  443,  440,  439,
+      438,  436,  435,  433,  432,  431,  428,  427,  426,  425,
+      424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
+      412,  411,  410,  409,  408,  407,  406,  405,  404,  403,
+      402,  401,  398,  397,  393,  392,  391,  390,  389,  388,
+      387,  386,  385,  384,  383,  379,  378,  377,  376,  375,
+      374,  373,  370,  369,  368,  367,  366,  365,  364,  363,
+      362,  361,  360,  359,  358,  357,  356,  355,  354,  353,
+
+      352,  351,  350,  349,  343,  342,  341,  340,  339,  338,
+      337,  336,  335,  334,  333,  331,  207,  328,  326,  322,
+      320,  319,  312,  311,  310,  309,  307,  305,  304,  302,
+      301,  300,  297,  296,  295,  280,  274,  269,  268,  267,
+      264,  262,  261,  260,  259,  258,  257,  254,  253,  252,
+      249,  248,  247,  246,  245,  241,  240,  237,  234,  233,
+      232,  231,  230,  227,  226,  225,  221,  218,  214,  213,
+      212,  207,  198,  196,  195,  194,  185,  165,  144,  119,
+      105,  103,   43,   99,   97,   96,   87,   43, 2099,   11,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099
     } ;
 
-static const flex_int16_t yy_chk[2522] =
+static const flex_int16_t yy_chk[2564] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-       21,  653,    3,    3,    3,   21,    1,    1,    3,   44,
-      718,    1,    4,    4,    4,   13,    1,   13,    4,   27,
-       28,    1,  106,    1,    5,    5,    5,   26,   32,    1,
+       21,  663,    3,    3,    3,   21,    1,    1,    3,   44,
+        0,    1,    4,    4,    4,   13,    1,   13,    4,   27,
+       28,    1,  107,    1,    5,    5,    5,   26,   32,    1,
         1,   33,    6,    6,    6,    7,    7,    7,    1,    7,
-      653,    8,    8,    8,    1,    8,   44,   27,   28,  106,
+      663,    8,    8,    8,    1,    8,   44,   27,   28,  107,
        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,   48,    2,    2,
 
        10,   10,   10,    2,    6,   37,   50,   37,    2,   42,
        51,   42,    9,    2,   52,    2,   54,   55,   31,   64,
-       10,    2,    2,   48,  127,  127,   25,   64,   25,   50,
+       10,    2,    2,   48,  128,  128,   25,   64,   25,   50,
         2,   25,   25,   25,   25,   25,    2,   52,   51,   54,
-      121,   55,  121,    2,    2,   15,   15,   15,   15,   15,
+      122,   55,  122,    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,
@@ -1743,261 +1762,265 @@ static const flex_int16_t yy_chk[2522] =
        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,   17,  144,
+       15,   15,   15,   15,   15,   15,   15,   15,   17,  145,
        17,   17,   17,   17,   17,   19,   62,   19,   19,   19,
-       19,   19,  144,   17,   20,   20,   20,   20,   20,   22,
+       19,   19,  145,   17,   20,   20,   20,   20,   20,   22,
        19,   22,   22,   22,   22,   22,   63,   20,   53,   62,
-       57,   59,  719,   63,   22,   59,   17,   73,   53,   59,
-       62,   73,   59,   19,  123,   59,  133,  720,  133,   59,
-       20,   53,  135,  123,  123,   91,   57,   22,   45,   89,
-       65,   61,   57,   61,   45,   57,   53,   45,  135,   45,
+       57,   59,  720,   63,   22,   59,   17,   73,   53,   59,
+       62,   73,   59,   19,  124,   59,  134,  721,  134,   59,
+       20,   53,  136,  124,  124,   92,   57,   22,   45,   90,
+       65,   61,   57,   61,   45,   57,   53,   45,  136,   45,
        65,   45,   65,   45,   61,   56,   67,   67,   45,   45,
 
-       67,   45,   56,   91,   61,   89,   67,   45,   45,   45,
+       67,   45,   56,   92,   61,   90,   67,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        60,   71,   56,   60,   60,   71,   56,   60,   60,   68,
-       56,   69,  148,   68,  108,   71,  148,   68,   56,   90,
-       60,  583,   56,   76,   56,   56,  157,   70,  583,   68,
-       69,   92,   69,   68,   69,   70,   94,   70,   75,   75,
-       74,  108,   70,   70,   74,   90,   76,   74,   75,   79,
-       79,   79,   79,   79,   74,   74,   76,   92,   75,   74,
-       74,   76,   79,   80,   94,   80,   80,   80,   80,   80,
-
-      164,   75,  157,   75,  164,   81,   75,   81,   80,   99,
-       81,   81,   81,   81,   81,   79,   75,   83,   83,   83,
-       83,   83,   82,   75,   82,   82,   82,   82,   82,   93,
-       83,   80,   87,   87,   87,   87,   87,   82,   88,   88,
-       88,   88,   88,  101,  103,  105,   99,  107,  109,  119,
-      101,  110,  161,   83,  111,   93,  138,  115,  119,  138,
-       82,  155,  119,  138,  167,  167,  180,  161,  161,  161,
-      178,  105,  103,  172,  115,  107,  109,  111,  110,  163,
-      101,  185,  163,  163,  101,  115,  168,  172,  101,  155,
-      168,  155,  186,  180,  168,  721,  101,  187,  178,  188,
-
-      101,  196,  101,  101,  114,  166,  189,  190,  194,  185,
-      197,  198,  114,  114,  114,  114,  114,  296,  186,  296,
-      187,  114,  114,  114,  114,  114,  114,  188,  253,  196,
-      190,  194,  189,  202,  198,  220,  200,  197,  220,  306,
-      166,  166,  166,  208,  114,  114,  114,  114,  114,  114,
-      245,  166,  265,  166,  281,  166,  166,  281,  166,  200,
-      202,  206,  206,  206,  206,  206,  208,  245,  221,  268,
-      206,  206,  206,  206,  206,  206,  221,  302,  308,  268,
-      311,  253,  221,  316,  253,  318,  399,  320,  265,  315,
-      722,  306,  327,  206,  206,  206,  206,  206,  206,  315,
-
-      302,  308,  265,  311,  349,  409,  363,  443,  318,  409,
-      349,  363,  316,  383,  302,  320,  325,  325,  325,  325,
-      325,  327,  723,  383,  724,  325,  325,  325,  325,  325,
-      325,  375,  375,  418,  436,  443,  375,  418,  449,  436,
-      449,  549,  483,  725,  399,  451,  470,  483,  325,  325,
-      325,  325,  325,  325,  470,  578,  470,  470,  470,  363,
-      470,  473,  577,  601,  363,  449,  601,  449,  450,  450,
-      450,  450,  450,  451,  473,  504,  473,  450,  450,  450,
-      450,  450,  450,  578,  689,  504,  579,  629,  629,  577,
-      702,  579,  703,  549,  726,  689,  717,  717,  727,  717,
-
-      450,  450,  450,  450,  450,  450,  714,  728,  729,  730,
-      731,  732,  714,  733,  734,  703,  735,  736,  702,  737,
-      738,  739,  740,  737,  741,  742,  744,  737,  745,  746,
-      747,  748,  749,  750,  751,  752,  753,  754,  755,  756,
-      757,  758,  759,  760,  761,  762,  763,  764,  762,  765,
-      767,  768,  769,  770,  771,  772,  773,  774,  775,  776,
-      777,  779,  780,  781,  782,  783,  784,  785,  786,  787,
-      788,  789,  790,  791,  792,  793,  794,  795,  796,  797,
-      798,  799,  800,  801,  802,  803,  804,  804,  805,  806,
-      807,  802,  809,  808,  804,  810,  811,  813,  804,  808,
-
-      814,  815,  816,  817,  818,  819,  820,  821,  822,  823,
-      824,  825,  826,  827,  828,  829,  830,  831,  832,  833,
-      834,  835,  836,  837,  839,  840,  841,  842,  843,  844,
-      845,  846,  847,  848,  849,  850,  851,  852,  853,  825,
-      854,  855,  856,  857,  858,  859,  860,  861,  862,  863,
-      864,  865,  866,  868,  869,  870,  871,  872,  873,  874,
-      875,  876,  877,  873,  878,  879,  880,  881,  882,  883,
-      886,  887,  888,  889,  890,  891,  894,  895,  896,  897,
-      898,  900,  901,  902,  903,  904,  901,  905,  906,  907,
-      908,  909,  912,  913,  914,  915,  916,  917,  918,  919,
+       56,   69,  149,   68,  100,   71,  149,   68,   56,   91,
+       60,  722,   56,   76,   56,   56,  109,   70,   78,   68,
+       69,   93,   69,   68,   69,   70,  723,   70,   75,   75,
+       74,   95,   70,   70,   74,   91,   76,   74,   75,   94,
+      104,  100,   78,  109,   74,   74,   76,   93,   75,   74,
+       74,   76,   78,  106,   80,   80,   80,   80,   80,   95,
+
+      271,   75,  724,   75,  108,   94,   75,   80,  104,   81,
+      271,   81,   81,   81,   81,   81,   75,  110,  158,  106,
+       82,  111,   82,   75,   81,   82,   82,   82,   82,   82,
+       80,   83,  108,   83,   83,   83,   83,   83,   84,   84,
+       84,   84,   84,  102,  112,  110,   83,   81,  111,  116,
+      102,   84,   88,   88,   88,   88,   88,   89,   89,   89,
+       89,   89,  120,  156,  158,  139,  116,  112,  139,   83,
+      162,  120,  139,  189,   84,  120,  725,  116,  164,  165,
+      102,  164,  164,  165,  102,  162,  162,  162,  102,  168,
+      168,  156,  173,  156,  190,  193,  102,  197,  726,  189,
+
+      102,  177,  102,  102,  115,  167,  173,  182,  180,  188,
+      191,  199,  115,  115,  115,  115,  115,  190,  193,  256,
+      197,  115,  115,  115,  115,  115,  115,  169,  177,  201,
+      200,  169,  728,  192,  182,  169,  180,  188,  191,  199,
+      167,  167,  167,  203,  115,  115,  115,  115,  115,  115,
+      205,  167,  201,  167,  224,  167,  167,  200,  167,  192,
+      211,  223,  224,  299,  223,  299,  203,  248,  224,  268,
+      284,  303,  256,  284,  310,  256,  303,  205,  209,  209,
+      209,  209,  209,  211,  248,  306,  313,  209,  209,  209,
+      209,  209,  209,  316,  320,  321,  332,  323,  368,  325,
+
+      354,  404,  557,  368,  320,  268,  354,  388,  306,  313,
+      209,  209,  209,  209,  209,  209,  316,  388,  411,  268,
+      323,  480,  306,  511,  321,  332,  310,  325,  330,  330,
+      330,  330,  330,  511,  480,  716,  480,  330,  330,  330,
+      330,  330,  330,  380,  380,  414,  423,  442,  380,  414,
+      423,  368,  442,  450,  557,  456,  368,  456,  716,  404,
+      330,  330,  330,  330,  330,  330,  477,  411,  490,  639,
+      639,  729,  458,  490,  477,  587,  477,  477,  477,  588,
+      477,  450,  456,  593,  456,  457,  457,  457,  457,  457,
+      593,  731,  700,  732,  457,  457,  457,  457,  457,  457,
+
+      458,  589,  587,  700,  715,  611,  589,  588,  611,  727,
+      730,  730,  733,  730,  734,  727,  735,  457,  457,  457,
+      457,  457,  457,  736,  737,  738,  739,  740,  741,  742,
+      743,  744,  715,  745,  746,  747,  748,  749,  750,  751,
+      752,  753,  750,  754,  755,  757,  750,  758,  759,  760,
+      761,  762,  763,  764,  765,  766,  767,  768,  769,  770,
+      771,  772,  773,  774,  775,  776,  777,  775,  778,  780,
+      781,  782,  783,  784,  785,  786,  787,  788,  789,  790,
+      792,  793,  794,  795,  796,  797,  798,  799,  800,  801,
+      802,  803,  804,  805,  806,  807,  808,  809,  810,  811,
+
+      812,  813,  814,  815,  816,  817,  818,  818,  819,  820,
+      821,  816,  823,  822,  818,  824,  825,  827,  818,  822,
+      828,  829,  830,  831,  832,  833,  834,  835,  836,  837,
+      838,  839,  840,  841,  842,  843,  844,  845,  846,  847,
+      848,  849,  850,  851,  852,  853,  855,  856,  857,  858,
+      859,  860,  861,  862,  863,  864,  865,  866,  867,  868,
+      869,  841,  870,  871,  872,  873,  874,  875,  876,  877,
+      878,  879,  880,  881,  882,  884,  885,  886,  887,  888,
+      889,  890,  891,  892,  893,  889,  894,  895,  896,  897,
+      898,  899,  902,  903,  904,  905,  906,  907,  910,  911,
+
+      912,  913,  914,  916,  917,  918,  919,  920,  917,  921,
+      922,  923,  924,  925,  928,  929,  930,  931,  932,  933,
+      934,  935,  936,  937,  938,  939,  940,  941,  942,  943,
+      944,  945,  946,  947,  948,  949,  950,  951,  952,  953,
+      954,  955,  956,  957,  958,  960,  961,  962,  963,  964,
+      965,  966,  967,  968,  969,  970,  971,  972,  973,  974,
+      975,  976,  977,  978,  979,  981,  982,  983,  984,  985,
+      986,  987,  988,  989,  990,  991,  992,  993,  994,  995,
+      996,  973,  997,  998,  972,  999, 1000, 1001, 1002, 1003,
+     1004, 1005, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014,
+
+     1015, 1016, 1017, 1018, 1020, 1021, 1022, 1023, 1024, 1025,
+     1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036,
+     1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046,
+     1047, 1048, 1049, 1050, 1051, 1053, 1054, 1055, 1056, 1057,
+     1059, 1060, 1048, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1078,
+     1079, 1080, 1081, 1082, 1083, 1023, 1084, 1085, 1086, 1087,
+     1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1098,
+     1097, 1099, 1100, 1101, 1102, 1103, 1105, 1106, 1107, 1109,
+     1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
 
-      920,  921,  922,  923,  924,  925,  926,  927,  928,  929,
-      930,  931,  932,  933,  934,  935,  936,  937,  938,  939,
-      940,  941,  943,  944,  945,  946,  947,  948,  949,  950,
-      951,  952,  953,  954,  955,  956,  957,  958,  959,  960,
-      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
-      972,  973,  974,  975,  976,  977,  954,  978,  979,  953,
-      980,  981,  982,  983,  984,  985,  986,  988,  989,  990,
-      991,  992,  993,  994,  995,  996,  997,  998,  999, 1001,
-     1002, 1003, 1004, 1005, 1006, 1008, 1009, 1010, 1011, 1012,
-     1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,
-
-     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
-     1034, 1035, 1036, 1037, 1039, 1040, 1041, 1029, 1042, 1043,
-     1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
-     1054, 1055, 1056, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
-     1004, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073,
-     1074, 1076, 1075, 1077, 1078, 1079, 1080, 1081, 1083, 1084,
-     1085, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,
-     1096, 1097, 1098, 1099, 1100, 1101, 1102, 1104, 1074, 1075,
-     1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
-     1115, 1116, 1117, 1118, 1119, 1120, 1121, 1123, 1124, 1125,
-
-     1126, 1127, 1123, 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, 1153, 1154,
-     1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165,
-     1167, 1168, 1124, 1169, 1171, 1172, 1173, 1174, 1175, 1176,
-     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
-     1187, 1188, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197,
-     1198, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1208, 1209,
-     1210, 1211, 1212, 1213, 1214, 1190, 1216, 1217, 1218, 1219,
-     1220, 1191, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
-
-     1229, 1230, 1231, 1232, 1233, 1236, 1238, 1239, 1240, 1241,
-     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
-     1253, 1254, 1255, 1256, 1258, 1259, 1260, 1261, 1262, 1263,
-     1265, 1267, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276,
-     1277, 1278, 1279, 1280, 1281, 1282, 1284, 1285, 1286, 1287,
-     1288, 1289, 1290, 1293, 1294, 1295, 1296, 1297, 1298, 1299,
-     1300, 1301, 1303, 1304, 1305, 1306, 1307, 1309, 1310, 1311,
-     1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321,
-     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1300, 1330,
-     1331, 1333, 1276, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
-
-     1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
-     1351, 1309, 1352, 1353, 1354, 1355, 1356, 1350, 1358, 1361,
-     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
-     1373, 1374, 1375, 1376, 1377, 1378, 1381, 1380, 1376, 1380,
-     1383, 1384, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1395,
-     1396, 1397, 1399, 1400, 1401, 1396, 1402, 1403, 1405, 1406,
-     1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416,
-     1417, 1418, 1419, 1420, 1397, 1421, 1423, 1424, 1425, 1427,
-     1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1438,
-     1440, 1441, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450,
-
-     1451, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1462,
-     1463, 1465, 1466, 1467, 1469, 1470, 1469, 1471, 1472, 1469,
-     1473, 1474, 1469, 1475, 1476, 1477, 1478, 1479, 1480, 1482,
-     1484, 1486, 1487, 1489, 1491, 1492, 1493, 1495, 1496, 1497,
-     1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507,
-     1508, 1509, 1510, 1511, 1501, 1512, 1513, 1514, 1515, 1487,
-     1516, 1517, 1518, 1519, 1520, 1520, 1521, 1522, 1523, 1524,
-     1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534,
-     1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544,
-     1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1554, 1555,
-
-     1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
-     1566, 1568, 1569, 1572, 1573, 1574, 1576, 1577, 1578, 1579,
-     1580, 1581, 1582, 1583, 1521, 1584, 1585, 1586, 1587, 1589,
-     1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1566, 1600,
-     1601, 1602, 1604, 1605, 1607, 1608, 1609, 1611, 1612, 1613,
-     1614, 1615, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624,
-     1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634,
-     1635, 1636, 1637, 1638, 1639, 1640, 1641, 1643, 1644, 1646,
-     1647, 1648, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657,
-     1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1668,
-
-     1669, 1670, 1672, 1673, 1674, 1676, 1677, 1678, 1679, 1680,
-     1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691,
-     1692, 1693, 1694, 1695, 1696, 1697, 1699, 1700, 1702, 1704,
-     1706, 1707, 1708, 1702, 1711, 1713, 1714, 1715, 1716, 1717,
-     1718, 1719, 1720, 1721, 1722, 1723, 1725, 1726, 1727, 1728,
-     1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1739, 1740,
-     1741, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751,
-     1752, 1754, 1755, 1756, 1757, 1758, 1760, 1761, 1762, 1763,
-     1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1774, 1775,
-     1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1787,
-
-     1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1797, 1799,
-     1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809,
-     1810, 1811, 1809, 1812, 1813, 1814, 1815, 1816, 1817, 1818,
-     1819, 1820, 1821, 1822, 1824, 1825, 1826, 1827, 1828, 1829,
-     1830, 1831, 1832, 1834, 1838, 1840, 1841, 1842, 1843, 1844,
-     1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854,
-     1855, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865,
-     1866, 1867, 1868, 1869, 1871, 1872, 1873, 1874, 1876, 1878,
-     1881, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1892,
-     1893, 1894, 1895, 1896, 1897, 1898, 1900, 1901, 1902, 1903,
-
-     1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913,
-     1914, 1915, 1917, 1918, 1919, 1920, 1921, 1922, 1924, 1925,
-     1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935,
-     1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945,
-     1946, 1947, 1948, 1950, 1951, 1953, 1954, 1955, 1956, 1958,
-     1959, 1960, 1961, 1965, 1968, 1969, 1970, 1971, 1972, 1973,
-     1974, 1975, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984,
-     1986, 1987, 1988, 1989, 1990, 1991, 1993, 1995, 1997, 1998,
-     1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2007,
-     2009, 2010, 2012, 2013, 2016, 2017, 2018, 2019, 2020, 2021,
-
-     2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2032,
-     2033, 2034, 2035, 2038, 2039, 2040, 2042, 2043, 2045, 2047,
-     2048, 2049, 2050, 2051, 2052, 2053, 2054, 2056, 2061, 2061,
-     2061, 2062, 2062, 2062, 2063, 2064, 2063, 2065, 2065, 2065,
-     2066, 2066, 2066, 2067,  716, 2067, 2068, 2068, 2068,  715,
-      713,  712,  711,  710,  709,  708,  707,  706,  705,  704,
-      700,  699,  697,  696,  695,  694,  693,  692,  691,  690,
-      688,  687,  686,  684,  683,  682,  681,  680,  679,  678,
-      677,  676,  675,  674,  673,  672,  670,  669,  668,  667,
-      666,  665,  664,  663,  662,  660,  659,  658,  657,  656,
-
-      655,  654,  652,  651,  650,  649,  648,  647,  646,  645,
-      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
-      633,  632,  631,  630,  628,  627,  626,  625,  624,  623,
-      622,  621,  620,  619,  618,  617,  616,  614,  613,  612,
-      611,  610,  609,  608,  607,  606,  605,  604,  603,  602,
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-      590,  589,  588,  587,  586,  585,  584,  582,  581,  573,
-      572,  571,  570,  569,  568,  566,  565,  563,  562,  560,
-      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
-      548,  547,  546,  545,  544,  543,  542,  541,  540,  539,
-
-      538,  537,  536,  535,  534,  533,  532,  530,  528,  527,
-      526,  525,  524,  523,  522,  521,  520,  519,  518,  517,
-      516,  515,  514,  513,  511,  510,  509,  508,  507,  506,
-      505,  503,  502,  501,  500,  499,  498,  497,  496,  495,
-      494,  493,  492,  491,  490,  489,  487,  486,  485,  484,
-      482,  481,  480,  479,  478,  477,  475,  474,  472,  471,
-      468,  467,  466,  465,  464,  463,  461,  460,  459,  458,
-      457,  456,  455,  454,  453,  452,  447,  445,  444,  442,
-      441,  440,  437,  435,  434,  432,  431,  430,  429,  428,
-      427,  426,  425,  424,  423,  422,  421,  420,  419,  417,
-
-      416,  415,  414,  413,  412,  411,  410,  408,  407,  406,
-      405,  403,  402,  401,  400,  398,  397,  396,  395,  394,
-      393,  392,  391,  390,  389,  388,  387,  386,  384,  382,
-      381,  380,  379,  378,  377,  376,  374,  373,  372,  371,
-      370,  369,  368,  367,  366,  365,  364,  362,  361,  360,
-      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
-      348,  347,  346,  345,  344,  343,  342,  341,  340,  339,
-      338,  337,  336,  335,  334,  333,  332,  331,  330,  329,
-      328,  324,  322,  319,  317,  314,  307,  305,  304,  303,
-      301,  300,  299,  298,  297,  295,  294,  293,  292,  291,
-
-      290,  289,  288,  287,  286,  285,  284,  283,  282,  280,
-      279,  278,  277,  276,  275,  274,  273,  272,  271,  270,
-      269,  267,  266,  264,  263,  262,  261,  260,  259,  258,
-      257,  256,  255,  254,  252,  251,  250,  249,  248,  247,
-      246,  244,  242,  241,  240,  239,  238,  237,  236,  235,
-      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
-      224,  223,  222,  219,  218,  217,  216,  215,  214,  213,
-      212,  211,  210,  209,  207,  203,  201,  199,  195,  193,
-      191,  183,  182,  181,  179,  177,  176,  175,  174,  173,
-      171,  170,  169,  165,  162,  160,  159,  158,  156,  154,
-
-      153,  152,  151,  150,  149,  147,  146,  145,  143,  142,
-      141,  140,  139,  137,  136,  134,  132,  131,  130,  129,
-      128,  126,  125,  124,  122,  120,  118,  117,  116,  112,
-      104,  102,   97,   96,   77,   72,   66,   58,   49,   47,
-       43,   41,   39,   38,   24,   14,   11, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
-     2060
+     1120, 1121, 1122, 1123, 1124, 1126, 1096, 1097, 1127, 1128,
+     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
+     1139, 1140, 1141, 1142, 1143, 1145, 1146, 1147, 1148, 1149,
+     1145, 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, 1178, 1179,
+     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1190,
+     1146, 1191, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200,
+     1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210,
+     1211, 1212, 1213, 1215, 1216, 1217, 1218, 1219, 1220, 1221,
+
+     1222, 1223, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1233,
+     1234, 1235, 1236, 1237, 1238, 1239, 1215, 1241, 1242, 1243,
+     1244, 1245, 1216, 1246, 1247, 1248, 1249, 1250, 1251, 1252,
+     1253, 1254, 1255, 1256, 1257, 1258, 1261, 1263, 1264, 1265,
+     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
+     1276, 1278, 1279, 1280, 1281, 1283, 1284, 1285, 1286, 1287,
+     1288, 1290, 1292, 1294, 1295, 1296, 1297, 1298, 1299, 1300,
+     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1310, 1311,
+     1312, 1313, 1314, 1315, 1316, 1319, 1320, 1321, 1322, 1323,
+     1324, 1325, 1326, 1327, 1328, 1329, 1331, 1332, 1333, 1334,
+
+     1335, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345,
+     1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355,
+     1356, 1357, 1328, 1358, 1302, 1359, 1361, 1362, 1363, 1364,
+     1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374,
+     1375, 1376, 1377, 1378, 1379, 1337, 1380, 1381, 1382, 1383,
+     1384, 1378, 1386, 1389, 1390, 1391, 1392, 1393, 1394, 1395,
+     1396, 1397, 1398, 1399, 1400, 1402, 1403, 1404, 1405, 1406,
+     1407, 1410, 1409, 1405, 1409, 1412, 1413, 1416, 1417, 1418,
+     1419, 1420, 1421, 1422, 1424, 1425, 1426, 1427, 1428, 1430,
+     1431, 1432, 1427, 1433, 1434, 1436, 1437, 1438, 1439, 1440,
+
+     1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450,
+     1451, 1428, 1452, 1454, 1455, 1456, 1458, 1459, 1460, 1461,
+     1462, 1463, 1464, 1465, 1466, 1467, 1469, 1471, 1472, 1474,
+     1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1484, 1485,
+     1486, 1487, 1488, 1489, 1490, 1491, 1494, 1495, 1497, 1498,
+     1499, 1501, 1502, 1501, 1503, 1504, 1501, 1505, 1506, 1501,
+     1507, 1508, 1509, 1510, 1511, 1512, 1513, 1515, 1517, 1518,
+     1520, 1521, 1523, 1525, 1526, 1527, 1529, 1530, 1531, 1532,
+     1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542,
+     1543, 1544, 1545, 1535, 1546, 1547, 1548, 1549, 1521, 1550,
+
+     1551, 1552, 1553, 1554, 1554, 1555, 1556, 1557, 1558, 1559,
+     1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569,
+     1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,
+     1580, 1581, 1582, 1583, 1584, 1585, 1586, 1588, 1589, 1590,
+     1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1601,
+     1602, 1604, 1605, 1608, 1609, 1610, 1612, 1613, 1614, 1615,
+     1616, 1617, 1618, 1555, 1619, 1620, 1621, 1622, 1623, 1625,
+     1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1602, 1636,
+     1637, 1638, 1640, 1641, 1643, 1644, 1645, 1647, 1648, 1649,
+     1650, 1651, 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, 1680, 1681,
+     1683, 1684, 1685, 1687, 1688, 1689, 1690, 1691, 1692, 1693,
+     1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703,
+     1705, 1706, 1707, 1709, 1710, 1711, 1713, 1714, 1715, 1716,
+     1717, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727,
+     1728, 1729, 1730, 1731, 1732, 1733, 1734, 1736, 1737, 1739,
+     1741, 1743, 1744, 1745, 1739, 1746, 1749, 1751, 1752, 1753,
+     1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1763, 1764,
+     1765, 1766, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
+
+     1777, 1778, 1779, 1781, 1782, 1783, 1784, 1785, 1786, 1787,
+     1788, 1789, 1790, 1792, 1793, 1794, 1795, 1796, 1798, 1799,
+     1800, 1801, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811,
+     1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822,
+     1823, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834,
+     1836, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846,
+     1847, 1848, 1849, 1850, 1848, 1851, 1852, 1853, 1854, 1855,
+     1856, 1857, 1858, 1859, 1860, 1861, 1863, 1864, 1865, 1866,
+     1867, 1868, 1869, 1870, 1871, 1873, 1877, 1879, 1880, 1881,
+     1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891,
+
+     1892, 1893, 1894, 1896, 1897, 1898, 1899, 1900, 1901, 1902,
+     1903, 1904, 1905, 1906, 1907, 1908, 1910, 1911, 1912, 1913,
+     1915, 1917, 1920, 1922, 1923, 1924, 1925, 1926, 1927, 1928,
+     1929, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1939, 1940,
+     1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950,
+     1951, 1952, 1953, 1954, 1956, 1957, 1958, 1959, 1960, 1961,
+     1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972,
+     1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+     1983, 1984, 1985, 1986, 1987, 1989, 1990, 1992, 1993, 1994,
+     1995, 1997, 1998, 1999, 2000, 2004, 2007, 2008, 2009, 2010,
+
+     2011, 2012, 2013, 2014, 2016, 2017, 2018, 2019, 2020, 2021,
+     2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030, 2032, 2034,
+     2036, 2037, 2038, 2039, 2040, 2041, 2043, 2044, 2045, 2046,
+     2047, 2046, 2048, 2049, 2051, 2052, 2055, 2056, 2057, 2058,
+     2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068,
+     2069, 2071, 2072, 2073, 2074, 2077, 2078, 2079, 2081, 2082,
+     2084, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2095,
+     2100, 2100, 2100, 2101, 2101, 2101, 2102, 2103, 2102, 2104,
+     2104, 2104, 2105, 2105, 2105, 2106,  719, 2106, 2107, 2107,
+     2107,  718,  717,  713,  712,  710,  709,  708,  707,  706,
+
+      705,  704,  703,  702,  701,  699,  698,  697,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  681,  680,  679,  678,  677,  676,  675,  674,  673,
+      672,  670,  669,  668,  667,  666,  665,  664,  662,  661,
+      660,  659,  658,  657,  656,  655,  653,  652,  651,  650,
+      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
+      628,  627,  626,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  612,  610,  609,  608,  607,
+      606,  605,  604,  603,  602,  601,  600,  599,  598,  597,
+
+      596,  595,  594,  592,  591,  583,  582,  581,  580,  579,
+      578,  577,  575,  574,  572,  571,  569,  568,  567,  566,
+      565,  564,  563,  562,  561,  560,  559,  558,  556,  555,
+      554,  553,  552,  551,  550,  549,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  537,  535,  534,  533,
+      532,  531,  530,  529,  528,  527,  526,  525,  524,  523,
+      522,  521,  520,  518,  517,  516,  515,  514,  513,  512,
+      510,  509,  508,  507,  506,  505,  504,  503,  502,  501,
+      500,  499,  498,  497,  496,  494,  493,  492,  491,  489,
+      488,  487,  486,  485,  484,  482,  481,  479,  478,  475,
+
+      474,  473,  472,  471,  470,  468,  467,  466,  465,  464,
+      463,  462,  461,  460,  459,  454,  452,  451,  449,  448,
+      447,  444,  443,  441,  440,  438,  437,  436,  435,  434,
+      433,  432,  431,  430,  429,  428,  427,  426,  425,  424,
+      422,  421,  420,  419,  418,  417,  416,  415,  413,  412,
+      410,  408,  407,  406,  405,  403,  402,  401,  400,  399,
+      398,  397,  396,  395,  394,  393,  392,  391,  389,  387,
+      386,  385,  384,  383,  382,  381,  379,  378,  377,  376,
+      375,  374,  373,  372,  371,  370,  369,  367,  366,  365,
+      364,  363,  362,  361,  360,  359,  358,  357,  356,  355,
+
+      353,  352,  351,  350,  349,  348,  347,  346,  345,  344,
+      343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
+      333,  329,  327,  324,  322,  319,  312,  311,  309,  308,
+      307,  305,  304,  302,  301,  300,  298,  297,  296,  295,
+      294,  293,  292,  291,  290,  289,  288,  287,  286,  285,
+      283,  282,  281,  280,  279,  278,  277,  276,  275,  274,
+      273,  272,  270,  269,  267,  266,  265,  264,  263,  262,
+      261,  260,  259,  258,  257,  255,  254,  253,  252,  251,
+      250,  249,  247,  245,  244,  243,  242,  241,  240,  239,
+      238,  237,  236,  235,  234,  233,  232,  231,  230,  229,
+
+      228,  227,  226,  225,  222,  221,  220,  219,  218,  217,
+      216,  215,  214,  213,  212,  210,  206,  204,  202,  198,
+      196,  194,  186,  185,  184,  183,  181,  179,  178,  176,
+      175,  174,  172,  171,  170,  166,  163,  161,  160,  159,
+      157,  155,  154,  153,  152,  151,  150,  148,  147,  146,
+      144,  143,  142,  141,  140,  138,  137,  135,  133,  132,
+      131,  130,  129,  127,  126,  125,  123,  121,  119,  118,
+      117,  113,  105,  103,   98,   97,   77,   72,   66,   58,
+       49,   47,   43,   41,   39,   38,   24,   14,   11, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2006,32 +2029,32 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[214] =
+static const flex_int16_t yy_rule_linenum[217] =
     {   0,
       146,  148,  150,  155,  156,  161,  162,  163,  175,  178,
       183,  190,  199,  208,  217,  226,  235,  244,  254,  263,
       272,  281,  290,  299,  308,  317,  326,  335,  344,  353,
       362,  371,  380,  389,  401,  410,  419,  428,  439,  450,
-      461,  472,  483,  494,  505,  516,  527,  536,  545,  554,
-      565,  574,  585,  596,  607,  618,  630,  642,  654,  665,
-      676,  685,  694,  703,  712,  721,  732,  743,  754,  765,
-      776,  787,  798,  809,  819,  830,  839,  849,  863,  879,
-      888,  897,  906,  915,  937,  959,  968,  978,  987,  998,
-     1007, 1016, 1025, 1034, 1043, 1054, 1065, 1076, 1086, 1095,
-
-     1106, 1117, 1128, 1139, 1151, 1160, 1169, 1178, 1187, 1196,
-     1205, 1214, 1223, 1232, 1242, 1253, 1265, 1274, 1283, 1293,
-     1303, 1313, 1323, 1333, 1343, 1352, 1362, 1371, 1380, 1389,
-     1398, 1408, 1418, 1427, 1437, 1446, 1455, 1464, 1473, 1482,
-     1491, 1500, 1509, 1518, 1527, 1536, 1545, 1554, 1563, 1572,
-     1581, 1590, 1599, 1608, 1617, 1626, 1635, 1644, 1653, 1662,
-     1671, 1680, 1689, 1698, 1707, 1716, 1725, 1734, 1743, 1752,
-     1764, 1776, 1786, 1796, 1806, 1816, 1826, 1836, 1846, 1856,
-     1866, 1875, 1884, 1893, 1902, 1913, 1924, 1937, 1950, 1963,
-     1972, 1981, 1990, 1999, 2008, 2109, 2125, 2174, 2182, 2197,
-
-     2198, 2199, 2200, 2201, 2202, 2204, 2222, 2235, 2240, 2244,
-     2246, 2248, 2250
+      461,  472,  483,  494,  505,  516,  527,  538,  549,  560,
+      569,  578,  587,  598,  607,  618,  629,  640,  651,  663,
+      675,  687,  698,  709,  718,  727,  736,  745,  754,  765,
+      776,  787,  798,  809,  820,  831,  842,  852,  863,  872,
+      882,  896,  912,  921,  930,  939,  948,  970,  992, 1001,
+     1011, 1020, 1031, 1040, 1049, 1058, 1067, 1076, 1087, 1098,
+
+     1109, 1119, 1128, 1139, 1150, 1161, 1172, 1184, 1193, 1202,
+     1211, 1220, 1229, 1238, 1247, 1256, 1265, 1275, 1286, 1298,
+     1307, 1316, 1326, 1336, 1346, 1356, 1366, 1376, 1385, 1395,
+     1404, 1413, 1422, 1431, 1441, 1451, 1460, 1470, 1479, 1488,
+     1497, 1506, 1515, 1524, 1533, 1542, 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, 1785, 1797, 1809, 1819, 1829, 1839, 1849, 1859,
+     1869, 1879, 1889, 1899, 1908, 1917, 1926, 1935, 1946, 1957,
+     1970, 1983, 1996, 2005, 2014, 2023, 2032, 2041, 2142, 2158,
+
+     2207, 2215, 2230, 2231, 2232, 2233, 2234, 2235, 2237, 2255,
+     2268, 2273, 2277, 2279, 2281, 2283
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2085,7 +2108,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 2088 "dhcp4_lexer.cc"
+#line 2111 "dhcp4_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
@@ -2111,8 +2134,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 2114 "dhcp4_lexer.cc"
-#line 2115 "dhcp4_lexer.cc"
+#line 2137 "dhcp4_lexer.cc"
+#line 2138 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2440,7 +2463,7 @@ YY_DECL
     }
 
 
-#line 2443 "dhcp4_lexer.cc"
+#line 2466 "dhcp4_lexer.cc"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -2469,13 +2492,13 @@ YY_DECL
 			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 >= 2061 )
+				if ( yy_current_state >= 2100 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 2060 );
+		while ( yy_current_state != 2099 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -2494,13 +2517,13 @@ YY_DECL
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 214 )
+			else if ( yy_act < 217 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
 				         (long)yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 214 )
+			else if ( yy_act == 217 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         yytext );
-			else if ( yy_act == 215 )
+			else if ( yy_act == 218 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -3026,9 +3049,9 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
     case isc::dhcp::Parser4Context::CONFIG_DATABASE:
-        return isc::dhcp::Dhcp4Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_READ_TIMEOUT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("reconnect-wait-time", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("read-timeout", driver.loc_);
     }
 }
 	YY_BREAK
@@ -3040,15 +3063,57 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
     case isc::dhcp::Parser4Context::CONFIG_DATABASE:
-        return isc::dhcp::Dhcp4Parser::make_ON_FAIL(driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_WRITE_TIMEOUT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("on-fail", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("write-timeout", driver.loc_);
     }
 }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 527 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_TCP_USER_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("tcp-user-timeout", driver.loc_);
+    }
+}
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 538 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("reconnect-wait-time", driver.loc_);
+    }
+}
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 549 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_ON_FAIL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("on-fail", driver.loc_);
+    }
+}
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 560 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_ON_FAIL:
@@ -3058,9 +3123,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 48:
+case 51:
 YY_RULE_SETUP
-#line 536 "dhcp4_lexer.ll"
+#line 569 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_ON_FAIL:
@@ -3070,9 +3135,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 49:
+case 52:
 YY_RULE_SETUP
-#line 545 "dhcp4_lexer.ll"
+#line 578 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DATABASE_ON_FAIL:
@@ -3082,9 +3147,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 50:
+case 53:
 YY_RULE_SETUP
-#line 554 "dhcp4_lexer.ll"
+#line 587 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3096,9 +3161,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 51:
+case 54:
 YY_RULE_SETUP
-#line 565 "dhcp4_lexer.ll"
+#line 598 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3108,9 +3173,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 52:
+case 55:
 YY_RULE_SETUP
-#line 574 "dhcp4_lexer.ll"
+#line 607 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3122,9 +3187,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 53:
+case 56:
 YY_RULE_SETUP
-#line 585 "dhcp4_lexer.ll"
+#line 618 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3136,9 +3201,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 54:
+case 57:
 YY_RULE_SETUP
-#line 596 "dhcp4_lexer.ll"
+#line 629 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3150,9 +3215,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 55:
+case 58:
 YY_RULE_SETUP
-#line 607 "dhcp4_lexer.ll"
+#line 640 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3164,9 +3229,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 56:
+case 59:
 YY_RULE_SETUP
-#line 618 "dhcp4_lexer.ll"
+#line 651 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3179,9 +3244,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 57:
+case 60:
 YY_RULE_SETUP
-#line 630 "dhcp4_lexer.ll"
+#line 663 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3194,9 +3259,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 58:
+case 61:
 YY_RULE_SETUP
-#line 642 "dhcp4_lexer.ll"
+#line 675 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3209,9 +3274,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 59:
+case 62:
 YY_RULE_SETUP
-#line 654 "dhcp4_lexer.ll"
+#line 687 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3223,9 +3288,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 60:
+case 63:
 YY_RULE_SETUP
-#line 665 "dhcp4_lexer.ll"
+#line 698 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3237,9 +3302,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 61:
+case 64:
 YY_RULE_SETUP
-#line 676 "dhcp4_lexer.ll"
+#line 709 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3249,9 +3314,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 62:
+case 65:
 YY_RULE_SETUP
-#line 685 "dhcp4_lexer.ll"
+#line 718 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3261,9 +3326,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 63:
+case 66:
 YY_RULE_SETUP
-#line 694 "dhcp4_lexer.ll"
+#line 727 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3273,9 +3338,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 64:
+case 67:
 YY_RULE_SETUP
-#line 703 "dhcp4_lexer.ll"
+#line 736 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3285,9 +3350,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 65:
+case 68:
 YY_RULE_SETUP
-#line 712 "dhcp4_lexer.ll"
+#line 745 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3297,9 +3362,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 66:
+case 69:
 YY_RULE_SETUP
-#line 721 "dhcp4_lexer.ll"
+#line 754 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3311,9 +3376,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 67:
+case 70:
 YY_RULE_SETUP
-#line 732 "dhcp4_lexer.ll"
+#line 765 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3325,9 +3390,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 68:
+case 71:
 YY_RULE_SETUP
-#line 743 "dhcp4_lexer.ll"
+#line 776 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3339,9 +3404,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 69:
+case 72:
 YY_RULE_SETUP
-#line 754 "dhcp4_lexer.ll"
+#line 787 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3353,9 +3418,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 70:
+case 73:
 YY_RULE_SETUP
-#line 765 "dhcp4_lexer.ll"
+#line 798 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3367,9 +3432,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 71:
+case 74:
 YY_RULE_SETUP
-#line 776 "dhcp4_lexer.ll"
+#line 809 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3381,9 +3446,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 72:
+case 75:
 YY_RULE_SETUP
-#line 787 "dhcp4_lexer.ll"
+#line 820 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3395,9 +3460,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 73:
+case 76:
 YY_RULE_SETUP
-#line 798 "dhcp4_lexer.ll"
+#line 831 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3409,9 +3474,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 74:
+case 77:
 YY_RULE_SETUP
-#line 809 "dhcp4_lexer.ll"
+#line 842 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3422,9 +3487,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 75:
+case 78:
 YY_RULE_SETUP
-#line 819 "dhcp4_lexer.ll"
+#line 852 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3436,9 +3501,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 76:
+case 79:
 YY_RULE_SETUP
-#line 830 "dhcp4_lexer.ll"
+#line 863 "dhcp4_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3448,9 +3513,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 77:
+case 80:
 YY_RULE_SETUP
-#line 839 "dhcp4_lexer.ll"
+#line 872 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3461,9 +3526,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 78:
+case 81:
 YY_RULE_SETUP
-#line 849 "dhcp4_lexer.ll"
+#line 882 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3478,9 +3543,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 79:
+case 82:
 YY_RULE_SETUP
-#line 863 "dhcp4_lexer.ll"
+#line 896 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -3497,9 +3562,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 80:
+case 83:
 YY_RULE_SETUP
-#line 879 "dhcp4_lexer.ll"
+#line 912 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3509,9 +3574,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 81:
+case 84:
 YY_RULE_SETUP
-#line 888 "dhcp4_lexer.ll"
+#line 921 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -3521,9 +3586,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 82:
+case 85:
 YY_RULE_SETUP
-#line 897 "dhcp4_lexer.ll"
+#line 930 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3533,9 +3598,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 83:
+case 86:
 YY_RULE_SETUP
-#line 906 "dhcp4_lexer.ll"
+#line 939 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -3545,9 +3610,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 84:
+case 87:
 YY_RULE_SETUP
-#line 915 "dhcp4_lexer.ll"
+#line 948 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3570,9 +3635,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 85:
+case 88:
 YY_RULE_SETUP
-#line 937 "dhcp4_lexer.ll"
+#line 970 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3595,9 +3660,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 86:
+case 89:
 YY_RULE_SETUP
-#line 959 "dhcp4_lexer.ll"
+#line 992 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3607,9 +3672,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 87:
+case 90:
 YY_RULE_SETUP
-#line 968 "dhcp4_lexer.ll"
+#line 1001 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3620,9 +3685,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 88:
+case 91:
 YY_RULE_SETUP
-#line 978 "dhcp4_lexer.ll"
+#line 1011 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3632,9 +3697,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 89:
+case 92:
 YY_RULE_SETUP
-#line 987 "dhcp4_lexer.ll"
+#line 1020 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3646,9 +3711,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 90:
+case 93:
 YY_RULE_SETUP
-#line 998 "dhcp4_lexer.ll"
+#line 1031 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3658,9 +3723,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 91:
+case 94:
 YY_RULE_SETUP
-#line 1007 "dhcp4_lexer.ll"
+#line 1040 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3670,9 +3735,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 92:
+case 95:
 YY_RULE_SETUP
-#line 1016 "dhcp4_lexer.ll"
+#line 1049 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3682,9 +3747,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 93:
+case 96:
 YY_RULE_SETUP
-#line 1025 "dhcp4_lexer.ll"
+#line 1058 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3694,9 +3759,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 94:
+case 97:
 YY_RULE_SETUP
-#line 1034 "dhcp4_lexer.ll"
+#line 1067 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATION_MODE:
@@ -3706,9 +3771,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 95:
+case 98:
 YY_RULE_SETUP
-#line 1043 "dhcp4_lexer.ll"
+#line 1076 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3720,9 +3785,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 96:
+case 99:
 YY_RULE_SETUP
-#line 1054 "dhcp4_lexer.ll"
+#line 1087 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3734,9 +3799,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 97:
+case 100:
 YY_RULE_SETUP
-#line 1065 "dhcp4_lexer.ll"
+#line 1098 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3748,9 +3813,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 98:
+case 101:
 YY_RULE_SETUP
-#line 1076 "dhcp4_lexer.ll"
+#line 1109 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -3761,9 +3826,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 99:
+case 102:
 YY_RULE_SETUP
-#line 1086 "dhcp4_lexer.ll"
+#line 1119 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3773,9 +3838,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 100:
+case 103:
 YY_RULE_SETUP
-#line 1095 "dhcp4_lexer.ll"
+#line 1128 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3787,9 +3852,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 101:
+case 104:
 YY_RULE_SETUP
-#line 1106 "dhcp4_lexer.ll"
+#line 1139 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3801,9 +3866,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 102:
+case 105:
 YY_RULE_SETUP
-#line 1117 "dhcp4_lexer.ll"
+#line 1150 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3815,9 +3880,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 103:
+case 106:
 YY_RULE_SETUP
-#line 1128 "dhcp4_lexer.ll"
+#line 1161 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3829,9 +3894,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 104:
+case 107:
 YY_RULE_SETUP
-#line 1139 "dhcp4_lexer.ll"
+#line 1172 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3843,9 +3908,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 105:
+case 108:
 YY_RULE_SETUP
-#line 1151 "dhcp4_lexer.ll"
+#line 1184 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3855,9 +3920,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 106:
+case 109:
 YY_RULE_SETUP
-#line 1160 "dhcp4_lexer.ll"
+#line 1193 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3867,9 +3932,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 107:
+case 110:
 YY_RULE_SETUP
-#line 1169 "dhcp4_lexer.ll"
+#line 1202 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3879,9 +3944,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 108:
+case 111:
 YY_RULE_SETUP
-#line 1178 "dhcp4_lexer.ll"
+#line 1211 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3891,9 +3956,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 109:
+case 112:
 YY_RULE_SETUP
-#line 1187 "dhcp4_lexer.ll"
+#line 1220 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3903,9 +3968,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 110:
+case 113:
 YY_RULE_SETUP
-#line 1196 "dhcp4_lexer.ll"
+#line 1229 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3915,9 +3980,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 111:
+case 114:
 YY_RULE_SETUP
-#line 1205 "dhcp4_lexer.ll"
+#line 1238 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3927,9 +3992,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 112:
+case 115:
 YY_RULE_SETUP
-#line 1214 "dhcp4_lexer.ll"
+#line 1247 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -3939,9 +4004,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 113:
+case 116:
 YY_RULE_SETUP
-#line 1223 "dhcp4_lexer.ll"
+#line 1256 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -3951,9 +4016,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 114:
+case 117:
 YY_RULE_SETUP
-#line 1232 "dhcp4_lexer.ll"
+#line 1265 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -3964,9 +4029,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 115:
+case 118:
 YY_RULE_SETUP
-#line 1242 "dhcp4_lexer.ll"
+#line 1275 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3978,9 +4043,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 116:
+case 119:
 YY_RULE_SETUP
-#line 1253 "dhcp4_lexer.ll"
+#line 1286 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -3993,9 +4058,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 117:
+case 120:
 YY_RULE_SETUP
-#line 1265 "dhcp4_lexer.ll"
+#line 1298 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -4005,9 +4070,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 118:
+case 121:
 YY_RULE_SETUP
-#line 1274 "dhcp4_lexer.ll"
+#line 1307 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -4017,9 +4082,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 119:
+case 122:
 YY_RULE_SETUP
-#line 1283 "dhcp4_lexer.ll"
+#line 1316 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4030,9 +4095,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 120:
+case 123:
 YY_RULE_SETUP
-#line 1293 "dhcp4_lexer.ll"
+#line 1326 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4043,9 +4108,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 121:
+case 124:
 YY_RULE_SETUP
-#line 1303 "dhcp4_lexer.ll"
+#line 1336 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4056,9 +4121,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 122:
+case 125:
 YY_RULE_SETUP
-#line 1313 "dhcp4_lexer.ll"
+#line 1346 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4069,9 +4134,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 123:
+case 126:
 YY_RULE_SETUP
-#line 1323 "dhcp4_lexer.ll"
+#line 1356 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4082,9 +4147,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 124:
+case 127:
 YY_RULE_SETUP
-#line 1333 "dhcp4_lexer.ll"
+#line 1366 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4095,9 +4160,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 125:
+case 128:
 YY_RULE_SETUP
-#line 1343 "dhcp4_lexer.ll"
+#line 1376 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -4107,9 +4172,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 126:
+case 129:
 YY_RULE_SETUP
-#line 1352 "dhcp4_lexer.ll"
+#line 1385 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -4120,9 +4185,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 127:
+case 130:
 YY_RULE_SETUP
-#line 1362 "dhcp4_lexer.ll"
+#line 1395 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -4132,9 +4197,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 128:
+case 131:
 YY_RULE_SETUP
-#line 1371 "dhcp4_lexer.ll"
+#line 1404 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -4144,9 +4209,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 129:
+case 132:
 YY_RULE_SETUP
-#line 1380 "dhcp4_lexer.ll"
+#line 1413 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -4156,9 +4221,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 130:
+case 133:
 YY_RULE_SETUP
-#line 1389 "dhcp4_lexer.ll"
+#line 1422 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -4168,9 +4233,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 131:
+case 134:
 YY_RULE_SETUP
-#line 1398 "dhcp4_lexer.ll"
+#line 1431 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4181,9 +4246,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 132:
+case 135:
 YY_RULE_SETUP
-#line 1408 "dhcp4_lexer.ll"
+#line 1441 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -4194,9 +4259,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 133:
+case 136:
 YY_RULE_SETUP
-#line 1418 "dhcp4_lexer.ll"
+#line 1451 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -4206,9 +4271,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 134:
+case 137:
 YY_RULE_SETUP
-#line 1427 "dhcp4_lexer.ll"
+#line 1460 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4218,9 +4283,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 135:
+case 138:
 YY_RULE_SETUP
-#line 1437 "dhcp4_lexer.ll"
+#line 1470 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -4230,9 +4295,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 136:
+case 139:
 YY_RULE_SETUP
-#line 1446 "dhcp4_lexer.ll"
+#line 1479 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -4242,9 +4307,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 137:
+case 140:
 YY_RULE_SETUP
-#line 1455 "dhcp4_lexer.ll"
+#line 1488 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4254,9 +4319,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 138:
+case 141:
 YY_RULE_SETUP
-#line 1464 "dhcp4_lexer.ll"
+#line 1497 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4266,9 +4331,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 139:
+case 142:
 YY_RULE_SETUP
-#line 1473 "dhcp4_lexer.ll"
+#line 1506 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4278,9 +4343,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 140:
+case 143:
 YY_RULE_SETUP
-#line 1482 "dhcp4_lexer.ll"
+#line 1515 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4290,9 +4355,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 141:
+case 144:
 YY_RULE_SETUP
-#line 1491 "dhcp4_lexer.ll"
+#line 1524 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4302,9 +4367,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 142:
+case 145:
 YY_RULE_SETUP
-#line 1500 "dhcp4_lexer.ll"
+#line 1533 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4314,9 +4379,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 143:
+case 146:
 YY_RULE_SETUP
-#line 1509 "dhcp4_lexer.ll"
+#line 1542 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -4326,9 +4391,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 144:
+case 147:
 YY_RULE_SETUP
-#line 1518 "dhcp4_lexer.ll"
+#line 1551 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4338,9 +4403,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 145:
+case 148:
 YY_RULE_SETUP
-#line 1527 "dhcp4_lexer.ll"
+#line 1560 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4350,9 +4415,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 146:
+case 149:
 YY_RULE_SETUP
-#line 1536 "dhcp4_lexer.ll"
+#line 1569 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
@@ -4362,9 +4427,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 147:
+case 150:
 YY_RULE_SETUP
-#line 1545 "dhcp4_lexer.ll"
+#line 1578 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
@@ -4374,9 +4439,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 148:
+case 151:
 YY_RULE_SETUP
-#line 1554 "dhcp4_lexer.ll"
+#line 1587 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING:
@@ -4386,9 +4451,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 149:
+case 152:
 YY_RULE_SETUP
-#line 1563 "dhcp4_lexer.ll"
+#line 1596 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4398,9 +4463,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 150:
+case 153:
 YY_RULE_SETUP
-#line 1572 "dhcp4_lexer.ll"
+#line 1605 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -4410,9 +4475,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 151:
+case 154:
 YY_RULE_SETUP
-#line 1581 "dhcp4_lexer.ll"
+#line 1614 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -4422,9 +4487,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 152:
+case 155:
 YY_RULE_SETUP
-#line 1590 "dhcp4_lexer.ll"
+#line 1623 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4434,9 +4499,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 153:
+case 156:
 YY_RULE_SETUP
-#line 1599 "dhcp4_lexer.ll"
+#line 1632 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
@@ -4446,9 +4511,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 154:
+case 157:
 YY_RULE_SETUP
-#line 1608 "dhcp4_lexer.ll"
+#line 1641 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
@@ -4458,9 +4523,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 155:
+case 158:
 YY_RULE_SETUP
-#line 1617 "dhcp4_lexer.ll"
+#line 1650 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
@@ -4470,9 +4535,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 156:
+case 159:
 YY_RULE_SETUP
-#line 1626 "dhcp4_lexer.ll"
+#line 1659 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4482,9 +4547,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 157:
+case 160:
 YY_RULE_SETUP
-#line 1635 "dhcp4_lexer.ll"
+#line 1668 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4494,9 +4559,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 158:
+case 161:
 YY_RULE_SETUP
-#line 1644 "dhcp4_lexer.ll"
+#line 1677 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4506,9 +4571,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 159:
+case 162:
 YY_RULE_SETUP
-#line 1653 "dhcp4_lexer.ll"
+#line 1686 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4518,9 +4583,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 160:
+case 163:
 YY_RULE_SETUP
-#line 1662 "dhcp4_lexer.ll"
+#line 1695 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4530,9 +4595,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 161:
+case 164:
 YY_RULE_SETUP
-#line 1671 "dhcp4_lexer.ll"
+#line 1704 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4542,9 +4607,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 162:
+case 165:
 YY_RULE_SETUP
-#line 1680 "dhcp4_lexer.ll"
+#line 1713 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4554,9 +4619,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 163:
+case 166:
 YY_RULE_SETUP
-#line 1689 "dhcp4_lexer.ll"
+#line 1722 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4566,9 +4631,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 164:
+case 167:
 YY_RULE_SETUP
-#line 1698 "dhcp4_lexer.ll"
+#line 1731 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4578,9 +4643,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 165:
+case 168:
 YY_RULE_SETUP
-#line 1707 "dhcp4_lexer.ll"
+#line 1740 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4590,9 +4655,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 166:
+case 169:
 YY_RULE_SETUP
-#line 1716 "dhcp4_lexer.ll"
+#line 1749 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4602,9 +4667,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 167:
+case 170:
 YY_RULE_SETUP
-#line 1725 "dhcp4_lexer.ll"
+#line 1758 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4614,9 +4679,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 168:
+case 171:
 YY_RULE_SETUP
-#line 1734 "dhcp4_lexer.ll"
+#line 1767 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4626,9 +4691,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 169:
+case 172:
 YY_RULE_SETUP
-#line 1743 "dhcp4_lexer.ll"
+#line 1776 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP_DDNS:
@@ -4638,9 +4703,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 170:
+case 173:
 YY_RULE_SETUP
-#line 1752 "dhcp4_lexer.ll"
+#line 1785 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4653,9 +4718,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 171:
+case 174:
 YY_RULE_SETUP
-#line 1764 "dhcp4_lexer.ll"
+#line 1797 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4668,9 +4733,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 172:
+case 175:
 YY_RULE_SETUP
-#line 1776 "dhcp4_lexer.ll"
+#line 1809 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -4681,9 +4746,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 173:
+case 176:
 YY_RULE_SETUP
-#line 1786 "dhcp4_lexer.ll"
+#line 1819 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) {
@@ -4694,9 +4759,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 174:
+case 177:
 YY_RULE_SETUP
-#line 1796 "dhcp4_lexer.ll"
+#line 1829 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) {
@@ -4707,9 +4772,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 175:
+case 178:
 YY_RULE_SETUP
-#line 1806 "dhcp4_lexer.ll"
+#line 1839 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4720,9 +4785,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 176:
+case 179:
 YY_RULE_SETUP
-#line 1816 "dhcp4_lexer.ll"
+#line 1849 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4733,9 +4798,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 177:
+case 180:
 YY_RULE_SETUP
-#line 1826 "dhcp4_lexer.ll"
+#line 1859 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4746,9 +4811,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 178:
+case 181:
 YY_RULE_SETUP
-#line 1836 "dhcp4_lexer.ll"
+#line 1869 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4759,9 +4824,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 179:
+case 182:
 YY_RULE_SETUP
-#line 1846 "dhcp4_lexer.ll"
+#line 1879 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4772,9 +4837,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 180:
+case 183:
 YY_RULE_SETUP
-#line 1856 "dhcp4_lexer.ll"
+#line 1889 "dhcp4_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) {
@@ -4785,9 +4850,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_);
 }
 	YY_BREAK
-case 181:
+case 184:
 YY_RULE_SETUP
-#line 1866 "dhcp4_lexer.ll"
+#line 1899 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4797,9 +4862,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 182:
+case 185:
 YY_RULE_SETUP
-#line 1875 "dhcp4_lexer.ll"
+#line 1908 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4809,9 +4874,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 183:
+case 186:
 YY_RULE_SETUP
-#line 1884 "dhcp4_lexer.ll"
+#line 1917 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -4821,9 +4886,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 184:
+case 187:
 YY_RULE_SETUP
-#line 1893 "dhcp4_lexer.ll"
+#line 1926 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4833,9 +4898,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 185:
+case 188:
 YY_RULE_SETUP
-#line 1902 "dhcp4_lexer.ll"
+#line 1935 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4847,9 +4912,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 186:
+case 189:
 YY_RULE_SETUP
-#line 1913 "dhcp4_lexer.ll"
+#line 1946 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4861,9 +4926,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 187:
+case 190:
 YY_RULE_SETUP
-#line 1924 "dhcp4_lexer.ll"
+#line 1957 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4877,9 +4942,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 188:
+case 191:
 YY_RULE_SETUP
-#line 1937 "dhcp4_lexer.ll"
+#line 1970 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4893,9 +4958,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 189:
+case 192:
 YY_RULE_SETUP
-#line 1950 "dhcp4_lexer.ll"
+#line 1983 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4909,9 +4974,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 190:
+case 193:
 YY_RULE_SETUP
-#line 1963 "dhcp4_lexer.ll"
+#line 1996 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4921,9 +4986,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 191:
+case 194:
 YY_RULE_SETUP
-#line 1972 "dhcp4_lexer.ll"
+#line 2005 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4933,9 +4998,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 192:
+case 195:
 YY_RULE_SETUP
-#line 1981 "dhcp4_lexer.ll"
+#line 2014 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4945,9 +5010,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 193:
+case 196:
 YY_RULE_SETUP
-#line 1990 "dhcp4_lexer.ll"
+#line 2023 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -4957,9 +5022,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 194:
+case 197:
 YY_RULE_SETUP
-#line 1999 "dhcp4_lexer.ll"
+#line 2032 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::COMPATIBILITY:
@@ -4969,9 +5034,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 195:
+case 198:
 YY_RULE_SETUP
-#line 2008 "dhcp4_lexer.ll"
+#line 2041 "dhcp4_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -5073,10 +5138,10 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
 	YY_BREAK
-case 196:
-/* rule 196 can match eol */
+case 199:
+/* rule 199 can match eol */
 YY_RULE_SETUP
-#line 2109 "dhcp4_lexer.ll"
+#line 2142 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     std::string raw(yytext+1);
@@ -5093,10 +5158,10 @@ YY_RULE_SETUP
                  pos + 1);
 }
 	YY_BREAK
-case 197:
-/* rule 197 can match eol */
+case 200:
+/* rule 200 can match eol */
 YY_RULE_SETUP
-#line 2125 "dhcp4_lexer.ll"
+#line 2158 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     std::string raw(yytext+1);
@@ -5146,9 +5211,9 @@ YY_RULE_SETUP
                  pos);
 }
 	YY_BREAK
-case 198:
+case 201:
 YY_RULE_SETUP
-#line 2174 "dhcp4_lexer.ll"
+#line 2207 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     std::string raw(yytext+1);
@@ -5157,9 +5222,9 @@ YY_RULE_SETUP
                  raw.size() + 1);
 }
 	YY_BREAK
-case 199:
+case 202:
 YY_RULE_SETUP
-#line 2182 "dhcp4_lexer.ll"
+#line 2215 "dhcp4_lexer.ll"
 {
     /* Bad string with an open unicode escape at the end */
     std::string raw(yytext+1);
@@ -5175,39 +5240,39 @@ YY_RULE_SETUP
                  pos + 1);
 }
 	YY_BREAK
-case 200:
+case 203:
 YY_RULE_SETUP
-#line 2197 "dhcp4_lexer.ll"
+#line 2230 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
 	YY_BREAK
-case 201:
+case 204:
 YY_RULE_SETUP
-#line 2198 "dhcp4_lexer.ll"
+#line 2231 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
 	YY_BREAK
-case 202:
+case 205:
 YY_RULE_SETUP
-#line 2199 "dhcp4_lexer.ll"
+#line 2232 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
 	YY_BREAK
-case 203:
+case 206:
 YY_RULE_SETUP
-#line 2200 "dhcp4_lexer.ll"
+#line 2233 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
 	YY_BREAK
-case 204:
+case 207:
 YY_RULE_SETUP
-#line 2201 "dhcp4_lexer.ll"
+#line 2234 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
 	YY_BREAK
-case 205:
+case 208:
 YY_RULE_SETUP
-#line 2202 "dhcp4_lexer.ll"
+#line 2235 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
 	YY_BREAK
-case 206:
+case 209:
 YY_RULE_SETUP
-#line 2204 "dhcp4_lexer.ll"
+#line 2237 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -5226,9 +5291,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
 	YY_BREAK
-case 207:
+case 210:
 YY_RULE_SETUP
-#line 2222 "dhcp4_lexer.ll"
+#line 2255 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -5242,43 +5307,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
 	YY_BREAK
-case 208:
+case 211:
 YY_RULE_SETUP
-#line 2235 "dhcp4_lexer.ll"
+#line 2268 "dhcp4_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
 	YY_BREAK
-case 209:
+case 212:
 YY_RULE_SETUP
-#line 2240 "dhcp4_lexer.ll"
+#line 2273 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
 	YY_BREAK
-case 210:
+case 213:
 YY_RULE_SETUP
-#line 2244 "dhcp4_lexer.ll"
+#line 2277 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
 	YY_BREAK
-case 211:
+case 214:
 YY_RULE_SETUP
-#line 2246 "dhcp4_lexer.ll"
+#line 2279 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
 	YY_BREAK
-case 212:
+case 215:
 YY_RULE_SETUP
-#line 2248 "dhcp4_lexer.ll"
+#line 2281 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
 	YY_BREAK
-case 213:
+case 216:
 YY_RULE_SETUP
-#line 2250 "dhcp4_lexer.ll"
+#line 2283 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 2252 "dhcp4_lexer.ll"
+#line 2285 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -5302,12 +5367,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
 	YY_BREAK
-case 214:
+case 217:
 YY_RULE_SETUP
-#line 2275 "dhcp4_lexer.ll"
+#line 2308 "dhcp4_lexer.ll"
 ECHO;
 	YY_BREAK
-#line 5310 "dhcp4_lexer.cc"
+#line 5375 "dhcp4_lexer.cc"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -5626,7 +5691,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 >= 2061 )
+			if ( yy_current_state >= 2100 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5659,11 +5724,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 >= 2061 )
+		if ( yy_current_state >= 2100 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 2060);
+	yy_is_jam = (yy_current_state == 2099);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -6412,7 +6477,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 2275 "dhcp4_lexer.ll"
+#line 2308 "dhcp4_lexer.ll"
 
 
 using namespace isc::dhcp;
diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll
index a2d9da3547..7ac81e3f61 100644
--- a/src/bin/dhcp4/dhcp4_lexer.ll
+++ b/src/bin/dhcp4/dhcp4_lexer.ll
@@ -501,6 +501,39 @@ ControlCharacterFill            [^"\\]|\\["\\/bfnrtu]
     }
 }
 
+\"read-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_READ_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("read-timeout", driver.loc_);
+    }
+}
+
+\"write-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_WRITE_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("write-timeout", driver.loc_);
+    }
+}
+
+\"tcp-user-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser4Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_TCP_USER_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("tcp-user-timeout", driver.loc_);
+    }
+}
+
 \"reconnect-wait-time\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc
index 3255eb117f..8ce1501b0e 100644
--- a/src/bin/dhcp4/dhcp4_parser.cc
+++ b/src/bin/dhcp4/dhcp4_parser.cc
@@ -402,79 +402,79 @@ namespace isc { namespace dhcp {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 408 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
 #line 414 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
 #line 420 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
 #line 426 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 432 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 438 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 444 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_socket_type: // socket_type
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 450 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_outbound_interface_value: // outbound_interface_value
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 456 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_db_type: // db_type
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 462 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 468 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_hr_mode: // hr_mode
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 474 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 286 "dhcp4_parser.yy"
+#line 289 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 480 "dhcp4_parser.cc"
         break;
@@ -755,127 +755,127 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 295 "dhcp4_parser.yy"
+#line 298 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 761 "dhcp4_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 296 "dhcp4_parser.yy"
+#line 299 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.CONFIG; }
 #line 767 "dhcp4_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 297 "dhcp4_parser.yy"
+#line 300 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.DHCP4; }
 #line 773 "dhcp4_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 298 "dhcp4_parser.yy"
+#line 301 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 779 "dhcp4_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 299 "dhcp4_parser.yy"
+#line 302 "dhcp4_parser.yy"
                    { ctx.ctx_ = ctx.SUBNET4; }
 #line 785 "dhcp4_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 300 "dhcp4_parser.yy"
+#line 303 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.POOLS; }
 #line 791 "dhcp4_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 301 "dhcp4_parser.yy"
+#line 304 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 797 "dhcp4_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 302 "dhcp4_parser.yy"
+#line 305 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.DHCP4; }
 #line 803 "dhcp4_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 303 "dhcp4_parser.yy"
+#line 306 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 809 "dhcp4_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 304 "dhcp4_parser.yy"
+#line 307 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 815 "dhcp4_parser.cc"
     break;
 
   case 22: // $@11: %empty
-#line 305 "dhcp4_parser.yy"
+#line 308 "dhcp4_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 821 "dhcp4_parser.cc"
     break;
 
   case 24: // $@12: %empty
-#line 306 "dhcp4_parser.yy"
+#line 309 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 827 "dhcp4_parser.cc"
     break;
 
   case 26: // $@13: %empty
-#line 307 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
                           { ctx.ctx_ = ctx.CONFIG_CONTROL; }
 #line 833 "dhcp4_parser.cc"
     break;
 
   case 28: // value: "integer"
-#line 315 "dhcp4_parser.yy"
+#line 318 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 839 "dhcp4_parser.cc"
     break;
 
   case 29: // value: "floating point"
-#line 316 "dhcp4_parser.yy"
+#line 319 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 845 "dhcp4_parser.cc"
     break;
 
   case 30: // value: "boolean"
-#line 317 "dhcp4_parser.yy"
+#line 320 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 851 "dhcp4_parser.cc"
     break;
 
   case 31: // value: "constant string"
-#line 318 "dhcp4_parser.yy"
+#line 321 "dhcp4_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 857 "dhcp4_parser.cc"
     break;
 
   case 32: // value: "null"
-#line 319 "dhcp4_parser.yy"
+#line 322 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 863 "dhcp4_parser.cc"
     break;
 
   case 33: // value: map2
-#line 320 "dhcp4_parser.yy"
+#line 323 "dhcp4_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 869 "dhcp4_parser.cc"
     break;
 
   case 34: // value: list_generic
-#line 321 "dhcp4_parser.yy"
+#line 324 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 875 "dhcp4_parser.cc"
     break;
 
   case 35: // sub_json: value
-#line 324 "dhcp4_parser.yy"
+#line 327 "dhcp4_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
@@ -884,7 +884,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 36: // $@14: %empty
-#line 329 "dhcp4_parser.yy"
+#line 332 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -895,7 +895,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 37: // map2: "{" $@14 map_content "}"
-#line 334 "dhcp4_parser.yy"
+#line 337 "dhcp4_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -905,13 +905,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 38: // map_value: map2
-#line 340 "dhcp4_parser.yy"
+#line 343 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 911 "dhcp4_parser.cc"
     break;
 
   case 41: // not_empty_map: "constant string" ":" value
-#line 347 "dhcp4_parser.yy"
+#line 350 "dhcp4_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
@@ -921,7 +921,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 352 "dhcp4_parser.yy"
+#line 355 "dhcp4_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -932,7 +932,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 43: // not_empty_map: not_empty_map ","
-#line 358 "dhcp4_parser.yy"
+#line 361 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
@@ -940,7 +940,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44: // $@15: %empty
-#line 363 "dhcp4_parser.yy"
+#line 366 "dhcp4_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -949,7 +949,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45: // list_generic: "[" $@15 list_content "]"
-#line 366 "dhcp4_parser.yy"
+#line 369 "dhcp4_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
@@ -957,7 +957,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 48: // not_empty_list: value
-#line 374 "dhcp4_parser.yy"
+#line 377 "dhcp4_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -966,7 +966,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49: // not_empty_list: not_empty_list "," value
-#line 378 "dhcp4_parser.yy"
+#line 381 "dhcp4_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -975,7 +975,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50: // not_empty_list: not_empty_list ","
-#line 382 "dhcp4_parser.yy"
+#line 385 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
@@ -983,7 +983,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51: // $@16: %empty
-#line 388 "dhcp4_parser.yy"
+#line 391 "dhcp4_parser.yy"
                               {
     // List parsing about to start
 }
@@ -991,7 +991,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52: // list_strings: "[" $@16 list_strings_content "]"
-#line 390 "dhcp4_parser.yy"
+#line 393 "dhcp4_parser.yy"
                                        {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -1000,7 +1000,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55: // not_empty_list_strings: "constant string"
-#line 399 "dhcp4_parser.yy"
+#line 402 "dhcp4_parser.yy"
                                {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1009,7 +1009,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 403 "dhcp4_parser.yy"
+#line 406 "dhcp4_parser.yy"
                                                             {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1018,7 +1018,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57: // not_empty_list_strings: not_empty_list_strings ","
-#line 407 "dhcp4_parser.yy"
+#line 410 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
@@ -1026,7 +1026,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58: // unknown_map_entry: "constant string" ":"
-#line 417 "dhcp4_parser.yy"
+#line 420 "dhcp4_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
@@ -1037,7 +1037,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59: // $@17: %empty
-#line 426 "dhcp4_parser.yy"
+#line 429 "dhcp4_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1048,7 +1048,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 60: // syntax_map: "{" $@17 global_object "}"
-#line 431 "dhcp4_parser.yy"
+#line 434 "dhcp4_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1061,7 +1061,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 61: // $@18: %empty
-#line 441 "dhcp4_parser.yy"
+#line 444 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1076,7 +1076,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
-#line 450 "dhcp4_parser.yy"
+#line 453 "dhcp4_parser.yy"
                                                     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -1086,7 +1086,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 64: // global_object_comma: global_object ","
-#line 458 "dhcp4_parser.yy"
+#line 461 "dhcp4_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
@@ -1094,7 +1094,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 65: // $@19: %empty
-#line 464 "dhcp4_parser.yy"
+#line 467 "dhcp4_parser.yy"
                           {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1104,7 +1104,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 66: // sub_dhcp4: "{" $@19 global_params "}"
-#line 468 "dhcp4_parser.yy"
+#line 471 "dhcp4_parser.yy"
                                {
     // No global parameter is required
     // parsing completed
@@ -1113,7 +1113,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 69: // global_params: global_params ","
-#line 475 "dhcp4_parser.yy"
+#line 478 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
@@ -1121,7 +1121,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 134: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 548 "dhcp4_parser.yy"
+#line 551 "dhcp4_parser.yy"
                                              {
     ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1131,7 +1131,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 135: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 554 "dhcp4_parser.yy"
+#line 557 "dhcp4_parser.yy"
                                                      {
     ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1141,7 +1141,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 136: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 560 "dhcp4_parser.yy"
+#line 563 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1151,7 +1151,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 137: // renew_timer: "renew-timer" ":" "integer"
-#line 566 "dhcp4_parser.yy"
+#line 569 "dhcp4_parser.yy"
                                        {
     ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1161,7 +1161,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 138: // rebind_timer: "rebind-timer" ":" "integer"
-#line 572 "dhcp4_parser.yy"
+#line 575 "dhcp4_parser.yy"
                                          {
     ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1171,7 +1171,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 139: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 578 "dhcp4_parser.yy"
+#line 581 "dhcp4_parser.yy"
                                                        {
     ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
     ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1181,7 +1181,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 140: // t1_percent: "t1-percent" ":" "floating point"
-#line 584 "dhcp4_parser.yy"
+#line 587 "dhcp4_parser.yy"
                                    {
     ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1191,7 +1191,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 141: // t2_percent: "t2-percent" ":" "floating point"
-#line 590 "dhcp4_parser.yy"
+#line 593 "dhcp4_parser.yy"
                                    {
     ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1201,7 +1201,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 142: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 596 "dhcp4_parser.yy"
+#line 599 "dhcp4_parser.yy"
                                              {
     ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
     ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1211,7 +1211,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 143: // cache_max_age: "cache-max-age" ":" "integer"
-#line 602 "dhcp4_parser.yy"
+#line 605 "dhcp4_parser.yy"
                                            {
     ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1221,7 +1221,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 144: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 608 "dhcp4_parser.yy"
+#line 611 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
     ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1231,7 +1231,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 145: // $@20: %empty
-#line 614 "dhcp4_parser.yy"
+#line 617 "dhcp4_parser.yy"
                        {
     ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1240,7 +1240,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 146: // server_tag: "server-tag" $@20 ":" "constant string"
-#line 617 "dhcp4_parser.yy"
+#line 620 "dhcp4_parser.yy"
                {
     ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
@@ -1250,7 +1250,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 147: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 623 "dhcp4_parser.yy"
+#line 626 "dhcp4_parser.yy"
                                                        {
     ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
     ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1260,7 +1260,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 148: // echo_client_id: "echo-client-id" ":" "boolean"
-#line 629 "dhcp4_parser.yy"
+#line 632 "dhcp4_parser.yy"
                                              {
     ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1270,7 +1270,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 149: // match_client_id: "match-client-id" ":" "boolean"
-#line 635 "dhcp4_parser.yy"
+#line 638 "dhcp4_parser.yy"
                                                {
     ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1280,7 +1280,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 150: // authoritative: "authoritative" ":" "boolean"
-#line 641 "dhcp4_parser.yy"
+#line 644 "dhcp4_parser.yy"
                                            {
     ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1290,7 +1290,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 151: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 647 "dhcp4_parser.yy"
+#line 650 "dhcp4_parser.yy"
                                                    {
     ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1300,7 +1300,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 152: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 653 "dhcp4_parser.yy"
+#line 656 "dhcp4_parser.yy"
                                                                {
     ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1310,7 +1310,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 153: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 659 "dhcp4_parser.yy"
+#line 662 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1320,7 +1320,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 154: // $@21: %empty
-#line 665 "dhcp4_parser.yy"
+#line 668 "dhcp4_parser.yy"
                                                    {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
     ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
@@ -1329,7 +1329,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 155: // ddns_replace_client_name: "ddns-replace-client-name" $@21 ":" ddns_replace_client_name_value
-#line 668 "dhcp4_parser.yy"
+#line 671 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1338,7 +1338,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 156: // ddns_replace_client_name_value: "when-present"
-#line 674 "dhcp4_parser.yy"
+#line 677 "dhcp4_parser.yy"
                  {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1346,7 +1346,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 157: // ddns_replace_client_name_value: "never"
-#line 677 "dhcp4_parser.yy"
+#line 680 "dhcp4_parser.yy"
           {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1354,7 +1354,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 158: // ddns_replace_client_name_value: "always"
-#line 680 "dhcp4_parser.yy"
+#line 683 "dhcp4_parser.yy"
            {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1362,7 +1362,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 159: // ddns_replace_client_name_value: "when-not-present"
-#line 683 "dhcp4_parser.yy"
+#line 686 "dhcp4_parser.yy"
                      {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1370,7 +1370,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 160: // ddns_replace_client_name_value: "boolean"
-#line 686 "dhcp4_parser.yy"
+#line 689 "dhcp4_parser.yy"
             {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -1379,7 +1379,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 161: // $@22: %empty
-#line 692 "dhcp4_parser.yy"
+#line 695 "dhcp4_parser.yy"
                                              {
     ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1388,7 +1388,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 162: // ddns_generated_prefix: "ddns-generated-prefix" $@22 ":" "constant string"
-#line 695 "dhcp4_parser.yy"
+#line 698 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-generated-prefix", s);
@@ -1398,7 +1398,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 163: // $@23: %empty
-#line 701 "dhcp4_parser.yy"
+#line 704 "dhcp4_parser.yy"
                                                {
     ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1407,7 +1407,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 164: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@23 ":" "constant string"
-#line 704 "dhcp4_parser.yy"
+#line 707 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-qualifying-suffix", s);
@@ -1417,7 +1417,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 165: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 710 "dhcp4_parser.yy"
+#line 713 "dhcp4_parser.yy"
                                                          {
     ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1427,7 +1427,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 166: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 716 "dhcp4_parser.yy"
+#line 719 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1437,7 +1437,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 167: // $@24: %empty
-#line 722 "dhcp4_parser.yy"
+#line 725 "dhcp4_parser.yy"
                                      {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1446,7 +1446,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 168: // hostname_char_set: "hostname-char-set" $@24 ":" "constant string"
-#line 725 "dhcp4_parser.yy"
+#line 728 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
@@ -1456,7 +1456,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 169: // $@25: %empty
-#line 731 "dhcp4_parser.yy"
+#line 734 "dhcp4_parser.yy"
                                                      {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1465,7 +1465,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 170: // hostname_char_replacement: "hostname-char-replacement" $@25 ":" "constant string"
-#line 734 "dhcp4_parser.yy"
+#line 737 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
@@ -1475,7 +1475,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 171: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 740 "dhcp4_parser.yy"
+#line 743 "dhcp4_parser.yy"
                                                        {
     ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1485,7 +1485,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 172: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 746 "dhcp4_parser.yy"
+#line 749 "dhcp4_parser.yy"
                                                                              {
     ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
     ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1495,7 +1495,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 173: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 752 "dhcp4_parser.yy"
+#line 755 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1505,7 +1505,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 174: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 758 "dhcp4_parser.yy"
+#line 761 "dhcp4_parser.yy"
                                                                                  {
     ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
     ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1515,7 +1515,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 175: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 764 "dhcp4_parser.yy"
+#line 767 "dhcp4_parser.yy"
                                                              {
     ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
     ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1525,7 +1525,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 176: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 770 "dhcp4_parser.yy"
+#line 773 "dhcp4_parser.yy"
                                                                    {
     ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
     ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1535,7 +1535,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 177: // $@26: %empty
-#line 776 "dhcp4_parser.yy"
+#line 779 "dhcp4_parser.yy"
                                      {
     ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1547,7 +1547,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 178: // interfaces_config: "interfaces-config" $@26 ":" "{" interfaces_config_params "}"
-#line 782 "dhcp4_parser.yy"
+#line 785 "dhcp4_parser.yy"
                                                                {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1557,7 +1557,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 181: // interfaces_config_params: interfaces_config_params ","
-#line 790 "dhcp4_parser.yy"
+#line 793 "dhcp4_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
@@ -1565,7 +1565,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 192: // $@27: %empty
-#line 807 "dhcp4_parser.yy"
+#line 810 "dhcp4_parser.yy"
                                 {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1575,7 +1575,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 193: // sub_interfaces4: "{" $@27 interfaces_config_params "}"
-#line 811 "dhcp4_parser.yy"
+#line 814 "dhcp4_parser.yy"
                                           {
     // No interfaces config param is required
     // parsing completed
@@ -1584,7 +1584,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 194: // $@28: %empty
-#line 816 "dhcp4_parser.yy"
+#line 819 "dhcp4_parser.yy"
                             {
     ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1596,7 +1596,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 195: // interfaces_list: "interfaces" $@28 ":" list_strings
-#line 822 "dhcp4_parser.yy"
+#line 825 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1605,7 +1605,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 196: // $@29: %empty
-#line 827 "dhcp4_parser.yy"
+#line 830 "dhcp4_parser.yy"
                                    {
     ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
@@ -1614,7 +1614,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 197: // dhcp_socket_type: "dhcp-socket-type" $@29 ":" socket_type
-#line 830 "dhcp4_parser.yy"
+#line 833 "dhcp4_parser.yy"
                     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1623,19 +1623,19 @@ namespace isc { namespace dhcp {
     break;
 
   case 198: // socket_type: "raw"
-#line 835 "dhcp4_parser.yy"
+#line 838 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
 #line 1629 "dhcp4_parser.cc"
     break;
 
   case 199: // socket_type: "udp"
-#line 836 "dhcp4_parser.yy"
+#line 839 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
 #line 1635 "dhcp4_parser.cc"
     break;
 
   case 200: // $@30: %empty
-#line 839 "dhcp4_parser.yy"
+#line 842 "dhcp4_parser.yy"
                                        {
     ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.OUTBOUND_INTERFACE);
@@ -1644,7 +1644,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 201: // outbound_interface: "outbound-interface" $@30 ":" outbound_interface_value
-#line 842 "dhcp4_parser.yy"
+#line 845 "dhcp4_parser.yy"
                                  {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1653,7 +1653,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 202: // outbound_interface_value: "same-as-inbound"
-#line 847 "dhcp4_parser.yy"
+#line 850 "dhcp4_parser.yy"
                                           {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
@@ -1661,7 +1661,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 203: // outbound_interface_value: "use-routing"
-#line 849 "dhcp4_parser.yy"
+#line 852 "dhcp4_parser.yy"
                 {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
@@ -1669,7 +1669,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 204: // re_detect: "re-detect" ":" "boolean"
-#line 853 "dhcp4_parser.yy"
+#line 856 "dhcp4_parser.yy"
                                    {
     ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1679,7 +1679,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 205: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 859 "dhcp4_parser.yy"
+#line 862 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1689,7 +1689,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 206: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 865 "dhcp4_parser.yy"
+#line 868 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1699,7 +1699,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 207: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 871 "dhcp4_parser.yy"
+#line 874 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1709,7 +1709,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 208: // $@31: %empty
-#line 877 "dhcp4_parser.yy"
+#line 880 "dhcp4_parser.yy"
                                {
     ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1721,7 +1721,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 209: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}"
-#line 883 "dhcp4_parser.yy"
+#line 886 "dhcp4_parser.yy"
                                                           {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1732,7 +1732,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 210: // $@32: %empty
-#line 890 "dhcp4_parser.yy"
+#line 893 "dhcp4_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1744,7 +1744,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 211: // sanity_checks: "sanity-checks" $@32 ":" "{" sanity_checks_params "}"
-#line 896 "dhcp4_parser.yy"
+#line 899 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1753,7 +1753,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 214: // sanity_checks_params: sanity_checks_params ","
-#line 903 "dhcp4_parser.yy"
+#line 906 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
@@ -1761,7 +1761,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 216: // $@33: %empty
-#line 910 "dhcp4_parser.yy"
+#line 913 "dhcp4_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1770,7 +1770,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 217: // lease_checks: "lease-checks" $@33 ":" "constant string"
-#line 913 "dhcp4_parser.yy"
+#line 916 "dhcp4_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -1790,7 +1790,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 218: // $@34: %empty
-#line 929 "dhcp4_parser.yy"
+#line 932 "dhcp4_parser.yy"
                                {
     ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1802,7 +1802,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 219: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}"
-#line 935 "dhcp4_parser.yy"
+#line 938 "dhcp4_parser.yy"
                                                           {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1813,7 +1813,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 220: // $@35: %empty
-#line 942 "dhcp4_parser.yy"
+#line 945 "dhcp4_parser.yy"
                                  {
     ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1825,7 +1825,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 221: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]"
-#line 948 "dhcp4_parser.yy"
+#line 951 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1834,7 +1834,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 226: // not_empty_database_list: not_empty_database_list ","
-#line 959 "dhcp4_parser.yy"
+#line 962 "dhcp4_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
@@ -1842,7 +1842,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 227: // $@36: %empty
-#line 964 "dhcp4_parser.yy"
+#line 967 "dhcp4_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1852,7 +1852,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 228: // database: "{" $@36 database_map_params "}"
-#line 968 "dhcp4_parser.yy"
+#line 971 "dhcp4_parser.yy"
                                      {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1862,15 +1862,15 @@ namespace isc { namespace dhcp {
     break;
 
   case 231: // database_map_params: database_map_params ","
-#line 976 "dhcp4_parser.yy"
+#line 979 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
 #line 1870 "dhcp4_parser.cc"
     break;
 
-  case 251: // $@37: %empty
-#line 1002 "dhcp4_parser.yy"
+  case 254: // $@37: %empty
+#line 1008 "dhcp4_parser.yy"
                     {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_TYPE);
@@ -1878,8 +1878,8 @@ namespace isc { namespace dhcp {
 #line 1879 "dhcp4_parser.cc"
     break;
 
-  case 252: // database_type: "type" $@37 ":" db_type
-#line 1005 "dhcp4_parser.yy"
+  case 255: // database_type: "type" $@37 ":" db_type
+#line 1011 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1887,26 +1887,26 @@ namespace isc { namespace dhcp {
 #line 1888 "dhcp4_parser.cc"
     break;
 
-  case 253: // db_type: "memfile"
-#line 1010 "dhcp4_parser.yy"
+  case 256: // db_type: "memfile"
+#line 1016 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1894 "dhcp4_parser.cc"
     break;
 
-  case 254: // db_type: "mysql"
-#line 1011 "dhcp4_parser.yy"
+  case 257: // db_type: "mysql"
+#line 1017 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1900 "dhcp4_parser.cc"
     break;
 
-  case 255: // db_type: "postgresql"
-#line 1012 "dhcp4_parser.yy"
+  case 258: // db_type: "postgresql"
+#line 1018 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1906 "dhcp4_parser.cc"
     break;
 
-  case 256: // $@38: %empty
-#line 1015 "dhcp4_parser.yy"
+  case 259: // $@38: %empty
+#line 1021 "dhcp4_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1914,8 +1914,8 @@ namespace isc { namespace dhcp {
 #line 1915 "dhcp4_parser.cc"
     break;
 
-  case 257: // user: "user" $@38 ":" "constant string"
-#line 1018 "dhcp4_parser.yy"
+  case 260: // user: "user" $@38 ":" "constant string"
+#line 1024 "dhcp4_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1924,8 +1924,8 @@ namespace isc { namespace dhcp {
 #line 1925 "dhcp4_parser.cc"
     break;
 
-  case 258: // $@39: %empty
-#line 1024 "dhcp4_parser.yy"
+  case 261: // $@39: %empty
+#line 1030 "dhcp4_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1933,8 +1933,8 @@ namespace isc { namespace dhcp {
 #line 1934 "dhcp4_parser.cc"
     break;
 
-  case 259: // password: "password" $@39 ":" "constant string"
-#line 1027 "dhcp4_parser.yy"
+  case 262: // password: "password" $@39 ":" "constant string"
+#line 1033 "dhcp4_parser.yy"
                {
     ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1943,8 +1943,8 @@ namespace isc { namespace dhcp {
 #line 1944 "dhcp4_parser.cc"
     break;
 
-  case 260: // $@40: %empty
-#line 1033 "dhcp4_parser.yy"
+  case 263: // $@40: %empty
+#line 1039 "dhcp4_parser.yy"
            {
     ctx.unique("host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1952,8 +1952,8 @@ namespace isc { namespace dhcp {
 #line 1953 "dhcp4_parser.cc"
     break;
 
-  case 261: // host: "host" $@40 ":" "constant string"
-#line 1036 "dhcp4_parser.yy"
+  case 264: // host: "host" $@40 ":" "constant string"
+#line 1042 "dhcp4_parser.yy"
                {
     ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1962,8 +1962,8 @@ namespace isc { namespace dhcp {
 #line 1963 "dhcp4_parser.cc"
     break;
 
-  case 262: // port: "port" ":" "integer"
-#line 1042 "dhcp4_parser.yy"
+  case 265: // port: "port" ":" "integer"
+#line 1048 "dhcp4_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1972,8 +1972,8 @@ namespace isc { namespace dhcp {
 #line 1973 "dhcp4_parser.cc"
     break;
 
-  case 263: // $@41: %empty
-#line 1048 "dhcp4_parser.yy"
+  case 266: // $@41: %empty
+#line 1054 "dhcp4_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1981,8 +1981,8 @@ namespace isc { namespace dhcp {
 #line 1982 "dhcp4_parser.cc"
     break;
 
-  case 264: // name: "name" $@41 ":" "constant string"
-#line 1051 "dhcp4_parser.yy"
+  case 267: // name: "name" $@41 ":" "constant string"
+#line 1057 "dhcp4_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1991,8 +1991,8 @@ namespace isc { namespace dhcp {
 #line 1992 "dhcp4_parser.cc"
     break;
 
-  case 265: // persist: "persist" ":" "boolean"
-#line 1057 "dhcp4_parser.yy"
+  case 268: // persist: "persist" ":" "boolean"
+#line 1063 "dhcp4_parser.yy"
                                {
     ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -2001,8 +2001,8 @@ namespace isc { namespace dhcp {
 #line 2002 "dhcp4_parser.cc"
     break;
 
-  case 266: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1063 "dhcp4_parser.yy"
+  case 269: // lfc_interval: "lfc-interval" ":" "integer"
+#line 1069 "dhcp4_parser.yy"
                                          {
     ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -2011,8 +2011,8 @@ namespace isc { namespace dhcp {
 #line 2012 "dhcp4_parser.cc"
     break;
 
-  case 267: // readonly: "readonly" ":" "boolean"
-#line 1069 "dhcp4_parser.yy"
+  case 270: // readonly: "readonly" ":" "boolean"
+#line 1075 "dhcp4_parser.yy"
                                  {
     ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -2021,8 +2021,8 @@ namespace isc { namespace dhcp {
 #line 2022 "dhcp4_parser.cc"
     break;
 
-  case 268: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1075 "dhcp4_parser.yy"
+  case 271: // connect_timeout: "connect-timeout" ":" "integer"
+#line 1081 "dhcp4_parser.yy"
                                                {
     ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -2031,150 +2031,180 @@ namespace isc { namespace dhcp {
 #line 2032 "dhcp4_parser.cc"
     break;
 
-  case 269: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1081 "dhcp4_parser.yy"
+  case 272: // read_timeout: "read-timeout" ":" "integer"
+#line 1087 "dhcp4_parser.yy"
+                                         {
+    ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("read-timeout", n);
+}
+#line 2042 "dhcp4_parser.cc"
+    break;
+
+  case 273: // write_timeout: "write-timeout" ":" "integer"
+#line 1093 "dhcp4_parser.yy"
+                                           {
+    ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("write-timeout", n);
+}
+#line 2052 "dhcp4_parser.cc"
+    break;
+
+  case 274: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
+#line 1099 "dhcp4_parser.yy"
+                                                 {
+    ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("tcp-user-timeout", n);
+}
+#line 2062 "dhcp4_parser.cc"
+    break;
+
+  case 275: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
+#line 1105 "dhcp4_parser.yy"
                                                        {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].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 2042 "dhcp4_parser.cc"
+#line 2072 "dhcp4_parser.cc"
     break;
 
-  case 270: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1087 "dhcp4_parser.yy"
+  case 276: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
+#line 1111 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].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 2052 "dhcp4_parser.cc"
+#line 2082 "dhcp4_parser.cc"
     break;
 
-  case 271: // $@42: %empty
-#line 1093 "dhcp4_parser.yy"
+  case 277: // $@42: %empty
+#line 1117 "dhcp4_parser.yy"
                  {
     ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_ON_FAIL);
 }
-#line 2061 "dhcp4_parser.cc"
+#line 2091 "dhcp4_parser.cc"
     break;
 
-  case 272: // on_fail: "on-fail" $@42 ":" on_fail_mode
-#line 1096 "dhcp4_parser.yy"
+  case 278: // on_fail: "on-fail" $@42 ":" on_fail_mode
+#line 1120 "dhcp4_parser.yy"
                      {
     ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2070 "dhcp4_parser.cc"
+#line 2100 "dhcp4_parser.cc"
     break;
 
-  case 273: // on_fail_mode: "stop-retry-exit"
-#line 1101 "dhcp4_parser.yy"
+  case 279: // on_fail_mode: "stop-retry-exit"
+#line 1125 "dhcp4_parser.yy"
                               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2076 "dhcp4_parser.cc"
+#line 2106 "dhcp4_parser.cc"
     break;
 
-  case 274: // on_fail_mode: "serve-retry-exit"
-#line 1102 "dhcp4_parser.yy"
+  case 280: // on_fail_mode: "serve-retry-exit"
+#line 1126 "dhcp4_parser.yy"
                                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2082 "dhcp4_parser.cc"
+#line 2112 "dhcp4_parser.cc"
     break;
 
-  case 275: // on_fail_mode: "serve-retry-continue"
-#line 1103 "dhcp4_parser.yy"
+  case 281: // on_fail_mode: "serve-retry-continue"
+#line 1127 "dhcp4_parser.yy"
                                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2088 "dhcp4_parser.cc"
+#line 2118 "dhcp4_parser.cc"
     break;
 
-  case 276: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1106 "dhcp4_parser.yy"
+  case 282: // max_row_errors: "max-row-errors" ":" "integer"
+#line 1130 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].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 2098 "dhcp4_parser.cc"
+#line 2128 "dhcp4_parser.cc"
     break;
 
-  case 277: // $@43: %empty
-#line 1112 "dhcp4_parser.yy"
+  case 283: // $@43: %empty
+#line 1136 "dhcp4_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2107 "dhcp4_parser.cc"
+#line 2137 "dhcp4_parser.cc"
     break;
 
-  case 278: // trust_anchor: "trust-anchor" $@43 ":" "constant string"
-#line 1115 "dhcp4_parser.yy"
+  case 284: // trust_anchor: "trust-anchor" $@43 ":" "constant string"
+#line 1139 "dhcp4_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 2117 "dhcp4_parser.cc"
+#line 2147 "dhcp4_parser.cc"
     break;
 
-  case 279: // $@44: %empty
-#line 1121 "dhcp4_parser.yy"
+  case 285: // $@44: %empty
+#line 1145 "dhcp4_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2126 "dhcp4_parser.cc"
+#line 2156 "dhcp4_parser.cc"
     break;
 
-  case 280: // cert_file: "cert-file" $@44 ":" "constant string"
-#line 1124 "dhcp4_parser.yy"
+  case 286: // cert_file: "cert-file" $@44 ":" "constant string"
+#line 1148 "dhcp4_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 2136 "dhcp4_parser.cc"
+#line 2166 "dhcp4_parser.cc"
     break;
 
-  case 281: // $@45: %empty
-#line 1130 "dhcp4_parser.yy"
+  case 287: // $@45: %empty
+#line 1154 "dhcp4_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2145 "dhcp4_parser.cc"
+#line 2175 "dhcp4_parser.cc"
     break;
 
-  case 282: // key_file: "key-file" $@45 ":" "constant string"
-#line 1133 "dhcp4_parser.yy"
+  case 288: // key_file: "key-file" $@45 ":" "constant string"
+#line 1157 "dhcp4_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 2155 "dhcp4_parser.cc"
+#line 2185 "dhcp4_parser.cc"
     break;
 
-  case 283: // $@46: %empty
-#line 1139 "dhcp4_parser.yy"
+  case 289: // $@46: %empty
+#line 1163 "dhcp4_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2164 "dhcp4_parser.cc"
+#line 2194 "dhcp4_parser.cc"
     break;
 
-  case 284: // cipher_list: "cipher-list" $@46 ":" "constant string"
-#line 1142 "dhcp4_parser.yy"
+  case 290: // cipher_list: "cipher-list" $@46 ":" "constant string"
+#line 1166 "dhcp4_parser.yy"
                {
     ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cipher-list", cl);
     ctx.leave();
 }
-#line 2174 "dhcp4_parser.cc"
+#line 2204 "dhcp4_parser.cc"
     break;
 
-  case 285: // $@47: %empty
-#line 1148 "dhcp4_parser.yy"
+  case 291: // $@47: %empty
+#line 1172 "dhcp4_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2182,73 +2212,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2186 "dhcp4_parser.cc"
+#line 2216 "dhcp4_parser.cc"
     break;
 
-  case 286: // host_reservation_identifiers: "host-reservation-identifiers" $@47 ":" "[" host_reservation_identifiers_list "]"
-#line 1154 "dhcp4_parser.yy"
+  case 292: // host_reservation_identifiers: "host-reservation-identifiers" $@47 ":" "[" host_reservation_identifiers_list "]"
+#line 1178 "dhcp4_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2195 "dhcp4_parser.cc"
+#line 2225 "dhcp4_parser.cc"
     break;
 
-  case 289: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1161 "dhcp4_parser.yy"
+  case 295: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
+#line 1185 "dhcp4_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2203 "dhcp4_parser.cc"
+#line 2233 "dhcp4_parser.cc"
     break;
 
-  case 295: // duid_id: "duid"
-#line 1173 "dhcp4_parser.yy"
+  case 301: // duid_id: "duid"
+#line 1197 "dhcp4_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2212 "dhcp4_parser.cc"
+#line 2242 "dhcp4_parser.cc"
     break;
 
-  case 296: // hw_address_id: "hw-address"
-#line 1178 "dhcp4_parser.yy"
+  case 302: // hw_address_id: "hw-address"
+#line 1202 "dhcp4_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2221 "dhcp4_parser.cc"
+#line 2251 "dhcp4_parser.cc"
     break;
 
-  case 297: // circuit_id: "circuit-id"
-#line 1183 "dhcp4_parser.yy"
+  case 303: // circuit_id: "circuit-id"
+#line 1207 "dhcp4_parser.yy"
                        {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 2230 "dhcp4_parser.cc"
+#line 2260 "dhcp4_parser.cc"
     break;
 
-  case 298: // client_id: "client-id"
-#line 1188 "dhcp4_parser.yy"
+  case 304: // client_id: "client-id"
+#line 1212 "dhcp4_parser.yy"
                      {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 2239 "dhcp4_parser.cc"
+#line 2269 "dhcp4_parser.cc"
     break;
 
-  case 299: // flex_id: "flex-id"
-#line 1193 "dhcp4_parser.yy"
+  case 305: // flex_id: "flex-id"
+#line 1217 "dhcp4_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2248 "dhcp4_parser.cc"
+#line 2278 "dhcp4_parser.cc"
     break;
 
-  case 300: // $@48: %empty
-#line 1200 "dhcp4_parser.yy"
+  case 306: // $@48: %empty
+#line 1224 "dhcp4_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2256,60 +2286,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2260 "dhcp4_parser.cc"
+#line 2290 "dhcp4_parser.cc"
     break;
 
-  case 301: // dhcp_multi_threading: "multi-threading" $@48 ":" "{" multi_threading_params "}"
-#line 1206 "dhcp4_parser.yy"
+  case 307: // dhcp_multi_threading: "multi-threading" $@48 ":" "{" multi_threading_params "}"
+#line 1230 "dhcp4_parser.yy"
                                                              {
     // The enable parameter is required.
     ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2271 "dhcp4_parser.cc"
+#line 2301 "dhcp4_parser.cc"
     break;
 
-  case 304: // multi_threading_params: multi_threading_params ","
-#line 1215 "dhcp4_parser.yy"
+  case 310: // multi_threading_params: multi_threading_params ","
+#line 1239 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2279 "dhcp4_parser.cc"
+#line 2309 "dhcp4_parser.cc"
     break;
 
-  case 311: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1228 "dhcp4_parser.yy"
+  case 317: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
+#line 1252 "dhcp4_parser.yy"
                                                              {
     ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-multi-threading", b);
 }
-#line 2289 "dhcp4_parser.cc"
+#line 2319 "dhcp4_parser.cc"
     break;
 
-  case 312: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1234 "dhcp4_parser.yy"
+  case 318: // thread_pool_size: "thread-pool-size" ":" "integer"
+#line 1258 "dhcp4_parser.yy"
                                                  {
     ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("thread-pool-size", prf);
 }
-#line 2299 "dhcp4_parser.cc"
+#line 2329 "dhcp4_parser.cc"
     break;
 
-  case 313: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1240 "dhcp4_parser.yy"
+  case 319: // packet_queue_size: "packet-queue-size" ":" "integer"
+#line 1264 "dhcp4_parser.yy"
                                                    {
     ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("packet-queue-size", prf);
 }
-#line 2309 "dhcp4_parser.cc"
+#line 2339 "dhcp4_parser.cc"
     break;
 
-  case 314: // $@49: %empty
-#line 1246 "dhcp4_parser.yy"
+  case 320: // $@49: %empty
+#line 1270 "dhcp4_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2317,113 +2347,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2321 "dhcp4_parser.cc"
+#line 2351 "dhcp4_parser.cc"
     break;
 
-  case 315: // hooks_libraries: "hooks-libraries" $@49 ":" "[" hooks_libraries_list "]"
-#line 1252 "dhcp4_parser.yy"
+  case 321: // hooks_libraries: "hooks-libraries" $@49 ":" "[" hooks_libraries_list "]"
+#line 1276 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2330 "dhcp4_parser.cc"
+#line 2360 "dhcp4_parser.cc"
     break;
 
-  case 320: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1263 "dhcp4_parser.yy"
+  case 326: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
+#line 1287 "dhcp4_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2338 "dhcp4_parser.cc"
+#line 2368 "dhcp4_parser.cc"
     break;
 
-  case 321: // $@50: %empty
-#line 1268 "dhcp4_parser.yy"
+  case 327: // $@50: %empty
+#line 1292 "dhcp4_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2348 "dhcp4_parser.cc"
+#line 2378 "dhcp4_parser.cc"
     break;
 
-  case 322: // hooks_library: "{" $@50 hooks_params "}"
-#line 1272 "dhcp4_parser.yy"
+  case 328: // hooks_library: "{" $@50 hooks_params "}"
+#line 1296 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2358 "dhcp4_parser.cc"
+#line 2388 "dhcp4_parser.cc"
     break;
 
-  case 323: // $@51: %empty
-#line 1278 "dhcp4_parser.yy"
+  case 329: // $@51: %empty
+#line 1302 "dhcp4_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2368 "dhcp4_parser.cc"
+#line 2398 "dhcp4_parser.cc"
     break;
 
-  case 324: // sub_hooks_library: "{" $@51 hooks_params "}"
-#line 1282 "dhcp4_parser.yy"
+  case 330: // sub_hooks_library: "{" $@51 hooks_params "}"
+#line 1306 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2378 "dhcp4_parser.cc"
+#line 2408 "dhcp4_parser.cc"
     break;
 
-  case 327: // hooks_params: hooks_params ","
-#line 1290 "dhcp4_parser.yy"
+  case 333: // hooks_params: hooks_params ","
+#line 1314 "dhcp4_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2386 "dhcp4_parser.cc"
+#line 2416 "dhcp4_parser.cc"
     break;
 
-  case 331: // $@52: %empty
-#line 1300 "dhcp4_parser.yy"
+  case 337: // $@52: %empty
+#line 1324 "dhcp4_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2395 "dhcp4_parser.cc"
+#line 2425 "dhcp4_parser.cc"
     break;
 
-  case 332: // library: "library" $@52 ":" "constant string"
-#line 1303 "dhcp4_parser.yy"
+  case 338: // library: "library" $@52 ":" "constant string"
+#line 1327 "dhcp4_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 2405 "dhcp4_parser.cc"
+#line 2435 "dhcp4_parser.cc"
     break;
 
-  case 333: // $@53: %empty
-#line 1309 "dhcp4_parser.yy"
+  case 339: // $@53: %empty
+#line 1333 "dhcp4_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2414 "dhcp4_parser.cc"
+#line 2444 "dhcp4_parser.cc"
     break;
 
-  case 334: // parameters: "parameters" $@53 ":" map_value
-#line 1312 "dhcp4_parser.yy"
+  case 340: // parameters: "parameters" $@53 ":" map_value
+#line 1336 "dhcp4_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2423 "dhcp4_parser.cc"
+#line 2453 "dhcp4_parser.cc"
     break;
 
-  case 335: // $@54: %empty
-#line 1318 "dhcp4_parser.yy"
+  case 341: // $@54: %empty
+#line 1342 "dhcp4_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2431,89 +2461,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2435 "dhcp4_parser.cc"
+#line 2465 "dhcp4_parser.cc"
     break;
 
-  case 336: // expired_leases_processing: "expired-leases-processing" $@54 ":" "{" expired_leases_params "}"
-#line 1324 "dhcp4_parser.yy"
+  case 342: // expired_leases_processing: "expired-leases-processing" $@54 ":" "{" expired_leases_params "}"
+#line 1348 "dhcp4_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2445 "dhcp4_parser.cc"
+#line 2475 "dhcp4_parser.cc"
     break;
 
-  case 339: // expired_leases_params: expired_leases_params ","
-#line 1332 "dhcp4_parser.yy"
+  case 345: // expired_leases_params: expired_leases_params ","
+#line 1356 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2453 "dhcp4_parser.cc"
+#line 2483 "dhcp4_parser.cc"
     break;
 
-  case 346: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1345 "dhcp4_parser.yy"
+  case 352: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
+#line 1369 "dhcp4_parser.yy"
                                                                {
     ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].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 2463 "dhcp4_parser.cc"
+#line 2493 "dhcp4_parser.cc"
     break;
 
-  case 347: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1351 "dhcp4_parser.yy"
+  case 353: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
+#line 1375 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].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 2473 "dhcp4_parser.cc"
+#line 2503 "dhcp4_parser.cc"
     break;
 
-  case 348: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1357 "dhcp4_parser.yy"
+  case 354: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
+#line 1381 "dhcp4_parser.yy"
                                                        {
     ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].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 2483 "dhcp4_parser.cc"
+#line 2513 "dhcp4_parser.cc"
     break;
 
-  case 349: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1363 "dhcp4_parser.yy"
+  case 355: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
+#line 1387 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].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 2493 "dhcp4_parser.cc"
+#line 2523 "dhcp4_parser.cc"
     break;
 
-  case 350: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1369 "dhcp4_parser.yy"
+  case 356: // max_reclaim_time: "max-reclaim-time" ":" "integer"
+#line 1393 "dhcp4_parser.yy"
                                                  {
     ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].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 2503 "dhcp4_parser.cc"
+#line 2533 "dhcp4_parser.cc"
     break;
 
-  case 351: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1375 "dhcp4_parser.yy"
+  case 357: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
+#line 1399 "dhcp4_parser.yy"
                                                                {
     ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].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 2513 "dhcp4_parser.cc"
+#line 2543 "dhcp4_parser.cc"
     break;
 
-  case 352: // $@55: %empty
-#line 1384 "dhcp4_parser.yy"
+  case 358: // $@55: %empty
+#line 1408 "dhcp4_parser.yy"
                       {
     ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2521,38 +2551,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 2525 "dhcp4_parser.cc"
+#line 2555 "dhcp4_parser.cc"
     break;
 
-  case 353: // subnet4_list: "subnet4" $@55 ":" "[" subnet4_list_content "]"
-#line 1390 "dhcp4_parser.yy"
+  case 359: // subnet4_list: "subnet4" $@55 ":" "[" subnet4_list_content "]"
+#line 1414 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2534 "dhcp4_parser.cc"
+#line 2564 "dhcp4_parser.cc"
     break;
 
-  case 358: // not_empty_subnet4_list: not_empty_subnet4_list ","
-#line 1404 "dhcp4_parser.yy"
+  case 364: // not_empty_subnet4_list: not_empty_subnet4_list ","
+#line 1428 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2542 "dhcp4_parser.cc"
+#line 2572 "dhcp4_parser.cc"
     break;
 
-  case 359: // $@56: %empty
-#line 1413 "dhcp4_parser.yy"
+  case 365: // $@56: %empty
+#line 1437 "dhcp4_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2552 "dhcp4_parser.cc"
+#line 2582 "dhcp4_parser.cc"
     break;
 
-  case 360: // subnet4: "{" $@56 subnet4_params "}"
-#line 1417 "dhcp4_parser.yy"
+  case 366: // subnet4: "{" $@56 subnet4_params "}"
+#line 1441 "dhcp4_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2574,153 +2604,153 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2578 "dhcp4_parser.cc"
+#line 2608 "dhcp4_parser.cc"
     break;
 
-  case 361: // $@57: %empty
-#line 1439 "dhcp4_parser.yy"
+  case 367: // $@57: %empty
+#line 1463 "dhcp4_parser.yy"
                             {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2588 "dhcp4_parser.cc"
+#line 2618 "dhcp4_parser.cc"
     break;
 
-  case 362: // sub_subnet4: "{" $@57 subnet4_params "}"
-#line 1443 "dhcp4_parser.yy"
+  case 368: // sub_subnet4: "{" $@57 subnet4_params "}"
+#line 1467 "dhcp4_parser.yy"
                                 {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2598 "dhcp4_parser.cc"
+#line 2628 "dhcp4_parser.cc"
     break;
 
-  case 365: // subnet4_params: subnet4_params ","
-#line 1452 "dhcp4_parser.yy"
+  case 371: // subnet4_params: subnet4_params ","
+#line 1476 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2606 "dhcp4_parser.cc"
+#line 2636 "dhcp4_parser.cc"
     break;
 
-  case 411: // $@58: %empty
-#line 1505 "dhcp4_parser.yy"
+  case 417: // $@58: %empty
+#line 1529 "dhcp4_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2615 "dhcp4_parser.cc"
+#line 2645 "dhcp4_parser.cc"
     break;
 
-  case 412: // subnet: "subnet" $@58 ":" "constant string"
-#line 1508 "dhcp4_parser.yy"
+  case 418: // subnet: "subnet" $@58 ":" "constant string"
+#line 1532 "dhcp4_parser.yy"
                {
     ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2625 "dhcp4_parser.cc"
+#line 2655 "dhcp4_parser.cc"
     break;
 
-  case 413: // $@59: %empty
-#line 1514 "dhcp4_parser.yy"
+  case 419: // $@59: %empty
+#line 1538 "dhcp4_parser.yy"
                                            {
     ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2634 "dhcp4_parser.cc"
+#line 2664 "dhcp4_parser.cc"
     break;
 
-  case 414: // subnet_4o6_interface: "4o6-interface" $@59 ":" "constant string"
-#line 1517 "dhcp4_parser.yy"
+  case 420: // subnet_4o6_interface: "4o6-interface" $@59 ":" "constant string"
+#line 1541 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 2644 "dhcp4_parser.cc"
+#line 2674 "dhcp4_parser.cc"
     break;
 
-  case 415: // $@60: %empty
-#line 1523 "dhcp4_parser.yy"
+  case 421: // $@60: %empty
+#line 1547 "dhcp4_parser.yy"
                                                  {
     ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2653 "dhcp4_parser.cc"
+#line 2683 "dhcp4_parser.cc"
     break;
 
-  case 416: // subnet_4o6_interface_id: "4o6-interface-id" $@60 ":" "constant string"
-#line 1526 "dhcp4_parser.yy"
+  case 422: // subnet_4o6_interface_id: "4o6-interface-id" $@60 ":" "constant string"
+#line 1550 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
     ctx.leave();
 }
-#line 2663 "dhcp4_parser.cc"
+#line 2693 "dhcp4_parser.cc"
     break;
 
-  case 417: // $@61: %empty
-#line 1532 "dhcp4_parser.yy"
+  case 423: // $@61: %empty
+#line 1556 "dhcp4_parser.yy"
                                      {
     ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2672 "dhcp4_parser.cc"
+#line 2702 "dhcp4_parser.cc"
     break;
 
-  case 418: // subnet_4o6_subnet: "4o6-subnet" $@61 ":" "constant string"
-#line 1535 "dhcp4_parser.yy"
+  case 424: // subnet_4o6_subnet: "4o6-subnet" $@61 ":" "constant string"
+#line 1559 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 2682 "dhcp4_parser.cc"
+#line 2712 "dhcp4_parser.cc"
     break;
 
-  case 419: // $@62: %empty
-#line 1541 "dhcp4_parser.yy"
+  case 425: // $@62: %empty
+#line 1565 "dhcp4_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2691 "dhcp4_parser.cc"
+#line 2721 "dhcp4_parser.cc"
     break;
 
-  case 420: // interface: "interface" $@62 ":" "constant string"
-#line 1544 "dhcp4_parser.yy"
+  case 426: // interface: "interface" $@62 ":" "constant string"
+#line 1568 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2701 "dhcp4_parser.cc"
+#line 2731 "dhcp4_parser.cc"
     break;
 
-  case 421: // $@63: %empty
-#line 1550 "dhcp4_parser.yy"
+  case 427: // $@63: %empty
+#line 1574 "dhcp4_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2710 "dhcp4_parser.cc"
+#line 2740 "dhcp4_parser.cc"
     break;
 
-  case 422: // client_class: "client-class" $@63 ":" "constant string"
-#line 1553 "dhcp4_parser.yy"
+  case 428: // client_class: "client-class" $@63 ":" "constant string"
+#line 1577 "dhcp4_parser.yy"
                {
     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 2720 "dhcp4_parser.cc"
+#line 2750 "dhcp4_parser.cc"
     break;
 
-  case 423: // $@64: %empty
-#line 1559 "dhcp4_parser.yy"
+  case 429: // $@64: %empty
+#line 1583 "dhcp4_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2728,102 +2758,102 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2732 "dhcp4_parser.cc"
+#line 2762 "dhcp4_parser.cc"
     break;
 
-  case 424: // require_client_classes: "require-client-classes" $@64 ":" list_strings
-#line 1565 "dhcp4_parser.yy"
+  case 430: // require_client_classes: "require-client-classes" $@64 ":" list_strings
+#line 1589 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2741 "dhcp4_parser.cc"
+#line 2771 "dhcp4_parser.cc"
     break;
 
-  case 425: // reservations_global: "reservations-global" ":" "boolean"
-#line 1570 "dhcp4_parser.yy"
+  case 431: // reservations_global: "reservations-global" ":" "boolean"
+#line 1594 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-global", b);
 }
-#line 2751 "dhcp4_parser.cc"
+#line 2781 "dhcp4_parser.cc"
     break;
 
-  case 426: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1576 "dhcp4_parser.yy"
+  case 432: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
+#line 1600 "dhcp4_parser.yy"
                                                              {
     ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-in-subnet", b);
 }
-#line 2761 "dhcp4_parser.cc"
+#line 2791 "dhcp4_parser.cc"
     break;
 
-  case 427: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1582 "dhcp4_parser.yy"
+  case 433: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
+#line 1606 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-out-of-pool", b);
 }
-#line 2771 "dhcp4_parser.cc"
+#line 2801 "dhcp4_parser.cc"
     break;
 
-  case 428: // $@65: %empty
-#line 1588 "dhcp4_parser.yy"
+  case 434: // $@65: %empty
+#line 1612 "dhcp4_parser.yy"
                                    {
     ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2780 "dhcp4_parser.cc"
+#line 2810 "dhcp4_parser.cc"
     break;
 
-  case 429: // reservation_mode: "reservation-mode" $@65 ":" hr_mode
-#line 1591 "dhcp4_parser.yy"
+  case 435: // reservation_mode: "reservation-mode" $@65 ":" hr_mode
+#line 1615 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2789 "dhcp4_parser.cc"
+#line 2819 "dhcp4_parser.cc"
     break;
 
-  case 430: // hr_mode: "disabled"
-#line 1596 "dhcp4_parser.yy"
+  case 436: // hr_mode: "disabled"
+#line 1620 "dhcp4_parser.yy"
                   { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2795 "dhcp4_parser.cc"
+#line 2825 "dhcp4_parser.cc"
     break;
 
-  case 431: // hr_mode: "out-of-pool"
-#line 1597 "dhcp4_parser.yy"
+  case 437: // hr_mode: "out-of-pool"
+#line 1621 "dhcp4_parser.yy"
                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2801 "dhcp4_parser.cc"
+#line 2831 "dhcp4_parser.cc"
     break;
 
-  case 432: // hr_mode: "global"
-#line 1598 "dhcp4_parser.yy"
+  case 438: // hr_mode: "global"
+#line 1622 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2807 "dhcp4_parser.cc"
+#line 2837 "dhcp4_parser.cc"
     break;
 
-  case 433: // hr_mode: "all"
-#line 1599 "dhcp4_parser.yy"
+  case 439: // hr_mode: "all"
+#line 1623 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2813 "dhcp4_parser.cc"
+#line 2843 "dhcp4_parser.cc"
     break;
 
-  case 434: // id: "id" ":" "integer"
-#line 1602 "dhcp4_parser.yy"
+  case 440: // id: "id" ":" "integer"
+#line 1626 "dhcp4_parser.yy"
                      {
     ctx.unique("id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 2823 "dhcp4_parser.cc"
+#line 2853 "dhcp4_parser.cc"
     break;
 
-  case 435: // $@66: %empty
-#line 1610 "dhcp4_parser.yy"
+  case 441: // $@66: %empty
+#line 1634 "dhcp4_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2831,54 +2861,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2835 "dhcp4_parser.cc"
+#line 2865 "dhcp4_parser.cc"
     break;
 
-  case 436: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]"
-#line 1616 "dhcp4_parser.yy"
+  case 442: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]"
+#line 1640 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2844 "dhcp4_parser.cc"
+#line 2874 "dhcp4_parser.cc"
     break;
 
-  case 441: // shared_networks_list: shared_networks_list ","
-#line 1629 "dhcp4_parser.yy"
+  case 447: // shared_networks_list: shared_networks_list ","
+#line 1653 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2852 "dhcp4_parser.cc"
+#line 2882 "dhcp4_parser.cc"
     break;
 
-  case 442: // $@67: %empty
-#line 1634 "dhcp4_parser.yy"
+  case 448: // $@67: %empty
+#line 1658 "dhcp4_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2862 "dhcp4_parser.cc"
+#line 2892 "dhcp4_parser.cc"
     break;
 
-  case 443: // shared_network: "{" $@67 shared_network_params "}"
-#line 1638 "dhcp4_parser.yy"
+  case 449: // shared_network: "{" $@67 shared_network_params "}"
+#line 1662 "dhcp4_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 2870 "dhcp4_parser.cc"
+#line 2900 "dhcp4_parser.cc"
     break;
 
-  case 446: // shared_network_params: shared_network_params ","
-#line 1644 "dhcp4_parser.yy"
+  case 452: // shared_network_params: shared_network_params ","
+#line 1668 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2878 "dhcp4_parser.cc"
+#line 2908 "dhcp4_parser.cc"
     break;
 
-  case 487: // $@68: %empty
-#line 1695 "dhcp4_parser.yy"
+  case 493: // $@68: %empty
+#line 1719 "dhcp4_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2886,55 +2916,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2890 "dhcp4_parser.cc"
+#line 2920 "dhcp4_parser.cc"
     break;
 
-  case 488: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]"
-#line 1701 "dhcp4_parser.yy"
+  case 494: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]"
+#line 1725 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2899 "dhcp4_parser.cc"
+#line 2929 "dhcp4_parser.cc"
     break;
 
-  case 489: // $@69: %empty
-#line 1709 "dhcp4_parser.yy"
+  case 495: // $@69: %empty
+#line 1733 "dhcp4_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2908 "dhcp4_parser.cc"
+#line 2938 "dhcp4_parser.cc"
     break;
 
-  case 490: // sub_option_def_list: "{" $@69 option_def_list "}"
-#line 1712 "dhcp4_parser.yy"
+  case 496: // sub_option_def_list: "{" $@69 option_def_list "}"
+#line 1736 "dhcp4_parser.yy"
                                  {
     // parsing completed
 }
-#line 2916 "dhcp4_parser.cc"
+#line 2946 "dhcp4_parser.cc"
     break;
 
-  case 495: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1724 "dhcp4_parser.yy"
+  case 501: // not_empty_option_def_list: not_empty_option_def_list ","
+#line 1748 "dhcp4_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 2924 "dhcp4_parser.cc"
+#line 2954 "dhcp4_parser.cc"
     break;
 
-  case 496: // $@70: %empty
-#line 1731 "dhcp4_parser.yy"
+  case 502: // $@70: %empty
+#line 1755 "dhcp4_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2934 "dhcp4_parser.cc"
+#line 2964 "dhcp4_parser.cc"
     break;
 
-  case 497: // option_def_entry: "{" $@70 option_def_params "}"
-#line 1735 "dhcp4_parser.yy"
+  case 503: // option_def_entry: "{" $@70 option_def_params "}"
+#line 1759 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2942,21 +2972,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2946 "dhcp4_parser.cc"
+#line 2976 "dhcp4_parser.cc"
     break;
 
-  case 498: // $@71: %empty
-#line 1746 "dhcp4_parser.yy"
+  case 504: // $@71: %empty
+#line 1770 "dhcp4_parser.yy"
                                {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2956 "dhcp4_parser.cc"
+#line 2986 "dhcp4_parser.cc"
     break;
 
-  case 499: // sub_option_def: "{" $@71 option_def_params "}"
-#line 1750 "dhcp4_parser.yy"
+  case 505: // sub_option_def: "{" $@71 option_def_params "}"
+#line 1774 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2964,115 +2994,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2968 "dhcp4_parser.cc"
+#line 2998 "dhcp4_parser.cc"
     break;
 
-  case 504: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1766 "dhcp4_parser.yy"
+  case 510: // not_empty_option_def_params: not_empty_option_def_params ","
+#line 1790 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 2976 "dhcp4_parser.cc"
+#line 3006 "dhcp4_parser.cc"
     break;
 
-  case 516: // code: "code" ":" "integer"
-#line 1785 "dhcp4_parser.yy"
+  case 522: // code: "code" ":" "integer"
+#line 1809 "dhcp4_parser.yy"
                          {
     ctx.unique("code", ctx.loc2pos(yystack_[2].location));
     ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 2986 "dhcp4_parser.cc"
+#line 3016 "dhcp4_parser.cc"
     break;
 
-  case 518: // $@72: %empty
-#line 1793 "dhcp4_parser.yy"
+  case 524: // $@72: %empty
+#line 1817 "dhcp4_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2995 "dhcp4_parser.cc"
+#line 3025 "dhcp4_parser.cc"
     break;
 
-  case 519: // option_def_type: "type" $@72 ":" "constant string"
-#line 1796 "dhcp4_parser.yy"
+  case 525: // option_def_type: "type" $@72 ":" "constant string"
+#line 1820 "dhcp4_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 3005 "dhcp4_parser.cc"
+#line 3035 "dhcp4_parser.cc"
     break;
 
-  case 520: // $@73: %empty
-#line 1802 "dhcp4_parser.yy"
+  case 526: // $@73: %empty
+#line 1826 "dhcp4_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3014 "dhcp4_parser.cc"
+#line 3044 "dhcp4_parser.cc"
     break;
 
-  case 521: // option_def_record_types: "record-types" $@73 ":" "constant string"
-#line 1805 "dhcp4_parser.yy"
+  case 527: // option_def_record_types: "record-types" $@73 ":" "constant string"
+#line 1829 "dhcp4_parser.yy"
                {
     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 3024 "dhcp4_parser.cc"
+#line 3054 "dhcp4_parser.cc"
     break;
 
-  case 522: // $@74: %empty
-#line 1811 "dhcp4_parser.yy"
+  case 528: // $@74: %empty
+#line 1835 "dhcp4_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3033 "dhcp4_parser.cc"
+#line 3063 "dhcp4_parser.cc"
     break;
 
-  case 523: // space: "space" $@74 ":" "constant string"
-#line 1814 "dhcp4_parser.yy"
+  case 529: // space: "space" $@74 ":" "constant string"
+#line 1838 "dhcp4_parser.yy"
                {
     ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 3043 "dhcp4_parser.cc"
+#line 3073 "dhcp4_parser.cc"
     break;
 
-  case 525: // $@75: %empty
-#line 1822 "dhcp4_parser.yy"
+  case 531: // $@75: %empty
+#line 1846 "dhcp4_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3052 "dhcp4_parser.cc"
+#line 3082 "dhcp4_parser.cc"
     break;
 
-  case 526: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string"
-#line 1825 "dhcp4_parser.yy"
+  case 532: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string"
+#line 1849 "dhcp4_parser.yy"
                {
     ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 3062 "dhcp4_parser.cc"
+#line 3092 "dhcp4_parser.cc"
     break;
 
-  case 527: // option_def_array: "array" ":" "boolean"
-#line 1831 "dhcp4_parser.yy"
+  case 533: // option_def_array: "array" ":" "boolean"
+#line 1855 "dhcp4_parser.yy"
                                       {
     ctx.unique("array", ctx.loc2pos(yystack_[2].location));
     ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 3072 "dhcp4_parser.cc"
+#line 3102 "dhcp4_parser.cc"
     break;
 
-  case 528: // $@76: %empty
-#line 1841 "dhcp4_parser.yy"
+  case 534: // $@76: %empty
+#line 1865 "dhcp4_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3080,113 +3110,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3084 "dhcp4_parser.cc"
+#line 3114 "dhcp4_parser.cc"
     break;
 
-  case 529: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]"
-#line 1847 "dhcp4_parser.yy"
+  case 535: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]"
+#line 1871 "dhcp4_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3093 "dhcp4_parser.cc"
+#line 3123 "dhcp4_parser.cc"
     break;
 
-  case 534: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1862 "dhcp4_parser.yy"
+  case 540: // not_empty_option_data_list: not_empty_option_data_list ","
+#line 1886 "dhcp4_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3101 "dhcp4_parser.cc"
+#line 3131 "dhcp4_parser.cc"
     break;
 
-  case 535: // $@77: %empty
-#line 1869 "dhcp4_parser.yy"
+  case 541: // $@77: %empty
+#line 1893 "dhcp4_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3111 "dhcp4_parser.cc"
+#line 3141 "dhcp4_parser.cc"
     break;
 
-  case 536: // option_data_entry: "{" $@77 option_data_params "}"
-#line 1873 "dhcp4_parser.yy"
+  case 542: // option_data_entry: "{" $@77 option_data_params "}"
+#line 1897 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3120 "dhcp4_parser.cc"
+#line 3150 "dhcp4_parser.cc"
     break;
 
-  case 537: // $@78: %empty
-#line 1881 "dhcp4_parser.yy"
+  case 543: // $@78: %empty
+#line 1905 "dhcp4_parser.yy"
                                 {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3130 "dhcp4_parser.cc"
+#line 3160 "dhcp4_parser.cc"
     break;
 
-  case 538: // sub_option_data: "{" $@78 option_data_params "}"
-#line 1885 "dhcp4_parser.yy"
+  case 544: // sub_option_data: "{" $@78 option_data_params "}"
+#line 1909 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3139 "dhcp4_parser.cc"
+#line 3169 "dhcp4_parser.cc"
     break;
 
-  case 543: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1901 "dhcp4_parser.yy"
+  case 549: // not_empty_option_data_params: not_empty_option_data_params ","
+#line 1925 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3147 "dhcp4_parser.cc"
+#line 3177 "dhcp4_parser.cc"
     break;
 
-  case 554: // $@79: %empty
-#line 1921 "dhcp4_parser.yy"
+  case 560: // $@79: %empty
+#line 1945 "dhcp4_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3156 "dhcp4_parser.cc"
+#line 3186 "dhcp4_parser.cc"
     break;
 
-  case 555: // option_data_data: "data" $@79 ":" "constant string"
-#line 1924 "dhcp4_parser.yy"
+  case 561: // option_data_data: "data" $@79 ":" "constant string"
+#line 1948 "dhcp4_parser.yy"
                {
     ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 3166 "dhcp4_parser.cc"
+#line 3196 "dhcp4_parser.cc"
     break;
 
-  case 558: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 1934 "dhcp4_parser.yy"
+  case 564: // option_data_csv_format: "csv-format" ":" "boolean"
+#line 1958 "dhcp4_parser.yy"
                                                  {
     ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
     ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 3176 "dhcp4_parser.cc"
+#line 3206 "dhcp4_parser.cc"
     break;
 
-  case 559: // option_data_always_send: "always-send" ":" "boolean"
-#line 1940 "dhcp4_parser.yy"
+  case 565: // option_data_always_send: "always-send" ":" "boolean"
+#line 1964 "dhcp4_parser.yy"
                                                    {
     ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 3186 "dhcp4_parser.cc"
+#line 3216 "dhcp4_parser.cc"
     break;
 
-  case 560: // $@80: %empty
-#line 1949 "dhcp4_parser.yy"
+  case 566: // $@80: %empty
+#line 1973 "dhcp4_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3194,103 +3224,103 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3198 "dhcp4_parser.cc"
+#line 3228 "dhcp4_parser.cc"
     break;
 
-  case 561: // pools_list: "pools" $@80 ":" "[" pools_list_content "]"
-#line 1955 "dhcp4_parser.yy"
+  case 567: // pools_list: "pools" $@80 ":" "[" pools_list_content "]"
+#line 1979 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3207 "dhcp4_parser.cc"
+#line 3237 "dhcp4_parser.cc"
     break;
 
-  case 566: // not_empty_pools_list: not_empty_pools_list ","
-#line 1968 "dhcp4_parser.yy"
+  case 572: // not_empty_pools_list: not_empty_pools_list ","
+#line 1992 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3215 "dhcp4_parser.cc"
+#line 3245 "dhcp4_parser.cc"
     break;
 
-  case 567: // $@81: %empty
-#line 1973 "dhcp4_parser.yy"
+  case 573: // $@81: %empty
+#line 1997 "dhcp4_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3225 "dhcp4_parser.cc"
+#line 3255 "dhcp4_parser.cc"
     break;
 
-  case 568: // pool_list_entry: "{" $@81 pool_params "}"
-#line 1977 "dhcp4_parser.yy"
+  case 574: // pool_list_entry: "{" $@81 pool_params "}"
+#line 2001 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3235 "dhcp4_parser.cc"
+#line 3265 "dhcp4_parser.cc"
     break;
 
-  case 569: // $@82: %empty
-#line 1983 "dhcp4_parser.yy"
+  case 575: // $@82: %empty
+#line 2007 "dhcp4_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3245 "dhcp4_parser.cc"
+#line 3275 "dhcp4_parser.cc"
     break;
 
-  case 570: // sub_pool4: "{" $@82 pool_params "}"
-#line 1987 "dhcp4_parser.yy"
+  case 576: // sub_pool4: "{" $@82 pool_params "}"
+#line 2011 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3255 "dhcp4_parser.cc"
+#line 3285 "dhcp4_parser.cc"
     break;
 
-  case 573: // pool_params: pool_params ","
-#line 1995 "dhcp4_parser.yy"
+  case 579: // pool_params: pool_params ","
+#line 2019 "dhcp4_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3263 "dhcp4_parser.cc"
+#line 3293 "dhcp4_parser.cc"
     break;
 
-  case 581: // $@83: %empty
-#line 2009 "dhcp4_parser.yy"
+  case 587: // $@83: %empty
+#line 2033 "dhcp4_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3272 "dhcp4_parser.cc"
+#line 3302 "dhcp4_parser.cc"
     break;
 
-  case 582: // pool_entry: "pool" $@83 ":" "constant string"
-#line 2012 "dhcp4_parser.yy"
+  case 588: // pool_entry: "pool" $@83 ":" "constant string"
+#line 2036 "dhcp4_parser.yy"
                {
     ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 3282 "dhcp4_parser.cc"
+#line 3312 "dhcp4_parser.cc"
     break;
 
-  case 583: // $@84: %empty
-#line 2018 "dhcp4_parser.yy"
+  case 589: // $@84: %empty
+#line 2042 "dhcp4_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3290 "dhcp4_parser.cc"
+#line 3320 "dhcp4_parser.cc"
     break;
 
-  case 584: // user_context: "user-context" $@84 ":" map_value
-#line 2020 "dhcp4_parser.yy"
+  case 590: // user_context: "user-context" $@84 ":" map_value
+#line 2044 "dhcp4_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3313,19 +3343,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3317 "dhcp4_parser.cc"
+#line 3347 "dhcp4_parser.cc"
     break;
 
-  case 585: // $@85: %empty
-#line 2043 "dhcp4_parser.yy"
+  case 591: // $@85: %empty
+#line 2067 "dhcp4_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3325 "dhcp4_parser.cc"
+#line 3355 "dhcp4_parser.cc"
     break;
 
-  case 586: // comment: "comment" $@85 ":" "constant string"
-#line 2045 "dhcp4_parser.yy"
+  case 592: // comment: "comment" $@85 ":" "constant string"
+#line 2069 "dhcp4_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3350,11 +3380,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3354 "dhcp4_parser.cc"
+#line 3384 "dhcp4_parser.cc"
     break;
 
-  case 587: // $@86: %empty
-#line 2073 "dhcp4_parser.yy"
+  case 593: // $@86: %empty
+#line 2097 "dhcp4_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3362,150 +3392,150 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3366 "dhcp4_parser.cc"
+#line 3396 "dhcp4_parser.cc"
     break;
 
-  case 588: // reservations: "reservations" $@86 ":" "[" reservations_list "]"
-#line 2079 "dhcp4_parser.yy"
+  case 594: // reservations: "reservations" $@86 ":" "[" reservations_list "]"
+#line 2103 "dhcp4_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3375 "dhcp4_parser.cc"
+#line 3405 "dhcp4_parser.cc"
     break;
 
-  case 593: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2090 "dhcp4_parser.yy"
+  case 599: // not_empty_reservations_list: not_empty_reservations_list ","
+#line 2114 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3383 "dhcp4_parser.cc"
+#line 3413 "dhcp4_parser.cc"
     break;
 
-  case 594: // $@87: %empty
-#line 2095 "dhcp4_parser.yy"
+  case 600: // $@87: %empty
+#line 2119 "dhcp4_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3393 "dhcp4_parser.cc"
+#line 3423 "dhcp4_parser.cc"
     break;
 
-  case 595: // reservation: "{" $@87 reservation_params "}"
-#line 2099 "dhcp4_parser.yy"
+  case 601: // reservation: "{" $@87 reservation_params "}"
+#line 2123 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3402 "dhcp4_parser.cc"
+#line 3432 "dhcp4_parser.cc"
     break;
 
-  case 596: // $@88: %empty
-#line 2104 "dhcp4_parser.yy"
+  case 602: // $@88: %empty
+#line 2128 "dhcp4_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3412 "dhcp4_parser.cc"
+#line 3442 "dhcp4_parser.cc"
     break;
 
-  case 597: // sub_reservation: "{" $@88 reservation_params "}"
-#line 2108 "dhcp4_parser.yy"
+  case 603: // sub_reservation: "{" $@88 reservation_params "}"
+#line 2132 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3421 "dhcp4_parser.cc"
+#line 3451 "dhcp4_parser.cc"
     break;
 
-  case 602: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2119 "dhcp4_parser.yy"
+  case 608: // not_empty_reservation_params: not_empty_reservation_params ","
+#line 2143 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3429 "dhcp4_parser.cc"
+#line 3459 "dhcp4_parser.cc"
     break;
 
-  case 618: // $@89: %empty
-#line 2142 "dhcp4_parser.yy"
+  case 624: // $@89: %empty
+#line 2166 "dhcp4_parser.yy"
                          {
     ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3438 "dhcp4_parser.cc"
+#line 3468 "dhcp4_parser.cc"
     break;
 
-  case 619: // next_server: "next-server" $@89 ":" "constant string"
-#line 2145 "dhcp4_parser.yy"
+  case 625: // next_server: "next-server" $@89 ":" "constant string"
+#line 2169 "dhcp4_parser.yy"
                {
     ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 3448 "dhcp4_parser.cc"
+#line 3478 "dhcp4_parser.cc"
     break;
 
-  case 620: // $@90: %empty
-#line 2151 "dhcp4_parser.yy"
+  case 626: // $@90: %empty
+#line 2175 "dhcp4_parser.yy"
                                  {
     ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3457 "dhcp4_parser.cc"
+#line 3487 "dhcp4_parser.cc"
     break;
 
-  case 621: // server_hostname: "server-hostname" $@90 ":" "constant string"
-#line 2154 "dhcp4_parser.yy"
+  case 627: // server_hostname: "server-hostname" $@90 ":" "constant string"
+#line 2178 "dhcp4_parser.yy"
                {
     ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 3467 "dhcp4_parser.cc"
+#line 3497 "dhcp4_parser.cc"
     break;
 
-  case 622: // $@91: %empty
-#line 2160 "dhcp4_parser.yy"
+  case 628: // $@91: %empty
+#line 2184 "dhcp4_parser.yy"
                                {
     ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3476 "dhcp4_parser.cc"
+#line 3506 "dhcp4_parser.cc"
     break;
 
-  case 623: // boot_file_name: "boot-file-name" $@91 ":" "constant string"
-#line 2163 "dhcp4_parser.yy"
+  case 629: // boot_file_name: "boot-file-name" $@91 ":" "constant string"
+#line 2187 "dhcp4_parser.yy"
                {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 3486 "dhcp4_parser.cc"
+#line 3516 "dhcp4_parser.cc"
     break;
 
-  case 624: // $@92: %empty
-#line 2169 "dhcp4_parser.yy"
+  case 630: // $@92: %empty
+#line 2193 "dhcp4_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3495 "dhcp4_parser.cc"
+#line 3525 "dhcp4_parser.cc"
     break;
 
-  case 625: // ip_address: "ip-address" $@92 ":" "constant string"
-#line 2172 "dhcp4_parser.yy"
+  case 631: // ip_address: "ip-address" $@92 ":" "constant string"
+#line 2196 "dhcp4_parser.yy"
                {
     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 3505 "dhcp4_parser.cc"
+#line 3535 "dhcp4_parser.cc"
     break;
 
-  case 626: // $@93: %empty
-#line 2178 "dhcp4_parser.yy"
+  case 632: // $@93: %empty
+#line 2202 "dhcp4_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3513,134 +3543,134 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3517 "dhcp4_parser.cc"
+#line 3547 "dhcp4_parser.cc"
     break;
 
-  case 627: // ip_addresses: "ip-addresses" $@93 ":" list_strings
-#line 2184 "dhcp4_parser.yy"
+  case 633: // ip_addresses: "ip-addresses" $@93 ":" list_strings
+#line 2208 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3526 "dhcp4_parser.cc"
+#line 3556 "dhcp4_parser.cc"
     break;
 
-  case 628: // $@94: %empty
-#line 2189 "dhcp4_parser.yy"
+  case 634: // $@94: %empty
+#line 2213 "dhcp4_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3535 "dhcp4_parser.cc"
+#line 3565 "dhcp4_parser.cc"
     break;
 
-  case 629: // duid: "duid" $@94 ":" "constant string"
-#line 2192 "dhcp4_parser.yy"
+  case 635: // duid: "duid" $@94 ":" "constant string"
+#line 2216 "dhcp4_parser.yy"
                {
     ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 3545 "dhcp4_parser.cc"
+#line 3575 "dhcp4_parser.cc"
     break;
 
-  case 630: // $@95: %empty
-#line 2198 "dhcp4_parser.yy"
+  case 636: // $@95: %empty
+#line 2222 "dhcp4_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3554 "dhcp4_parser.cc"
+#line 3584 "dhcp4_parser.cc"
     break;
 
-  case 631: // hw_address: "hw-address" $@95 ":" "constant string"
-#line 2201 "dhcp4_parser.yy"
+  case 637: // hw_address: "hw-address" $@95 ":" "constant string"
+#line 2225 "dhcp4_parser.yy"
                {
     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 3564 "dhcp4_parser.cc"
+#line 3594 "dhcp4_parser.cc"
     break;
 
-  case 632: // $@96: %empty
-#line 2207 "dhcp4_parser.yy"
+  case 638: // $@96: %empty
+#line 2231 "dhcp4_parser.yy"
                            {
     ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3573 "dhcp4_parser.cc"
+#line 3603 "dhcp4_parser.cc"
     break;
 
-  case 633: // client_id_value: "client-id" $@96 ":" "constant string"
-#line 2210 "dhcp4_parser.yy"
+  case 639: // client_id_value: "client-id" $@96 ":" "constant string"
+#line 2234 "dhcp4_parser.yy"
                {
     ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 3583 "dhcp4_parser.cc"
+#line 3613 "dhcp4_parser.cc"
     break;
 
-  case 634: // $@97: %empty
-#line 2216 "dhcp4_parser.yy"
+  case 640: // $@97: %empty
+#line 2240 "dhcp4_parser.yy"
                              {
     ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3592 "dhcp4_parser.cc"
+#line 3622 "dhcp4_parser.cc"
     break;
 
-  case 635: // circuit_id_value: "circuit-id" $@97 ":" "constant string"
-#line 2219 "dhcp4_parser.yy"
+  case 641: // circuit_id_value: "circuit-id" $@97 ":" "constant string"
+#line 2243 "dhcp4_parser.yy"
                {
     ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 3602 "dhcp4_parser.cc"
+#line 3632 "dhcp4_parser.cc"
     break;
 
-  case 636: // $@98: %empty
-#line 2225 "dhcp4_parser.yy"
+  case 642: // $@98: %empty
+#line 2249 "dhcp4_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3611 "dhcp4_parser.cc"
+#line 3641 "dhcp4_parser.cc"
     break;
 
-  case 637: // flex_id_value: "flex-id" $@98 ":" "constant string"
-#line 2228 "dhcp4_parser.yy"
+  case 643: // flex_id_value: "flex-id" $@98 ":" "constant string"
+#line 2252 "dhcp4_parser.yy"
                {
     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 3621 "dhcp4_parser.cc"
+#line 3651 "dhcp4_parser.cc"
     break;
 
-  case 638: // $@99: %empty
-#line 2234 "dhcp4_parser.yy"
+  case 644: // $@99: %empty
+#line 2258 "dhcp4_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3630 "dhcp4_parser.cc"
+#line 3660 "dhcp4_parser.cc"
     break;
 
-  case 639: // hostname: "hostname" $@99 ":" "constant string"
-#line 2237 "dhcp4_parser.yy"
+  case 645: // hostname: "hostname" $@99 ":" "constant string"
+#line 2261 "dhcp4_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 3640 "dhcp4_parser.cc"
+#line 3670 "dhcp4_parser.cc"
     break;
 
-  case 640: // $@100: %empty
-#line 2243 "dhcp4_parser.yy"
+  case 646: // $@100: %empty
+#line 2267 "dhcp4_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3648,20 +3678,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3652 "dhcp4_parser.cc"
+#line 3682 "dhcp4_parser.cc"
     break;
 
-  case 641: // reservation_client_classes: "client-classes" $@100 ":" list_strings
-#line 2249 "dhcp4_parser.yy"
+  case 647: // reservation_client_classes: "client-classes" $@100 ":" list_strings
+#line 2273 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3661 "dhcp4_parser.cc"
+#line 3691 "dhcp4_parser.cc"
     break;
 
-  case 642: // $@101: %empty
-#line 2257 "dhcp4_parser.yy"
+  case 648: // $@101: %empty
+#line 2281 "dhcp4_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3669,20 +3699,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3673 "dhcp4_parser.cc"
+#line 3703 "dhcp4_parser.cc"
     break;
 
-  case 643: // relay: "relay" $@101 ":" "{" relay_map "}"
-#line 2263 "dhcp4_parser.yy"
+  case 649: // relay: "relay" $@101 ":" "{" relay_map "}"
+#line 2287 "dhcp4_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3682 "dhcp4_parser.cc"
+#line 3712 "dhcp4_parser.cc"
     break;
 
-  case 646: // $@102: %empty
-#line 2275 "dhcp4_parser.yy"
+  case 652: // $@102: %empty
+#line 2299 "dhcp4_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3690,95 +3720,95 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3694 "dhcp4_parser.cc"
+#line 3724 "dhcp4_parser.cc"
     break;
 
-  case 647: // client_classes: "client-classes" $@102 ":" "[" client_classes_list "]"
-#line 2281 "dhcp4_parser.yy"
+  case 653: // client_classes: "client-classes" $@102 ":" "[" client_classes_list "]"
+#line 2305 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3703 "dhcp4_parser.cc"
+#line 3733 "dhcp4_parser.cc"
     break;
 
-  case 650: // client_classes_list: client_classes_list ","
-#line 2288 "dhcp4_parser.yy"
+  case 656: // client_classes_list: client_classes_list ","
+#line 2312 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 3711 "dhcp4_parser.cc"
+#line 3741 "dhcp4_parser.cc"
     break;
 
-  case 651: // $@103: %empty
-#line 2293 "dhcp4_parser.yy"
+  case 657: // $@103: %empty
+#line 2317 "dhcp4_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3721 "dhcp4_parser.cc"
+#line 3751 "dhcp4_parser.cc"
     break;
 
-  case 652: // client_class_entry: "{" $@103 client_class_params "}"
-#line 2297 "dhcp4_parser.yy"
+  case 658: // client_class_entry: "{" $@103 client_class_params "}"
+#line 2321 "dhcp4_parser.yy"
                                      {
     // 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 3731 "dhcp4_parser.cc"
+#line 3761 "dhcp4_parser.cc"
     break;
 
-  case 657: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2309 "dhcp4_parser.yy"
+  case 663: // not_empty_client_class_params: not_empty_client_class_params ","
+#line 2333 "dhcp4_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3739 "dhcp4_parser.cc"
+#line 3769 "dhcp4_parser.cc"
     break;
 
-  case 673: // $@104: %empty
-#line 2332 "dhcp4_parser.yy"
+  case 679: // $@104: %empty
+#line 2356 "dhcp4_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3748 "dhcp4_parser.cc"
+#line 3778 "dhcp4_parser.cc"
     break;
 
-  case 674: // client_class_test: "test" $@104 ":" "constant string"
-#line 2335 "dhcp4_parser.yy"
+  case 680: // client_class_test: "test" $@104 ":" "constant string"
+#line 2359 "dhcp4_parser.yy"
                {
     ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 3758 "dhcp4_parser.cc"
+#line 3788 "dhcp4_parser.cc"
     break;
 
-  case 675: // only_if_required: "only-if-required" ":" "boolean"
-#line 2341 "dhcp4_parser.yy"
+  case 681: // only_if_required: "only-if-required" ":" "boolean"
+#line 2365 "dhcp4_parser.yy"
                                                  {
     ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 3768 "dhcp4_parser.cc"
+#line 3798 "dhcp4_parser.cc"
     break;
 
-  case 676: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2349 "dhcp4_parser.yy"
+  case 682: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2373 "dhcp4_parser.yy"
                                          {
     ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 3778 "dhcp4_parser.cc"
+#line 3808 "dhcp4_parser.cc"
     break;
 
-  case 677: // $@105: %empty
-#line 2357 "dhcp4_parser.yy"
+  case 683: // $@105: %empty
+#line 2381 "dhcp4_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3786,66 +3816,66 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 3790 "dhcp4_parser.cc"
+#line 3820 "dhcp4_parser.cc"
     break;
 
-  case 678: // control_socket: "control-socket" $@105 ":" "{" control_socket_params "}"
-#line 2363 "dhcp4_parser.yy"
+  case 684: // control_socket: "control-socket" $@105 ":" "{" control_socket_params "}"
+#line 2387 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3799 "dhcp4_parser.cc"
+#line 3829 "dhcp4_parser.cc"
     break;
 
-  case 681: // control_socket_params: control_socket_params ","
-#line 2370 "dhcp4_parser.yy"
+  case 687: // control_socket_params: control_socket_params ","
+#line 2394 "dhcp4_parser.yy"
                                                    {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 3807 "dhcp4_parser.cc"
+#line 3837 "dhcp4_parser.cc"
     break;
 
-  case 687: // $@106: %empty
-#line 2382 "dhcp4_parser.yy"
+  case 693: // $@106: %empty
+#line 2406 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3816 "dhcp4_parser.cc"
+#line 3846 "dhcp4_parser.cc"
     break;
 
-  case 688: // control_socket_type: "socket-type" $@106 ":" "constant string"
-#line 2385 "dhcp4_parser.yy"
+  case 694: // control_socket_type: "socket-type" $@106 ":" "constant string"
+#line 2409 "dhcp4_parser.yy"
                {
     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 3826 "dhcp4_parser.cc"
+#line 3856 "dhcp4_parser.cc"
     break;
 
-  case 689: // $@107: %empty
-#line 2391 "dhcp4_parser.yy"
+  case 695: // $@107: %empty
+#line 2415 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3835 "dhcp4_parser.cc"
+#line 3865 "dhcp4_parser.cc"
     break;
 
-  case 690: // control_socket_name: "socket-name" $@107 ":" "constant string"
-#line 2394 "dhcp4_parser.yy"
+  case 696: // control_socket_name: "socket-name" $@107 ":" "constant string"
+#line 2418 "dhcp4_parser.yy"
                {
     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 3845 "dhcp4_parser.cc"
+#line 3875 "dhcp4_parser.cc"
     break;
 
-  case 691: // $@108: %empty
-#line 2403 "dhcp4_parser.yy"
+  case 697: // $@108: %empty
+#line 2427 "dhcp4_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3853,87 +3883,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 3857 "dhcp4_parser.cc"
+#line 3887 "dhcp4_parser.cc"
     break;
 
-  case 692: // dhcp_queue_control: "dhcp-queue-control" $@108 ":" "{" queue_control_params "}"
-#line 2409 "dhcp4_parser.yy"
+  case 698: // dhcp_queue_control: "dhcp-queue-control" $@108 ":" "{" queue_control_params "}"
+#line 2433 "dhcp4_parser.yy"
                                                            {
     // The enable queue parameter is required.
     ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3868 "dhcp4_parser.cc"
+#line 3898 "dhcp4_parser.cc"
     break;
 
-  case 695: // queue_control_params: queue_control_params ","
-#line 2418 "dhcp4_parser.yy"
+  case 701: // queue_control_params: queue_control_params ","
+#line 2442 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3876 "dhcp4_parser.cc"
+#line 3906 "dhcp4_parser.cc"
     break;
 
-  case 702: // enable_queue: "enable-queue" ":" "boolean"
-#line 2431 "dhcp4_parser.yy"
+  case 708: // enable_queue: "enable-queue" ":" "boolean"
+#line 2455 "dhcp4_parser.yy"
                                          {
     ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-queue", b);
 }
-#line 3886 "dhcp4_parser.cc"
+#line 3916 "dhcp4_parser.cc"
     break;
 
-  case 703: // $@109: %empty
-#line 2437 "dhcp4_parser.yy"
+  case 709: // $@109: %empty
+#line 2461 "dhcp4_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3895 "dhcp4_parser.cc"
+#line 3925 "dhcp4_parser.cc"
     break;
 
-  case 704: // queue_type: "queue-type" $@109 ":" "constant string"
-#line 2440 "dhcp4_parser.yy"
+  case 710: // queue_type: "queue-type" $@109 ":" "constant string"
+#line 2464 "dhcp4_parser.yy"
                {
     ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("queue-type", qt);
     ctx.leave();
 }
-#line 3905 "dhcp4_parser.cc"
+#line 3935 "dhcp4_parser.cc"
     break;
 
-  case 705: // capacity: "capacity" ":" "integer"
-#line 2446 "dhcp4_parser.yy"
+  case 711: // capacity: "capacity" ":" "integer"
+#line 2470 "dhcp4_parser.yy"
                                  {
     ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
     ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("capacity", c);
 }
-#line 3915 "dhcp4_parser.cc"
+#line 3945 "dhcp4_parser.cc"
     break;
 
-  case 706: // $@110: %empty
-#line 2452 "dhcp4_parser.yy"
+  case 712: // $@110: %empty
+#line 2476 "dhcp4_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3924 "dhcp4_parser.cc"
+#line 3954 "dhcp4_parser.cc"
     break;
 
-  case 707: // arbitrary_map_entry: "constant string" $@110 ":" value
-#line 2455 "dhcp4_parser.yy"
+  case 713: // arbitrary_map_entry: "constant string" $@110 ":" value
+#line 2479 "dhcp4_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 3933 "dhcp4_parser.cc"
+#line 3963 "dhcp4_parser.cc"
     break;
 
-  case 708: // $@111: %empty
-#line 2462 "dhcp4_parser.yy"
+  case 714: // $@111: %empty
+#line 2486 "dhcp4_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3941,291 +3971,291 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 3945 "dhcp4_parser.cc"
+#line 3975 "dhcp4_parser.cc"
     break;
 
-  case 709: // dhcp_ddns: "dhcp-ddns" $@111 ":" "{" dhcp_ddns_params "}"
-#line 2468 "dhcp4_parser.yy"
+  case 715: // dhcp_ddns: "dhcp-ddns" $@111 ":" "{" dhcp_ddns_params "}"
+#line 2492 "dhcp4_parser.yy"
                                                        {
     // 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 3956 "dhcp4_parser.cc"
+#line 3986 "dhcp4_parser.cc"
     break;
 
-  case 710: // $@112: %empty
-#line 2475 "dhcp4_parser.yy"
+  case 716: // $@112: %empty
+#line 2499 "dhcp4_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3966 "dhcp4_parser.cc"
+#line 3996 "dhcp4_parser.cc"
     break;
 
-  case 711: // sub_dhcp_ddns: "{" $@112 dhcp_ddns_params "}"
-#line 2479 "dhcp4_parser.yy"
+  case 717: // sub_dhcp_ddns: "{" $@112 dhcp_ddns_params "}"
+#line 2503 "dhcp4_parser.yy"
                                   {
     // 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 3976 "dhcp4_parser.cc"
+#line 4006 "dhcp4_parser.cc"
     break;
 
-  case 714: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2487 "dhcp4_parser.yy"
+  case 720: // dhcp_ddns_params: dhcp_ddns_params ","
+#line 2511 "dhcp4_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 3984 "dhcp4_parser.cc"
+#line 4014 "dhcp4_parser.cc"
     break;
 
-  case 733: // enable_updates: "enable-updates" ":" "boolean"
-#line 2512 "dhcp4_parser.yy"
+  case 739: // enable_updates: "enable-updates" ":" "boolean"
+#line 2536 "dhcp4_parser.yy"
                                              {
     ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 3994 "dhcp4_parser.cc"
+#line 4024 "dhcp4_parser.cc"
     break;
 
-  case 734: // $@113: %empty
-#line 2518 "dhcp4_parser.yy"
+  case 740: // $@113: %empty
+#line 2542 "dhcp4_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4003 "dhcp4_parser.cc"
+#line 4033 "dhcp4_parser.cc"
     break;
 
-  case 735: // server_ip: "server-ip" $@113 ":" "constant string"
-#line 2521 "dhcp4_parser.yy"
+  case 741: // server_ip: "server-ip" $@113 ":" "constant string"
+#line 2545 "dhcp4_parser.yy"
                {
     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 4013 "dhcp4_parser.cc"
+#line 4043 "dhcp4_parser.cc"
     break;
 
-  case 736: // server_port: "server-port" ":" "integer"
-#line 2527 "dhcp4_parser.yy"
+  case 742: // server_port: "server-port" ":" "integer"
+#line 2551 "dhcp4_parser.yy"
                                        {
     ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 4023 "dhcp4_parser.cc"
+#line 4053 "dhcp4_parser.cc"
     break;
 
-  case 737: // $@114: %empty
-#line 2533 "dhcp4_parser.yy"
+  case 743: // $@114: %empty
+#line 2557 "dhcp4_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4032 "dhcp4_parser.cc"
+#line 4062 "dhcp4_parser.cc"
     break;
 
-  case 738: // sender_ip: "sender-ip" $@114 ":" "constant string"
-#line 2536 "dhcp4_parser.yy"
+  case 744: // sender_ip: "sender-ip" $@114 ":" "constant string"
+#line 2560 "dhcp4_parser.yy"
                {
     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 4042 "dhcp4_parser.cc"
+#line 4072 "dhcp4_parser.cc"
     break;
 
-  case 739: // sender_port: "sender-port" ":" "integer"
-#line 2542 "dhcp4_parser.yy"
+  case 745: // sender_port: "sender-port" ":" "integer"
+#line 2566 "dhcp4_parser.yy"
                                        {
     ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 4052 "dhcp4_parser.cc"
+#line 4082 "dhcp4_parser.cc"
     break;
 
-  case 740: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2548 "dhcp4_parser.yy"
+  case 746: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2572 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].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 4062 "dhcp4_parser.cc"
+#line 4092 "dhcp4_parser.cc"
     break;
 
-  case 741: // $@115: %empty
-#line 2554 "dhcp4_parser.yy"
+  case 747: // $@115: %empty
+#line 2578 "dhcp4_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4071 "dhcp4_parser.cc"
+#line 4101 "dhcp4_parser.cc"
     break;
 
-  case 742: // ncr_protocol: "ncr-protocol" $@115 ":" ncr_protocol_value
-#line 2557 "dhcp4_parser.yy"
+  case 748: // ncr_protocol: "ncr-protocol" $@115 ":" ncr_protocol_value
+#line 2581 "dhcp4_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4080 "dhcp4_parser.cc"
+#line 4110 "dhcp4_parser.cc"
     break;
 
-  case 743: // ncr_protocol_value: "udp"
-#line 2563 "dhcp4_parser.yy"
+  case 749: // ncr_protocol_value: "udp"
+#line 2587 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4086 "dhcp4_parser.cc"
+#line 4116 "dhcp4_parser.cc"
     break;
 
-  case 744: // ncr_protocol_value: "tcp"
-#line 2564 "dhcp4_parser.yy"
+  case 750: // ncr_protocol_value: "tcp"
+#line 2588 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4092 "dhcp4_parser.cc"
+#line 4122 "dhcp4_parser.cc"
     break;
 
-  case 745: // $@116: %empty
-#line 2567 "dhcp4_parser.yy"
+  case 751: // $@116: %empty
+#line 2591 "dhcp4_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4101 "dhcp4_parser.cc"
+#line 4131 "dhcp4_parser.cc"
     break;
 
-  case 746: // ncr_format: "ncr-format" $@116 ":" "JSON"
-#line 2570 "dhcp4_parser.yy"
+  case 752: // ncr_format: "ncr-format" $@116 ":" "JSON"
+#line 2594 "dhcp4_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4111 "dhcp4_parser.cc"
+#line 4141 "dhcp4_parser.cc"
     break;
 
-  case 747: // $@117: %empty
-#line 2577 "dhcp4_parser.yy"
+  case 753: // $@117: %empty
+#line 2601 "dhcp4_parser.yy"
                                          {
     ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4120 "dhcp4_parser.cc"
+#line 4150 "dhcp4_parser.cc"
     break;
 
-  case 748: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
-#line 2580 "dhcp4_parser.yy"
+  case 754: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
+#line 2604 "dhcp4_parser.yy"
                {
     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 4130 "dhcp4_parser.cc"
+#line 4160 "dhcp4_parser.cc"
     break;
 
-  case 749: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2587 "dhcp4_parser.yy"
+  case 755: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2611 "dhcp4_parser.yy"
                                                          {
     ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 4140 "dhcp4_parser.cc"
+#line 4170 "dhcp4_parser.cc"
     break;
 
-  case 750: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2594 "dhcp4_parser.yy"
+  case 756: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2618 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 4150 "dhcp4_parser.cc"
+#line 4180 "dhcp4_parser.cc"
     break;
 
-  case 751: // $@118: %empty
-#line 2601 "dhcp4_parser.yy"
+  case 757: // $@118: %empty
+#line 2625 "dhcp4_parser.yy"
                                              {
     ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 4159 "dhcp4_parser.cc"
+#line 4189 "dhcp4_parser.cc"
     break;
 
-  case 752: // dep_replace_client_name: "replace-client-name" $@118 ":" ddns_replace_client_name_value
-#line 2604 "dhcp4_parser.yy"
+  case 758: // dep_replace_client_name: "replace-client-name" $@118 ":" ddns_replace_client_name_value
+#line 2628 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4168 "dhcp4_parser.cc"
+#line 4198 "dhcp4_parser.cc"
     break;
 
-  case 753: // $@119: %empty
-#line 2610 "dhcp4_parser.yy"
+  case 759: // $@119: %empty
+#line 2634 "dhcp4_parser.yy"
                                        {
     ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4177 "dhcp4_parser.cc"
+#line 4207 "dhcp4_parser.cc"
     break;
 
-  case 754: // dep_generated_prefix: "generated-prefix" $@119 ":" "constant string"
-#line 2613 "dhcp4_parser.yy"
+  case 760: // dep_generated_prefix: "generated-prefix" $@119 ":" "constant string"
+#line 2637 "dhcp4_parser.yy"
                {
     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 4187 "dhcp4_parser.cc"
+#line 4217 "dhcp4_parser.cc"
     break;
 
-  case 755: // $@120: %empty
-#line 2620 "dhcp4_parser.yy"
+  case 761: // $@120: %empty
+#line 2644 "dhcp4_parser.yy"
                                          {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4196 "dhcp4_parser.cc"
+#line 4226 "dhcp4_parser.cc"
     break;
 
-  case 756: // dep_hostname_char_set: "hostname-char-set" $@120 ":" "constant string"
-#line 2623 "dhcp4_parser.yy"
+  case 762: // dep_hostname_char_set: "hostname-char-set" $@120 ":" "constant string"
+#line 2647 "dhcp4_parser.yy"
                {
     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 4206 "dhcp4_parser.cc"
+#line 4236 "dhcp4_parser.cc"
     break;
 
-  case 757: // $@121: %empty
-#line 2630 "dhcp4_parser.yy"
+  case 763: // $@121: %empty
+#line 2654 "dhcp4_parser.yy"
                                                          {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4215 "dhcp4_parser.cc"
+#line 4245 "dhcp4_parser.cc"
     break;
 
-  case 758: // dep_hostname_char_replacement: "hostname-char-replacement" $@121 ":" "constant string"
-#line 2633 "dhcp4_parser.yy"
+  case 764: // dep_hostname_char_replacement: "hostname-char-replacement" $@121 ":" "constant string"
+#line 2657 "dhcp4_parser.yy"
                {
     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 4225 "dhcp4_parser.cc"
+#line 4255 "dhcp4_parser.cc"
     break;
 
-  case 759: // $@122: %empty
-#line 2642 "dhcp4_parser.yy"
+  case 765: // $@122: %empty
+#line 2666 "dhcp4_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4233,48 +4263,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4237 "dhcp4_parser.cc"
+#line 4267 "dhcp4_parser.cc"
     break;
 
-  case 760: // config_control: "config-control" $@122 ":" "{" config_control_params "}"
-#line 2648 "dhcp4_parser.yy"
+  case 766: // config_control: "config-control" $@122 ":" "{" config_control_params "}"
+#line 2672 "dhcp4_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4247 "dhcp4_parser.cc"
+#line 4277 "dhcp4_parser.cc"
     break;
 
-  case 761: // $@123: %empty
-#line 2654 "dhcp4_parser.yy"
+  case 767: // $@123: %empty
+#line 2678 "dhcp4_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4257 "dhcp4_parser.cc"
+#line 4287 "dhcp4_parser.cc"
     break;
 
-  case 762: // sub_config_control: "{" $@123 config_control_params "}"
-#line 2658 "dhcp4_parser.yy"
+  case 768: // sub_config_control: "{" $@123 config_control_params "}"
+#line 2682 "dhcp4_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4266 "dhcp4_parser.cc"
+#line 4296 "dhcp4_parser.cc"
     break;
 
-  case 765: // config_control_params: config_control_params ","
-#line 2666 "dhcp4_parser.yy"
+  case 771: // config_control_params: config_control_params ","
+#line 2690 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4274 "dhcp4_parser.cc"
+#line 4304 "dhcp4_parser.cc"
     break;
 
-  case 768: // $@124: %empty
-#line 2676 "dhcp4_parser.yy"
+  case 774: // $@124: %empty
+#line 2700 "dhcp4_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4282,30 +4312,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4286 "dhcp4_parser.cc"
+#line 4316 "dhcp4_parser.cc"
     break;
 
-  case 769: // config_databases: "config-databases" $@124 ":" "[" database_list "]"
-#line 2682 "dhcp4_parser.yy"
+  case 775: // config_databases: "config-databases" $@124 ":" "[" database_list "]"
+#line 2706 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4295 "dhcp4_parser.cc"
+#line 4325 "dhcp4_parser.cc"
     break;
 
-  case 770: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2687 "dhcp4_parser.yy"
+  case 776: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2711 "dhcp4_parser.yy"
                                                              {
     ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].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 4305 "dhcp4_parser.cc"
+#line 4335 "dhcp4_parser.cc"
     break;
 
-  case 771: // $@125: %empty
-#line 2695 "dhcp4_parser.yy"
+  case 777: // $@125: %empty
+#line 2719 "dhcp4_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4313,83 +4343,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4317 "dhcp4_parser.cc"
+#line 4347 "dhcp4_parser.cc"
     break;
 
-  case 772: // loggers: "loggers" $@125 ":" "[" loggers_entries "]"
-#line 2701 "dhcp4_parser.yy"
+  case 778: // loggers: "loggers" $@125 ":" "[" loggers_entries "]"
+#line 2725 "dhcp4_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4326 "dhcp4_parser.cc"
+#line 4356 "dhcp4_parser.cc"
     break;
 
-  case 775: // loggers_entries: loggers_entries ","
-#line 2710 "dhcp4_parser.yy"
+  case 781: // loggers_entries: loggers_entries ","
+#line 2734 "dhcp4_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4334 "dhcp4_parser.cc"
+#line 4364 "dhcp4_parser.cc"
     break;
 
-  case 776: // $@126: %empty
-#line 2716 "dhcp4_parser.yy"
+  case 782: // $@126: %empty
+#line 2740 "dhcp4_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4344 "dhcp4_parser.cc"
+#line 4374 "dhcp4_parser.cc"
     break;
 
-  case 777: // logger_entry: "{" $@126 logger_params "}"
-#line 2720 "dhcp4_parser.yy"
+  case 783: // logger_entry: "{" $@126 logger_params "}"
+#line 2744 "dhcp4_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4352 "dhcp4_parser.cc"
+#line 4382 "dhcp4_parser.cc"
     break;
 
-  case 780: // logger_params: logger_params ","
-#line 2726 "dhcp4_parser.yy"
+  case 786: // logger_params: logger_params ","
+#line 2750 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4360 "dhcp4_parser.cc"
+#line 4390 "dhcp4_parser.cc"
     break;
 
-  case 788: // debuglevel: "debuglevel" ":" "integer"
-#line 2740 "dhcp4_parser.yy"
+  case 794: // debuglevel: "debuglevel" ":" "integer"
+#line 2764 "dhcp4_parser.yy"
                                      {
     ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
     ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 4370 "dhcp4_parser.cc"
+#line 4400 "dhcp4_parser.cc"
     break;
 
-  case 789: // $@127: %empty
-#line 2746 "dhcp4_parser.yy"
+  case 795: // $@127: %empty
+#line 2770 "dhcp4_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4379 "dhcp4_parser.cc"
+#line 4409 "dhcp4_parser.cc"
     break;
 
-  case 790: // severity: "severity" $@127 ":" "constant string"
-#line 2749 "dhcp4_parser.yy"
+  case 796: // severity: "severity" $@127 ":" "constant string"
+#line 2773 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 4389 "dhcp4_parser.cc"
+#line 4419 "dhcp4_parser.cc"
     break;
 
-  case 791: // $@128: %empty
-#line 2755 "dhcp4_parser.yy"
+  case 797: // $@128: %empty
+#line 2779 "dhcp4_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4397,122 +4427,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4401 "dhcp4_parser.cc"
+#line 4431 "dhcp4_parser.cc"
     break;
 
-  case 792: // output_options_list: "output_options" $@128 ":" "[" output_options_list_content "]"
-#line 2761 "dhcp4_parser.yy"
+  case 798: // output_options_list: "output_options" $@128 ":" "[" output_options_list_content "]"
+#line 2785 "dhcp4_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4410 "dhcp4_parser.cc"
+#line 4440 "dhcp4_parser.cc"
     break;
 
-  case 795: // output_options_list_content: output_options_list_content ","
-#line 2768 "dhcp4_parser.yy"
+  case 801: // output_options_list_content: output_options_list_content ","
+#line 2792 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 4418 "dhcp4_parser.cc"
+#line 4448 "dhcp4_parser.cc"
     break;
 
-  case 796: // $@129: %empty
-#line 2773 "dhcp4_parser.yy"
+  case 802: // $@129: %empty
+#line 2797 "dhcp4_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4428 "dhcp4_parser.cc"
+#line 4458 "dhcp4_parser.cc"
     break;
 
-  case 797: // output_entry: "{" $@129 output_params_list "}"
-#line 2777 "dhcp4_parser.yy"
+  case 803: // output_entry: "{" $@129 output_params_list "}"
+#line 2801 "dhcp4_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4436 "dhcp4_parser.cc"
+#line 4466 "dhcp4_parser.cc"
     break;
 
-  case 800: // output_params_list: output_params_list ","
-#line 2783 "dhcp4_parser.yy"
+  case 806: // output_params_list: output_params_list ","
+#line 2807 "dhcp4_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4444 "dhcp4_parser.cc"
+#line 4474 "dhcp4_parser.cc"
     break;
 
-  case 806: // $@130: %empty
-#line 2795 "dhcp4_parser.yy"
+  case 812: // $@130: %empty
+#line 2819 "dhcp4_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4453 "dhcp4_parser.cc"
+#line 4483 "dhcp4_parser.cc"
     break;
 
-  case 807: // output: "output" $@130 ":" "constant string"
-#line 2798 "dhcp4_parser.yy"
+  case 813: // output: "output" $@130 ":" "constant string"
+#line 2822 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 4463 "dhcp4_parser.cc"
+#line 4493 "dhcp4_parser.cc"
     break;
 
-  case 808: // flush: "flush" ":" "boolean"
-#line 2804 "dhcp4_parser.yy"
+  case 814: // flush: "flush" ":" "boolean"
+#line 2828 "dhcp4_parser.yy"
                            {
     ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
     ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 4473 "dhcp4_parser.cc"
+#line 4503 "dhcp4_parser.cc"
     break;
 
-  case 809: // maxsize: "maxsize" ":" "integer"
-#line 2810 "dhcp4_parser.yy"
+  case 815: // maxsize: "maxsize" ":" "integer"
+#line 2834 "dhcp4_parser.yy"
                                {
     ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 4483 "dhcp4_parser.cc"
+#line 4513 "dhcp4_parser.cc"
     break;
 
-  case 810: // maxver: "maxver" ":" "integer"
-#line 2816 "dhcp4_parser.yy"
+  case 816: // maxver: "maxver" ":" "integer"
+#line 2840 "dhcp4_parser.yy"
                              {
     ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 4493 "dhcp4_parser.cc"
+#line 4523 "dhcp4_parser.cc"
     break;
 
-  case 811: // $@131: %empty
-#line 2822 "dhcp4_parser.yy"
+  case 817: // $@131: %empty
+#line 2846 "dhcp4_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4502 "dhcp4_parser.cc"
+#line 4532 "dhcp4_parser.cc"
     break;
 
-  case 812: // pattern: "pattern" $@131 ":" "constant string"
-#line 2825 "dhcp4_parser.yy"
+  case 818: // pattern: "pattern" $@131 ":" "constant string"
+#line 2849 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 4512 "dhcp4_parser.cc"
+#line 4542 "dhcp4_parser.cc"
     break;
 
-  case 813: // $@132: %empty
-#line 2831 "dhcp4_parser.yy"
+  case 819: // $@132: %empty
+#line 2855 "dhcp4_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4520,38 +4550,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 4524 "dhcp4_parser.cc"
+#line 4554 "dhcp4_parser.cc"
     break;
 
-  case 814: // compatibility: "compatibility" $@132 ":" "{" compatibility_params "}"
-#line 2837 "dhcp4_parser.yy"
+  case 820: // compatibility: "compatibility" $@132 ":" "{" compatibility_params "}"
+#line 2861 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4533 "dhcp4_parser.cc"
+#line 4563 "dhcp4_parser.cc"
     break;
 
-  case 817: // compatibility_params: compatibility_params ","
-#line 2844 "dhcp4_parser.yy"
+  case 823: // compatibility_params: compatibility_params ","
+#line 2868 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4541 "dhcp4_parser.cc"
+#line 4571 "dhcp4_parser.cc"
     break;
 
-  case 820: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2853 "dhcp4_parser.yy"
+  case 826: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 2877 "dhcp4_parser.yy"
                                                              {
     ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lenient-option-parsing", b);
 }
-#line 4551 "dhcp4_parser.cc"
+#line 4581 "dhcp4_parser.cc"
     break;
 
 
-#line 4555 "dhcp4_parser.cc"
+#line 4585 "dhcp4_parser.cc"
 
             default:
               break;
@@ -4903,139 +4933,140 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short Dhcp4Parser::yypact_ninf_ = -971;
+  const short Dhcp4Parser::yypact_ninf_ = -980;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short
   Dhcp4Parser::yypact_[] =
   {
-     429,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,    39,    38,    26,    48,    62,    74,
-      92,    96,   106,   114,   118,   140,   148,   163,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,    38,  -152,   125,   132,   126,   294,
-     -50,   315,   -16,    80,   200,   -84,   617,    77,  -971,   181,
-     154,   228,   209,   258,  -971,    34,  -971,  -971,  -971,  -971,
-     264,   266,   275,  -971,  -971,  -971,  -971,  -971,  -971,   276,
-     300,   325,   332,   348,   360,   361,   373,   377,   383,   384,
-    -971,   385,   386,   387,   388,   389,  -971,  -971,  -971,   391,
-     400,   401,  -971,  -971,  -971,   405,  -971,  -971,  -971,  -971,
-     406,   408,   409,  -971,  -971,  -971,  -971,  -971,   412,  -971,
-    -971,  -971,  -971,  -971,  -971,   415,   416,   417,  -971,  -971,
-     419,  -971,    56,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-     421,   422,   423,   424,  -971,    79,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,   425,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-      85,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,    93,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,   343,   427,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   426,
-    -971,  -971,   428,  -971,  -971,  -971,   431,  -971,  -971,   435,
-     433,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   442,   443,  -971,  -971,  -971,  -971,
-     444,   448,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   120,  -971,  -971,  -971,   449,  -971,
-    -971,   450,  -971,   451,   452,  -971,  -971,   454,   456,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,   121,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   458,   128,  -971,  -971,  -971,  -971,
-      38,    38,  -971,   263,   459,  -971,  -971,   462,   466,   472,
-     274,   277,   278,   477,   480,   482,   483,   484,   489,   295,
-     298,   299,   302,   303,   290,   308,   309,   316,   306,   311,
-     515,   318,   320,   319,   321,   322,   521,   526,   527,   333,
-     334,   335,   528,   538,   539,   341,   542,   544,   545,   546,
-     346,   349,   351,   556,   557,   560,   562,   563,   365,   567,
-     568,   570,   574,   575,   578,   378,   379,   399,   586,   587,
-    -971,   132,  -971,   588,   601,   602,   407,   432,   410,   411,
-     126,  -971,   627,   628,   630,   632,   634,   636,   436,   642,
-     643,   644,   294,  -971,   645,   -50,  -971,   646,   648,   649,
-     650,   651,   652,   655,   656,  -971,   315,  -971,   657,   658,
-     460,   667,   671,   673,   473,  -971,    80,   675,   475,   476,
-    -971,   200,   678,   679,   179,  -971,   479,   685,   686,   488,
-     688,   490,   502,   702,   703,   503,   516,   718,   721,   722,
-     723,   617,  -971,   728,   530,    77,  -971,  -971,  -971,   730,
-     729,   732,   734,   736,  -971,  -971,  -971,   533,   543,   548,
-     737,   739,   746,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   551,  -971,  -971,  -971,  -971,  -971,
-     -94,   554,   558,  -971,  -971,  -971,   753,   754,   756,  -971,
-     757,   758,   564,   231,  -971,  -971,  -971,   759,   762,   763,
-     764,   777,  -971,   778,   779,   780,   781,   590,   591,  -971,
-    -971,  -971,   765,   782,  -971,   789,   172,   301,  -971,  -971,
-    -971,  -971,  -971,   593,   594,   595,   793,   597,   598,  -971,
-     789,   599,   795,  -971,   603,  -971,   789,   604,   605,   608,
-     609,   610,   611,   612,  -971,   613,   614,  -971,   615,   616,
-     618,  -971,  -971,   619,  -971,  -971,  -971,   620,   758,  -971,
-    -971,   621,   622,  -971,   623,  -971,  -971,    13,   659,  -971,
-    -971,   -94,   624,   626,   629,  -971,   798,  -971,  -971,    38,
-     132,    77,   126,   802,  -971,  -971,  -971,   552,   552,   797,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   823,
-     825,   826,   827,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,   -17,   828,   829,   831,   119,    82,   184,   147,   617,
-    -971,  -971,   832,  -144,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,   833,  -971,  -971,  -971,  -971,
-     122,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   797,
-    -971,   136,   151,   170,  -971,   171,  -971,  -971,  -971,  -971,
-    -971,  -971,   837,   838,   839,   840,   841,   842,   843,  -971,
-     844,  -971,  -971,  -971,  -971,  -971,   178,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,   213,  -971,   845,   846,
-    -971,  -971,   847,   849,  -971,  -971,   848,   852,  -971,  -971,
-     850,   854,  -971,  -971,   853,   855,  -971,  -971,  -971,  -971,
-    -971,  -971,    94,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-     150,  -971,  -971,   856,   857,  -971,  -971,   858,   860,  -971,
-     861,   862,   863,   864,   865,   866,   215,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   867,   868,   869,  -971,   257,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-     259,  -971,  -971,  -971,   870,  -971,   871,  -971,  -971,  -971,
-     261,  -971,  -971,  -971,  -971,  -971,   268,  -971,   185,  -971,
-     872,  -971,   269,  -971,  -971,   676,  -971,   873,   874,  -971,
-    -971,  -971,  -971,   875,   876,  -971,  -971,  -971,   877,   802,
-    -971,   880,   881,   882,   883,   647,   683,   677,   684,   687,
-     689,   690,   887,   691,   891,   892,   893,   894,   552,  -971,
-    -971,   552,  -971,   797,   294,  -971,   823,    80,  -971,   825,
-     200,  -971,   826,   635,  -971,   827,   -17,  -971,   555,   828,
-    -971,   315,  -971,   829,   -84,  -971,   831,   696,   697,   698,
-     699,   700,   701,   119,  -971,   704,   705,   708,    82,  -971,
-     901,   902,   184,  -971,   707,   910,   712,   916,   147,  -971,
-    -971,   135,   832,  -971,   717,  -144,  -971,  -971,   919,   927,
-     -50,  -971,   833,   942,  -971,  -971,   747,  -971,   305,   750,
-     772,   783,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   331,
-    -971,   787,   788,   799,   800,  -971,   280,  -971,   292,  -971,
-     923,  -971,   956,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,   293,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   977,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,   974,  1012,  -971,  -971,  -971,  -971,  -971,  1037,
-    -971,   310,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,   859,   878,  -971,  -971,   879,  -971,
-      38,  -971,  -971,  1045,  -971,  -971,  -971,  -971,  -971,   312,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   884,   327,
-    -971,   789,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,   635,  -971,  1046,   851,  -971,   555,  -971,  -971,
-    -971,  -971,  -971,  -971,  1050,   885,  1051,   135,  -971,  -971,
-    -971,  -971,  -971,   888,  -971,  -971,  1052,  -971,   889,  -971,
-    -971,  1053,  -971,  -971,   347,  -971,  -100,  1053,  -971,  -971,
-    1054,  1055,  1058,  -971,   330,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  1059,   890,   886,   895,  1060,  -100,  -971,   897,
-    -971,  -971,  -971,   899,  -971,  -971,  -971
+     152,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,    71,    38,    26,    75,    82,   110,
+     114,   146,   148,   185,   187,   198,   204,   231,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,    38,  -155,   115,   184,   126,   632,
+     -53,    74,   186,    76,    -9,   -87,   433,    98,  -980,   129,
+     144,   276,   279,   288,  -980,    34,  -980,  -980,  -980,  -980,
+     289,   322,   334,  -980,  -980,  -980,  -980,  -980,  -980,   369,
+     375,   381,   384,   386,   387,   388,   389,   390,   391,   392,
+    -980,   393,   397,   412,   413,   414,  -980,  -980,  -980,   421,
+     422,   423,  -980,  -980,  -980,   424,  -980,  -980,  -980,  -980,
+     425,   426,   427,  -980,  -980,  -980,  -980,  -980,   428,  -980,
+    -980,  -980,  -980,  -980,  -980,   430,   431,   432,  -980,  -980,
+     434,  -980,    36,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+     435,   436,   437,   438,  -980,    72,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,   439,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+      73,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   100,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,   429,   441,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   443,
+    -980,  -980,   442,  -980,  -980,  -980,   448,  -980,  -980,   446,
+     444,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,   451,   452,  -980,  -980,  -980,  -980,
+     450,   457,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,   120,  -980,  -980,  -980,   458,  -980,
+    -980,   459,  -980,   461,   462,  -980,  -980,   463,   464,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,   121,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,   466,   128,  -980,  -980,  -980,  -980,
+      38,    38,  -980,   271,   475,  -980,  -980,   477,   478,   480,
+     280,   285,   287,   482,   483,   492,   494,   497,   498,   299,
+     300,   303,   306,   307,   309,   312,   313,   314,   308,   318,
+     519,   320,   321,   323,   324,   328,   521,   526,   536,   335,
+     336,   338,   538,   545,   546,   345,   550,   552,   556,   557,
+     356,   359,   360,   567,   568,   570,   574,   575,   376,   579,
+     580,   582,   583,   584,   585,   395,   396,   398,   601,   603,
+    -980,   184,  -980,   604,   607,   608,   405,   406,   409,   410,
+     126,  -980,   613,   614,   615,   616,   617,   618,   417,   620,
+     621,   622,   632,  -980,   623,   -53,  -980,   624,   625,   626,
+     627,   628,   630,   633,   635,  -980,    74,  -980,   636,   637,
+     440,   638,   639,   640,   445,  -980,    76,   643,   447,   449,
+    -980,    -9,   644,   645,    24,  -980,   460,   646,   648,   453,
+     650,   454,   465,   652,   654,   467,   469,   662,   663,   669,
+     670,   433,  -980,   674,   473,    98,  -980,  -980,  -980,   676,
+     629,   675,   677,   682,  -980,  -980,  -980,   476,   485,   486,
+     685,   686,   678,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,   500,  -980,  -980,  -980,  -980,  -980,
+     -11,   501,   502,  -980,  -980,  -980,   703,   713,   717,  -980,
+     719,   718,   522,   193,  -980,  -980,  -980,   721,   727,   728,
+     729,   736,  -980,   737,   738,   739,   743,   531,   548,  -980,
+    -980,  -980,   746,   747,  -980,   752,   211,   220,  -980,  -980,
+    -980,  -980,  -980,   553,   554,   555,   756,   564,   565,  -980,
+     752,   566,   755,  -980,   569,  -980,   752,   571,   572,   573,
+     576,   577,   578,   581,  -980,   586,   587,  -980,   588,   589,
+     590,  -980,  -980,   591,  -980,  -980,  -980,   592,   718,  -980,
+    -980,   605,   606,  -980,   619,  -980,  -980,    13,   602,  -980,
+    -980,   -11,   631,   634,   641,  -980,   767,  -980,  -980,    38,
+     184,    98,   126,   748,  -980,  -980,  -980,   361,   361,   772,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   773,
+     777,   778,   780,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,   250,   781,   782,   783,   174,   -47,    83,   118,   433,
+    -980,  -980,   815,  -136,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,   816,  -980,  -980,  -980,  -980,
+     239,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   772,
+    -980,   136,   164,   170,  -980,   182,  -980,  -980,  -980,  -980,
+    -980,  -980,   821,   824,   825,   826,   827,   828,   829,   830,
+     831,   834,  -980,   838,  -980,  -980,  -980,  -980,  -980,   183,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,   218,  -980,   841,   845,  -980,  -980,   843,   850,
+    -980,  -980,   848,   853,  -980,  -980,   851,   856,  -980,  -980,
+     854,   858,  -980,  -980,  -980,  -980,  -980,  -980,    87,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,   140,  -980,  -980,   857,
+     859,  -980,  -980,   861,   862,  -980,   840,   860,   864,   865,
+     866,   867,   219,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+     868,   869,   870,  -980,   227,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,   234,  -980,  -980,  -980,
+     871,  -980,   872,  -980,  -980,  -980,   274,  -980,  -980,  -980,
+    -980,  -980,   275,  -980,   163,  -980,   873,  -980,   316,  -980,
+    -980,   673,  -980,   874,   876,  -980,  -980,  -980,  -980,   875,
+     878,  -980,  -980,  -980,   877,   748,  -980,   881,   882,   883,
+     884,   683,   684,   687,   688,   689,   691,   692,   693,   694,
+     695,   886,   696,   887,   890,   899,   900,   361,  -980,  -980,
+     361,  -980,   772,   632,  -980,   773,    76,  -980,   777,    -9,
+    -980,   778,   735,  -980,   780,   250,  -980,   278,   781,  -980,
+      74,  -980,   782,   -87,  -980,   783,   699,   700,   701,   702,
+     704,   707,   174,  -980,   706,   709,   711,   -47,  -980,   905,
+     914,    83,  -980,   712,   917,   723,   919,   118,  -980,  -980,
+     -28,   815,  -980,   716,  -136,  -980,  -980,   925,   879,   -53,
+    -980,   816,   930,  -980,  -980,   734,  -980,   169,   750,   753,
+     768,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,   302,  -980,   785,   786,   789,   793,  -980,   317,  -980,
+     319,  -980,   953,  -980,   975,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   327,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,   995,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  1002,  1008,  -980,  -980,  -980,  -980,
+    -980,  1016,  -980,   329,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,   849,   863,  -980,  -980,
+     880,  -980,    38,  -980,  -980,  1054,  -980,  -980,  -980,  -980,
+    -980,   331,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+     885,   378,  -980,   752,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,   735,  -980,  1055,   855,  -980,   278,
+    -980,  -980,  -980,  -980,  -980,  -980,  1060,   888,  1061,   -28,
+    -980,  -980,  -980,  -980,  -980,   891,  -980,  -980,  1062,  -980,
+     892,  -980,  -980,  1059,  -980,  -980,   181,  -980,   109,  1059,
+    -980,  -980,  1065,  1066,  1067,  -980,   379,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  1068,   893,   889,   894,  1069,   109,
+    -980,   897,  -980,  -980,  -980,   898,  -980,  -980,  -980
   };
 
   const short
@@ -5045,17 +5076,17 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     1,    44,
       36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
-      59,     5,    65,     7,   192,     9,   361,    11,   569,    13,
-     596,    15,   489,    17,   498,    19,   537,    21,   323,    23,
-     710,    25,   761,    27,    46,    39,     0,     0,     0,     0,
-       0,   598,     0,   500,   539,     0,     0,     0,    48,     0,
-      47,     0,     0,    40,    61,     0,    63,   759,   177,   210,
-       0,     0,     0,   618,   620,   622,   208,   218,   220,     0,
+      59,     5,    65,     7,   192,     9,   367,    11,   575,    13,
+     602,    15,   495,    17,   504,    19,   543,    21,   329,    23,
+     716,    25,   767,    27,    46,    39,     0,     0,     0,     0,
+       0,   604,     0,   506,   545,     0,     0,     0,    48,     0,
+      47,     0,     0,    40,    61,     0,    63,   765,   177,   210,
+       0,     0,     0,   624,   626,   628,   208,   218,   220,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      145,     0,     0,     0,     0,     0,   154,   161,   163,     0,
-       0,     0,   352,   487,   528,     0,   435,   583,   585,   428,
-       0,     0,     0,   285,   646,   587,   314,   335,     0,   300,
-     677,   691,   708,   167,   169,     0,     0,     0,   771,   813,
+       0,     0,   358,   493,   534,     0,   441,   589,   591,   434,
+       0,     0,     0,   291,   652,   593,   320,   341,     0,   306,
+     683,   697,   714,   167,   169,     0,     0,     0,   777,   819,
        0,   133,     0,    67,    70,    71,    72,    73,    74,   108,
      109,   110,   111,   112,    75,   103,   132,    92,    93,    94,
      116,   117,   118,   119,   120,   121,   122,   123,   114,   115,
@@ -5064,25 +5095,25 @@ namespace isc { namespace dhcp {
       77,    84,    85,    98,    99,   101,    95,    96,    97,    83,
       88,    89,    90,    91,   102,   113,   131,   194,   196,   200,
        0,     0,     0,     0,   191,     0,   179,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   413,   415,   417,   560,
-     411,   419,     0,   423,   421,   642,   410,   366,   367,   368,
-     369,   370,   394,   395,   396,   397,   398,   384,   385,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-       0,   363,   373,   389,   390,   391,   374,   376,   377,   380,
-     381,   382,   379,   375,   371,   372,   392,   393,   378,   386,
-     387,   388,   383,   581,   580,   576,   577,   575,     0,   571,
-     574,   578,   579,   640,   628,   630,   634,   632,   638,   636,
-     624,   617,   611,   615,   616,     0,   599,   600,   612,   613,
-     614,   608,   603,   609,   605,   606,   607,   610,   604,     0,
-     518,   263,     0,   522,   520,   525,     0,   514,   515,     0,
-     501,   502,   505,   517,   506,   507,   508,   524,   509,   510,
-     511,   512,   513,   554,     0,     0,   552,   553,   556,   557,
-       0,   540,   541,   544,   545,   546,   547,   548,   549,   550,
-     551,   331,   333,   328,     0,   325,   329,   330,     0,   747,
-     734,     0,   737,     0,     0,   741,   745,     0,     0,   751,
-     753,   755,   757,   732,   730,   731,     0,   712,   715,   716,
-     717,   718,   719,   720,   721,   722,   727,   723,   724,   725,
-     726,   728,   729,   768,     0,     0,   763,   766,   767,    45,
+     185,   186,   187,   188,   189,   190,   419,   421,   423,   566,
+     417,   425,     0,   429,   427,   648,   416,   372,   373,   374,
+     375,   376,   400,   401,   402,   403,   404,   390,   391,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+       0,   369,   379,   395,   396,   397,   380,   382,   383,   386,
+     387,   388,   385,   381,   377,   378,   398,   399,   384,   392,
+     393,   394,   389,   587,   586,   582,   583,   581,     0,   577,
+     580,   584,   585,   646,   634,   636,   640,   638,   644,   642,
+     630,   623,   617,   621,   622,     0,   605,   606,   618,   619,
+     620,   614,   609,   615,   611,   612,   613,   616,   610,     0,
+     524,   266,     0,   528,   526,   531,     0,   520,   521,     0,
+     507,   508,   511,   523,   512,   513,   514,   530,   515,   516,
+     517,   518,   519,   560,     0,     0,   558,   559,   562,   563,
+       0,   546,   547,   550,   551,   552,   553,   554,   555,   556,
+     557,   337,   339,   334,     0,   331,   335,   336,     0,   753,
+     740,     0,   743,     0,     0,   747,   751,     0,     0,   757,
+     759,   761,   763,   738,   736,   737,     0,   718,   721,   722,
+     723,   724,   725,   726,   727,   728,   733,   729,   730,   731,
+     732,   734,   735,   774,     0,     0,   769,   772,   773,    45,
       50,     0,    37,    43,     0,    64,    60,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -5092,129 +5123,130 @@ namespace isc { namespace dhcp {
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       58,    69,    66,     0,     0,     0,     0,     0,     0,     0,
      181,   193,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   365,   362,     0,   573,   570,     0,     0,     0,
-       0,     0,     0,     0,     0,   597,   602,   490,     0,     0,
-       0,     0,     0,     0,     0,   499,   504,     0,     0,     0,
-     538,   543,     0,     0,   327,   324,     0,     0,     0,     0,
+       0,     0,   371,   368,     0,   579,   576,     0,     0,     0,
+       0,     0,     0,     0,     0,   603,   608,   496,     0,     0,
+       0,     0,     0,     0,     0,   505,   510,     0,     0,     0,
+     544,   549,     0,     0,   333,   330,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   714,   711,     0,     0,   765,   762,    49,    41,     0,
+       0,   720,   717,     0,     0,   771,   768,    49,    41,     0,
        0,     0,     0,     0,   148,   149,   150,     0,     0,     0,
        0,     0,     0,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,     0,   172,   173,   151,   152,   153,
        0,     0,     0,   165,   166,   171,     0,     0,     0,   147,
-       0,     0,     0,     0,   425,   426,   427,     0,     0,     0,
-       0,     0,   676,     0,     0,     0,     0,     0,     0,   174,
+       0,     0,     0,     0,   431,   432,   433,     0,     0,     0,
+       0,     0,   682,     0,     0,     0,     0,     0,     0,   174,
      175,   176,     0,     0,    68,     0,     0,     0,   204,   205,
-     206,   207,   180,     0,     0,     0,     0,     0,     0,   434,
-       0,     0,     0,   364,     0,   572,     0,     0,     0,     0,
-       0,     0,     0,     0,   601,     0,     0,   516,     0,     0,
-       0,   527,   503,     0,   558,   559,   542,     0,     0,   326,
-     733,     0,     0,   736,     0,   739,   740,     0,     0,   749,
-     750,     0,     0,     0,     0,   713,     0,   770,   764,     0,
-       0,     0,     0,     0,   619,   621,   623,     0,     0,   222,
-     146,   156,   157,   158,   159,   160,   155,   162,   164,   354,
-     491,   530,   437,    38,   584,   586,   430,   431,   432,   433,
-     429,     0,     0,   589,   316,     0,     0,     0,     0,     0,
+     206,   207,   180,     0,     0,     0,     0,     0,     0,   440,
+       0,     0,     0,   370,     0,   578,     0,     0,     0,     0,
+       0,     0,     0,     0,   607,     0,     0,   522,     0,     0,
+       0,   533,   509,     0,   564,   565,   548,     0,     0,   332,
+     739,     0,     0,   742,     0,   745,   746,     0,     0,   755,
+     756,     0,     0,     0,     0,   719,     0,   776,   770,     0,
+       0,     0,     0,     0,   625,   627,   629,     0,     0,   222,
+     146,   156,   157,   158,   159,   160,   155,   162,   164,   360,
+     497,   536,   443,    38,   590,   592,   436,   437,   438,   439,
+     435,     0,     0,   595,   322,     0,     0,     0,     0,     0,
      168,   170,     0,     0,    51,   195,   198,   199,   197,   202,
-     203,   201,   414,   416,   418,   562,   412,   420,   424,   422,
-       0,   582,   641,   629,   631,   635,   633,   639,   637,   625,
-     519,   264,   523,   521,   526,   555,   332,   334,   748,   735,
-     738,   743,   744,   742,   746,   752,   754,   756,   758,   222,
-      42,     0,     0,     0,   216,     0,   212,   215,   251,   256,
-     258,   260,     0,     0,     0,     0,     0,     0,     0,   271,
-       0,   277,   279,   281,   283,   250,     0,   229,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,     0,   227,     0,   223,
-     224,   359,     0,   355,   356,   496,     0,   492,   493,   535,
-       0,   531,   532,   442,     0,   438,   439,   295,   296,   297,
-     298,   299,     0,   287,   290,   291,   292,   293,   294,   651,
-       0,   648,   594,     0,   590,   591,   321,     0,   317,   318,
-       0,     0,     0,     0,     0,     0,     0,   337,   340,   341,
-     342,   343,   344,   345,     0,     0,     0,   310,     0,   302,
-     305,   306,   307,   308,   309,   687,   689,   686,   684,   685,
-       0,   679,   682,   683,     0,   703,     0,   706,   699,   700,
-       0,   693,   696,   697,   698,   701,     0,   776,     0,   773,
-       0,   819,     0,   815,   818,    53,   567,     0,   563,   564,
-     626,   644,   645,     0,     0,    62,   760,   178,     0,   214,
-     211,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   231,   209,
-     219,     0,   221,   226,     0,   353,   358,   500,   488,   495,
-     539,   529,   534,     0,   436,   441,   289,   286,   653,   650,
-     647,   598,   588,   593,     0,   315,   320,     0,     0,     0,
-       0,     0,     0,   339,   336,     0,     0,     0,   304,   301,
-       0,     0,   681,   678,     0,     0,     0,     0,   695,   692,
-     709,     0,   775,   772,     0,   817,   814,    55,     0,    54,
-       0,   561,   566,     0,   643,   769,     0,   213,     0,     0,
-       0,     0,   262,   265,   266,   267,   268,   269,   270,     0,
-     276,     0,     0,     0,     0,   230,     0,   225,     0,   357,
-       0,   494,     0,   533,   486,   465,   466,   467,   450,   451,
-     470,   471,   472,   473,   474,   453,   454,   475,   476,   477,
-     478,   479,   480,   481,   482,   483,   484,   485,   447,   448,
-     449,   463,   464,   460,   461,   462,   459,     0,   444,   452,
-     468,   469,   455,   456,   457,   458,   440,   288,   673,     0,
-     668,   669,   670,   671,   672,   661,   662,   666,   667,   663,
-     664,   665,     0,   654,   655,   658,   659,   660,   649,     0,
-     592,     0,   319,   346,   347,   348,   349,   350,   351,   338,
-     311,   312,   313,   303,     0,     0,   680,   702,     0,   705,
-       0,   694,   791,     0,   789,   787,   781,   785,   786,     0,
-     778,   783,   784,   782,   774,   820,   816,    52,    57,     0,
-     565,     0,   217,   253,   254,   255,   252,   257,   259,   261,
-     273,   274,   275,   272,   278,   280,   282,   284,   228,   360,
-     497,   536,   446,   443,     0,     0,   652,   657,   595,   322,
-     688,   690,   704,   707,     0,     0,     0,   780,   777,    56,
-     568,   627,   445,     0,   675,   656,     0,   788,     0,   779,
-     674,     0,   790,   796,     0,   793,     0,   795,   792,   806,
-       0,     0,     0,   811,     0,   798,   801,   802,   803,   804,
-     805,   794,     0,     0,     0,     0,     0,   800,   797,     0,
-     808,   809,   810,     0,   799,   807,   812
+     203,   201,   420,   422,   424,   568,   418,   426,   430,   428,
+       0,   588,   647,   635,   637,   641,   639,   645,   643,   631,
+     525,   267,   529,   527,   532,   561,   338,   340,   754,   741,
+     744,   749,   750,   748,   752,   758,   760,   762,   764,   222,
+      42,     0,     0,     0,   216,     0,   212,   215,   254,   259,
+     261,   263,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   277,     0,   283,   285,   287,   289,   253,     0,
+     229,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,     0,   227,     0,   223,   224,   365,     0,   361,
+     362,   502,     0,   498,   499,   541,     0,   537,   538,   448,
+       0,   444,   445,   301,   302,   303,   304,   305,     0,   293,
+     296,   297,   298,   299,   300,   657,     0,   654,   600,     0,
+     596,   597,   327,     0,   323,   324,     0,     0,     0,     0,
+       0,     0,     0,   343,   346,   347,   348,   349,   350,   351,
+       0,     0,     0,   316,     0,   308,   311,   312,   313,   314,
+     315,   693,   695,   692,   690,   691,     0,   685,   688,   689,
+       0,   709,     0,   712,   705,   706,     0,   699,   702,   703,
+     704,   707,     0,   782,     0,   779,     0,   825,     0,   821,
+     824,    53,   573,     0,   569,   570,   632,   650,   651,     0,
+       0,    62,   766,   178,     0,   214,   211,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   231,   209,   219,
+       0,   221,   226,     0,   359,   364,   506,   494,   501,   545,
+     535,   540,     0,   442,   447,   295,   292,   659,   656,   653,
+     604,   594,   599,     0,   321,   326,     0,     0,     0,     0,
+       0,     0,   345,   342,     0,     0,     0,   310,   307,     0,
+       0,   687,   684,     0,     0,     0,     0,   701,   698,   715,
+       0,   781,   778,     0,   823,   820,    55,     0,    54,     0,
+     567,   572,     0,   649,   775,     0,   213,     0,     0,     0,
+       0,   265,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,     0,   282,     0,     0,     0,     0,   230,     0,   225,
+       0,   363,     0,   500,     0,   539,   492,   471,   472,   473,
+     456,   457,   476,   477,   478,   479,   480,   459,   460,   481,
+     482,   483,   484,   485,   486,   487,   488,   489,   490,   491,
+     453,   454,   455,   469,   470,   466,   467,   468,   465,     0,
+     450,   458,   474,   475,   461,   462,   463,   464,   446,   294,
+     679,     0,   674,   675,   676,   677,   678,   667,   668,   672,
+     673,   669,   670,   671,     0,   660,   661,   664,   665,   666,
+     655,     0,   598,     0,   325,   352,   353,   354,   355,   356,
+     357,   344,   317,   318,   319,   309,     0,     0,   686,   708,
+       0,   711,     0,   700,   797,     0,   795,   793,   787,   791,
+     792,     0,   784,   789,   790,   788,   780,   826,   822,    52,
+      57,     0,   571,     0,   217,   256,   257,   258,   255,   260,
+     262,   264,   279,   280,   281,   278,   284,   286,   288,   290,
+     228,   366,   503,   542,   452,   449,     0,     0,   658,   663,
+     601,   328,   694,   696,   710,   713,     0,     0,     0,   786,
+     783,    56,   574,   633,   451,     0,   681,   662,     0,   794,
+       0,   785,   680,     0,   796,   802,     0,   799,     0,   801,
+     798,   812,     0,     0,     0,   817,     0,   804,   807,   808,
+     809,   810,   811,   800,     0,     0,     0,     0,     0,   806,
+     803,     0,   814,   815,   816,     0,   805,   813,   818
   };
 
   const short
   Dhcp4Parser::yypgoto_[] =
   {
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,   -54,  -971,  -583,  -971,   183,
-    -971,  -971,  -971,  -971,  -971,  -971,  -635,  -971,  -971,  -971,
-     -67,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   366,   576,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,   -54,  -980,  -583,  -980,   399,
+    -980,  -980,  -980,  -980,  -980,  -980,  -635,  -980,  -980,  -980,
+     -67,  -980,  -980,  -980,  -980,  -980,  -980,  -980,   374,   593,
        4,    10,    23,   -40,   -23,   -12,    22,    25,    29,    33,
-    -971,  -971,  -971,  -971,  -971,    35,    40,    43,    45,    46,
-      47,  -971,   374,    50,  -971,    51,  -971,    53,    57,    58,
-    -971,    61,  -971,    63,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,   367,   571,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,   123,  -971,  -971,  -971,  -971,  -971,  -971,   279,
-    -971,    97,  -971,  -696,   105,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,   -33,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,    88,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,    67,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,    81,  -971,  -971,  -971,    84,
-     532,  -971,  -971,  -971,  -971,  -971,  -971,  -971,    76,  -971,
-    -971,  -971,  -971,  -971,  -971,  -970,  -971,  -971,  -971,   107,
-    -971,  -971,  -971,   108,   572,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -959,  -971,   -65,  -971,    70,  -971,    64,
-      65,    68,    69,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-     100,  -971,  -971,  -105,   -46,  -971,  -971,  -971,  -971,  -971,
-     113,  -971,  -971,  -971,   116,  -971,   561,  -971,   -63,  -971,
-    -971,  -971,  -971,  -971,   -42,  -971,  -971,  -971,  -971,  -971,
-     -35,  -971,  -971,  -971,   112,  -971,  -971,  -971,   124,  -971,
-     565,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,    71,  -971,  -971,  -971,    72,   592,  -971,  -971,
-     -51,  -971,    -8,  -971,   -39,  -971,  -971,  -971,   115,  -971,
-    -971,  -971,   127,  -971,   579,   -55,  -971,   -15,  -971,     3,
-    -971,   350,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -956,
-    -971,  -971,  -971,  -971,  -971,   130,  -971,  -971,  -971,   -88,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,    99,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,    95,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,   375,   559,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,   414,   547,
-    -971,  -971,  -971,  -971,  -971,  -971,   101,  -971,  -971,   -91,
-    -971,  -971,  -971,  -971,  -971,  -971,  -110,  -971,  -971,  -126,
-    -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,  -971,
-     103,  -971
+    -980,  -980,  -980,  -980,  -980,    35,    40,    43,    45,    46,
+      47,  -980,   385,    50,  -980,    51,  -980,    53,    57,    58,
+    -980,    61,  -980,    63,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,   373,   598,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,   123,  -980,  -980,  -980,  -980,  -980,  -980,   290,
+    -980,    99,  -980,  -696,   103,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,   -33,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,    88,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+      89,  -980,  -980,  -980,  -980,  -980,  -980,  -980,    77,  -980,
+    -980,  -980,    84,   542,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,    79,  -980,  -980,  -980,  -980,  -980,  -980,  -979,  -980,
+    -980,  -980,   104,  -980,  -980,  -980,   105,   595,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -968,  -980,   -65,  -980,
+      70,  -980,    64,    65,    68,    69,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,   111,  -980,  -980,  -112,   -46,  -980,  -980,
+    -980,  -980,  -980,   116,  -980,  -980,  -980,   107,  -980,   563,
+    -980,   -63,  -980,  -980,  -980,  -980,  -980,   -42,  -980,  -980,
+    -980,  -980,  -980,   -35,  -980,  -980,  -980,   119,  -980,  -980,
+    -980,   122,  -980,   594,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,    78,  -980,  -980,  -980,    81,
+     597,  -980,  -980,   -51,  -980,    -8,  -980,   -39,  -980,  -980,
+    -980,   112,  -980,  -980,  -980,   113,  -980,   596,   -55,  -980,
+     -15,  -980,     3,  -980,   355,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -965,  -980,  -980,  -980,  -980,  -980,   125,  -980,
+    -980,  -980,   -93,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,    96,  -980,  -980,  -980,  -980,  -980,  -980,  -980,    91,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+     382,   599,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,   455,   559,  -980,  -980,  -980,  -980,  -980,  -980,    94,
+    -980,  -980,   -92,  -980,  -980,  -980,  -980,  -980,  -980,  -113,
+    -980,  -980,  -131,  -980,  -980,  -980,  -980,  -980,  -980,  -980,
+    -980,  -980,  -980,    95,  -980
   };
 
   const short
@@ -5222,530 +5254,533 @@ namespace isc { namespace dhcp {
   {
        0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    36,    37,    38,    65,   724,
-      82,    83,    39,    64,    79,    80,   745,   935,  1028,  1029,
-     815,    41,    66,    85,   424,    86,    43,    67,   152,   153,
+      82,    83,    39,    64,    79,    80,   745,   941,  1037,  1038,
+     818,    41,    66,    85,   424,    86,    43,    67,   152,   153,
      154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
      164,   165,   450,   166,   167,   168,   169,   170,   171,   172,
      173,   456,   716,   174,   457,   175,   458,   176,   177,   178,
      483,   179,   484,   180,   181,   182,   183,   184,   185,   186,
      428,   225,   226,    45,    68,   227,   493,   228,   494,   748,
      229,   495,   751,   230,   231,   232,   233,   187,   436,   188,
-     429,   795,   796,   797,   948,   189,   437,   190,   438,   838,
-     839,   840,   971,   816,   817,   818,   951,  1176,   819,   952,
-     820,   953,   821,   954,   822,   823,   529,   824,   825,   826,
-     827,   828,   829,   830,   962,  1183,   831,   832,   964,   833,
-     965,   834,   966,   835,   967,   191,   473,   862,   863,   864,
-     865,   866,   867,   868,   192,   479,   898,   899,   900,   901,
-     902,   193,   476,   877,   878,   879,   994,    59,    75,   374,
-     375,   376,   542,   377,   543,   194,   477,   886,   887,   888,
-     889,   890,   891,   892,   893,   195,   462,   842,   843,   844,
-     974,    47,    69,   270,   271,   272,   506,   273,   502,   274,
-     503,   275,   504,   276,   507,   277,   510,   278,   509,   196,
-     197,   198,   199,   469,   730,   283,   200,   466,   854,   855,
-     856,   983,  1097,  1098,   201,   463,    53,    72,   846,   847,
-     848,   977,    55,    73,   339,   340,   341,   342,   343,   344,
-     345,   528,   346,   532,   347,   531,   348,   349,   533,   350,
-     202,   464,   850,   851,   852,   980,    57,    74,   360,   361,
-     362,   363,   364,   537,   365,   366,   367,   368,   285,   505,
-     937,   938,   939,  1030,    49,    70,   298,   299,   300,   514,
-     203,   467,   204,   468,   205,   475,   873,   874,   875,   991,
-      51,    71,   315,   316,   317,   206,   433,   207,   434,   208,
-     435,   321,   524,   942,  1033,   322,   518,   323,   519,   324,
-     521,   325,   520,   326,   523,   327,   522,   328,   517,   292,
-     511,   943,   209,   474,   870,   871,   988,  1122,  1123,  1124,
-    1125,  1126,  1194,  1127,   210,   211,   480,   910,   911,   912,
-    1010,   913,  1011,   212,   481,   920,   921,   922,   923,  1015,
-     924,   925,  1017,   213,   482,    61,    76,   396,   397,   398,
-     399,   548,   400,   401,   550,   402,   403,   404,   553,   783,
-     405,   554,   406,   547,   407,   408,   409,   557,   410,   558,
-     411,   559,   412,   560,   214,   427,    63,    77,   415,   416,
-     417,   563,   418,   215,   488,   928,   929,  1021,  1159,  1160,
-    1161,  1162,  1206,  1163,  1204,  1224,  1225,  1226,  1234,  1235,
-    1236,  1242,  1237,  1238,  1239,  1240,  1246,   216,   489,   932,
-     933,   934
+     429,   795,   796,   797,   954,   189,   437,   190,   438,   844,
+     845,   846,   980,   819,   820,   821,   957,  1188,   822,   958,
+     823,   959,   824,   960,   825,   826,   529,   827,   828,   829,
+     830,   831,   832,   833,   834,   835,   836,   971,  1195,   837,
+     838,   973,   839,   974,   840,   975,   841,   976,   191,   473,
+     868,   869,   870,   871,   872,   873,   874,   192,   479,   904,
+     905,   906,   907,   908,   193,   476,   883,   884,   885,  1003,
+      59,    75,   374,   375,   376,   542,   377,   543,   194,   477,
+     892,   893,   894,   895,   896,   897,   898,   899,   195,   462,
+     848,   849,   850,   983,    47,    69,   270,   271,   272,   506,
+     273,   502,   274,   503,   275,   504,   276,   507,   277,   510,
+     278,   509,   196,   197,   198,   199,   469,   730,   283,   200,
+     466,   860,   861,   862,   992,  1109,  1110,   201,   463,    53,
+      72,   852,   853,   854,   986,    55,    73,   339,   340,   341,
+     342,   343,   344,   345,   528,   346,   532,   347,   531,   348,
+     349,   533,   350,   202,   464,   856,   857,   858,   989,    57,
+      74,   360,   361,   362,   363,   364,   537,   365,   366,   367,
+     368,   285,   505,   943,   944,   945,  1039,    49,    70,   298,
+     299,   300,   514,   203,   467,   204,   468,   205,   475,   879,
+     880,   881,  1000,    51,    71,   315,   316,   317,   206,   433,
+     207,   434,   208,   435,   321,   524,   948,  1042,   322,   518,
+     323,   519,   324,   521,   325,   520,   326,   523,   327,   522,
+     328,   517,   292,   511,   949,   209,   474,   876,   877,   997,
+    1134,  1135,  1136,  1137,  1138,  1206,  1139,   210,   211,   480,
+     916,   917,   918,  1019,   919,  1020,   212,   481,   926,   927,
+     928,   929,  1024,   930,   931,  1026,   213,   482,    61,    76,
+     396,   397,   398,   399,   548,   400,   401,   550,   402,   403,
+     404,   553,   783,   405,   554,   406,   547,   407,   408,   409,
+     557,   410,   558,   411,   559,   412,   560,   214,   427,    63,
+      77,   415,   416,   417,   563,   418,   215,   488,   934,   935,
+    1030,  1171,  1172,  1173,  1174,  1218,  1175,  1216,  1236,  1237,
+    1238,  1246,  1247,  1248,  1254,  1249,  1250,  1251,  1252,  1258,
+     216,   489,   938,   939,   940
   };
 
   const short
   Dhcp4Parser::yytable_[] =
   {
      151,   224,   246,   294,   311,   295,   337,   356,   373,   393,
-      78,   358,   836,  1089,   289,   758,   318,   234,   286,   301,
-     313,   762,   351,   369,  1090,   394,   329,  1105,   723,   250,
-     288,   781,   359,    40,   284,   297,   312,   425,   124,    28,
-     338,   357,   426,    29,   930,    30,   251,    31,   371,   372,
-      81,   293,   127,   128,   290,    42,   319,   252,   150,   491,
-     235,   287,   302,   314,   492,   352,   370,   243,   395,    44,
-     244,   123,   291,   247,   320,   711,   712,   713,   714,   248,
-    1229,    46,   500,  1230,  1231,  1232,  1233,   501,   512,   413,
-     414,   253,   249,   513,   254,   723,   515,   986,   255,    48,
-     987,   516,   256,    50,   257,   857,   858,   859,   860,   258,
-     861,   715,   259,    52,   260,   261,   262,   330,   150,   263,
-     264,    54,   265,   544,   561,    56,   266,   267,   545,   562,
-     268,   565,   269,   279,   280,    84,   566,   281,   282,   491,
-     296,   217,   218,    87,   945,   219,    88,    58,   220,   221,
-     222,   223,   150,   989,   565,    60,   990,   420,    89,   946,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,   331,
-      62,   332,   333,   500,   949,   334,   335,   336,   947,   950,
-     782,   968,   127,   128,   127,   128,   969,   419,  1022,   746,
-     747,  1023,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   968,   422,  1003,   123,
-     124,   970,  1089,  1004,   331,   894,   895,   896,   127,   128,
-     125,   126,   421,  1090,   127,   128,  1105,   127,   128,   129,
-      32,    33,    34,    35,   130,   131,   132,   133,   134,   127,
-     128,   310,   940,   135,   880,   881,   882,   883,   884,   885,
-    1008,   423,  1012,   136,  1018,  1009,   137,  1013,   430,  1019,
-     431,   561,  1025,   138,   139,  1056,  1020,  1026,   140,   432,
-     439,   141,   150,   968,   150,   142,   127,   128,  1188,   331,
-     353,   332,   333,   354,   355,   512,  1192,   914,   915,   916,
-    1189,  1193,   127,   128,   440,   143,   144,   145,   146,   147,
-     148,   371,   372,   544,  1152,  1207,  1153,  1154,  1199,   149,
-    1208,   749,   750,    91,    92,    93,    94,    95,   150,   441,
-     515,   905,   906,  1247,   150,  1210,   442,   150,  1248,   726,
-     727,   728,   729,  1173,  1174,  1175,    93,    94,    95,   917,
-    1227,   525,   443,  1228,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   444,   445,   567,   568,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   446,   236,   237,
-     238,   447,   124,  1180,  1181,  1182,   150,   448,   449,   451,
-     452,   453,   454,   455,   239,   459,   127,   128,   240,   241,
-     242,   129,   150,   124,   460,   461,   130,   131,   132,   465,
-     470,   243,   471,   472,   244,   135,   478,   127,   128,   485,
-     486,   487,   245,   490,   151,   496,   497,   498,   499,   508,
-     526,   303,   530,   224,   527,   534,   536,   304,   305,   306,
-     307,   308,   309,   535,   310,   246,   538,   539,   294,   234,
-     295,   541,   540,   546,   549,   551,   552,   289,   555,   311,
-     556,   286,   564,   570,   301,   569,   571,   143,   144,   337,
-     572,   318,   250,   288,   356,   313,   573,   284,   358,   574,
-     297,   577,   575,   576,   578,   351,   579,   580,   581,   251,
-     369,   312,   235,   582,   393,   588,   150,   290,   583,   359,
-     252,   584,   585,   338,   287,   586,   587,   302,   357,   592,
-     394,   319,   589,   590,   593,   291,   247,   150,   314,   594,
-     591,   595,   248,   596,   597,   600,   598,   599,   352,   320,
-     601,   602,   606,   370,   253,   249,  1211,   254,   603,   604,
-     605,   255,   607,   608,   609,   256,   610,   257,   611,   612,
-     613,   614,   258,   395,   615,   259,   616,   260,   261,   262,
-     617,   618,   263,   264,   619,   265,   620,   621,   622,   266,
-     267,   623,   624,   268,   625,   269,   279,   280,   626,   627,
-     281,   282,   628,   629,   630,   296,    93,    94,    95,   798,
-     632,   633,   635,   799,   800,   801,   802,   803,   804,   805,
-     806,   807,   808,   809,   631,   636,   637,   810,   811,   812,
-     813,   814,   638,   640,   641,    99,   100,   101,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,   643,   644,   151,   645,   224,   646,   639,   647,   649,
-     648,   331,   123,   124,   331,   790,   650,   651,   652,   654,
-     656,   234,   657,   658,   659,   660,   661,   127,   128,   662,
-     663,   665,   666,   667,    91,    92,    93,    94,    95,   897,
-     907,   668,   393,  1108,  1109,   669,   931,   670,   671,   673,
-     674,   675,   677,   678,   680,   903,   908,   918,   394,   681,
-     682,   683,   684,   685,   235,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   686,   687,   688,   689,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   127,
-     128,   690,   691,   124,   331,   692,   693,   694,   904,   909,
-     919,   395,   696,   697,   699,   704,   700,   127,   128,   701,
-     241,   702,   129,   703,   707,   705,   708,   130,   131,   132,
-     706,   709,   243,   710,   150,   244,   717,   150,   719,   720,
-     718,   721,   722,   245,   731,    30,   725,   732,   733,   734,
-     742,   378,   379,   380,   381,   382,   383,   384,   385,   386,
-     387,   388,   389,   390,   735,   736,   737,   738,   739,   743,
-     391,   392,   740,   741,   744,   752,   753,   754,   755,   756,
-     757,   759,   760,   789,   837,   761,   763,   764,   143,   144,
-     765,   766,   767,   768,   769,   770,   771,   772,   773,   150,
-     774,   775,   776,   778,   779,   780,   786,   784,   787,   794,
-     841,   788,   845,   849,   853,   869,   872,   150,   876,   927,
-     936,   955,   956,   957,   958,   959,   960,   961,   963,   973,
-    1042,   972,   976,   975,   978,   979,   981,   982,   985,   984,
-     993,   777,   992,   996,   995,   997,   998,   999,  1000,  1001,
-    1002,  1005,  1006,  1007,  1014,  1016,  1024,  1032,  1027,  1031,
-    1044,  1036,  1035,  1034,  1038,  1039,  1040,  1041,  1043,  1045,
-    1046,  1049,  1047,  1048,  1050,  1051,  1052,  1053,  1054,  1133,
-    1134,  1135,  1136,  1137,  1138,  1144,  1145,   246,  1141,  1140,
-     337,  1142,  1147,   356,  1148,  1149,  1064,   358,  1091,   289,
-    1150,  1110,  1165,   286,   311,  1167,   351,   373,  1102,   369,
-    1168,  1190,  1100,  1119,   250,   288,   318,  1117,   359,   284,
-     313,   897,  1115,  1068,   338,   907,  1171,   357,  1099,  1172,
-    1088,   251,  1177,  1116,  1155,  1114,   312,   903,   931,   290,
-    1069,   908,   252,   294,  1191,   295,   287,   918,  1103,   352,
-    1157,  1070,   370,  1120,  1178,  1101,   319,   291,   247,   301,
-    1118,  1195,  1196,   314,   248,  1179,  1104,  1065,  1156,  1184,
-    1185,  1121,  1111,  1066,   320,   297,   253,   249,  1112,   254,
-     904,  1186,  1187,   255,   909,  1071,  1067,   256,  1072,   257,
-     919,  1113,  1073,  1158,   258,  1197,  1074,   259,  1075,   260,
-     261,   262,   302,  1076,   263,   264,  1077,   265,  1078,  1079,
-    1080,   266,   267,  1081,  1082,   268,  1083,   269,   279,   280,
-    1084,  1085,   281,   282,  1086,  1198,  1087,  1093,  1094,  1205,
-    1213,  1095,  1096,  1092,  1216,  1218,  1214,  1221,  1243,  1244,
-    1223,  1200,  1245,  1249,  1253,   785,   791,   634,   944,   793,
-    1057,   642,  1037,  1055,  1107,  1143,   679,  1132,  1131,  1139,
-    1201,  1202,  1058,  1059,   653,  1106,  1209,  1212,  1217,  1251,
-    1220,  1222,  1061,  1060,  1063,  1250,  1203,   672,  1252,  1255,
-     296,  1256,  1169,  1170,  1062,   664,   676,   655,  1130,  1215,
-     941,  1146,   698,  1151,   926,   792,  1219,  1241,  1129,  1128,
-     695,  1254,     0,  1164,     0,  1064,     0,  1091,  1166,     0,
-    1110,     0,     0,     0,     0,     0,     0,  1102,     0,     0,
-    1155,  1100,  1119,     0,     0,     0,  1117,     0,     0,     0,
-       0,  1115,  1068,     0,     0,     0,  1157,  1099,     0,  1088,
-       0,     0,  1116,     0,  1114,     0,     0,     0,     0,  1069,
-       0,     0,     0,     0,  1156,     0,     0,  1103,     0,     0,
-    1070,     0,  1120,     0,  1101,     0,     0,     0,     0,  1118,
-       0,     0,     0,     0,     0,  1104,  1065,     0,     0,  1158,
-    1121,  1111,  1066,     0,     0,     0,     0,  1112,     0,     0,
-       0,     0,     0,     0,  1071,  1067,     0,  1072,     0,     0,
-    1113,  1073,     0,     0,     0,  1074,     0,  1075,     0,     0,
-       0,     0,  1076,     0,     0,  1077,     0,  1078,  1079,  1080,
-       0,     0,  1081,  1082,     0,  1083,     0,     0,     0,  1084,
-    1085,     0,     0,  1086,     0,  1087,  1093,  1094,     0,     0,
-    1095,  1096,  1092
+      78,   358,   842,  1101,   289,   758,   318,   234,   286,   301,
+     313,   762,   351,   369,  1102,   394,   329,  1117,   723,   250,
+     288,   781,   359,    40,   284,   297,   312,   425,   124,   491,
+     338,   357,   426,    29,   492,    30,   251,    31,   371,   372,
+      81,   293,   127,   128,   290,   936,   319,   252,   127,   128,
+     235,   287,   302,   314,   331,   352,   370,   243,   395,   150,
+     244,    28,   291,   247,   320,   500,   512,   127,   128,   248,
+     501,   513,    42,   331,   353,   332,   333,   354,   355,    44,
+     995,   253,   249,   996,   254,   723,   127,   128,   255,   900,
+     901,   902,   256,   515,   257,    93,    94,    95,   516,   258,
+     413,   414,   259,   330,   260,   261,   262,    46,   150,   263,
+     264,    48,   265,   544,   561,    84,   266,   267,   545,   562,
+     268,   565,   269,   279,   280,   419,   566,   281,   282,   491,
+     296,   217,   218,   998,   951,   219,   999,   420,   220,   221,
+     222,   223,   150,    50,  1164,    52,  1165,  1166,   150,   371,
+     372,   711,   712,   713,   714,   124,  1031,   565,   331,  1032,
+     332,   333,   952,   500,   334,   335,   336,   150,   953,   127,
+     128,   127,   128,   782,  1239,   955,   977,  1240,   127,   128,
+     956,   978,    54,   303,    56,    87,   150,   715,    88,   304,
+     305,   306,   307,   308,   309,    58,   310,  1185,  1186,  1187,
+      89,    60,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,   977,  1012,   127,   128,  1101,   979,  1013,   746,   747,
+    1017,   127,   128,   911,   912,  1018,  1102,  1021,    62,  1117,
+     749,   750,  1022,    32,    33,    34,    35,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   920,   921,   922,   123,   124,   123,  1027,   561,   150,
+     421,   150,  1028,  1029,  1068,   125,   126,   422,   150,   127,
+     128,   423,  1241,   430,   129,  1242,  1243,  1244,  1245,   130,
+     131,   132,   133,   134,   726,   727,   728,   729,   135,    93,
+      94,    95,   886,   887,   888,   889,   890,   891,   136,  1034,
+     977,   137,   512,   923,  1035,  1200,   431,  1201,   138,   139,
+    1204,   150,   544,   140,  1219,  1205,   141,  1211,   432,  1220,
+     142,    99,   100,   101,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,  1192,  1193,  1194,
+     143,   144,   145,   146,   147,   148,   567,   568,   123,   124,
+     331,   310,   946,   439,   149,   863,   864,   865,   866,   440,
+     867,   515,  1259,   127,   128,   441,  1222,  1260,   442,   150,
+     443,   444,   445,   446,   447,   448,   449,   451,   798,  1120,
+    1121,   452,   799,   800,   801,   802,   803,   804,   805,   806,
+     807,   808,   809,   810,   811,   812,   453,   454,   455,   813,
+     814,   815,   816,   817,   151,   459,   460,   461,   465,   470,
+     471,   472,   478,   224,   485,   486,   487,   525,   490,   496,
+     497,   498,   499,   508,   526,   246,   530,   536,   294,   234,
+     295,   527,   534,   331,   535,   538,   539,   289,   540,   311,
+     541,   286,   546,   549,   301,   551,   552,   555,   556,   337,
+     564,   318,   250,   288,   356,   313,   569,   284,   358,   570,
+     297,   571,   572,   150,   573,   351,   577,   578,   574,   251,
+     369,   312,   235,   575,   393,   576,   579,   290,   580,   359,
+     252,   581,   582,   338,   287,   583,   584,   302,   357,   585,
+     394,   319,   586,   587,   592,   291,   247,   588,   314,   589,
+     590,   591,   248,   594,   593,   600,   595,   596,   352,   320,
+     601,   597,   598,   370,   253,   249,   599,   254,   127,   128,
+     602,   255,   606,   603,   604,   256,   605,   257,  1223,   607,
+     608,   609,   258,   395,   610,   259,   611,   260,   261,   262,
+     612,   613,   263,   264,   614,   265,   150,   615,   616,   266,
+     267,   617,   618,   268,   619,   269,   279,   280,   620,   621,
+     281,   282,   622,   623,   624,   296,   625,   626,   627,   628,
+     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
+     388,   389,   390,   629,   630,   632,   631,   633,   635,   391,
+     392,   636,   637,   638,   639,   640,   641,   643,   644,   645,
+     646,   647,   648,   649,   650,   651,   652,   654,   656,   657,
+     658,   659,   660,   151,   661,   224,   700,   662,   150,   663,
+     665,   666,   668,   669,   670,   790,   667,   673,   677,   678,
+     681,   234,   682,   671,   684,   674,   687,   675,   688,   683,
+     685,    91,    92,    93,    94,    95,   691,   692,   680,   903,
+     913,   686,   393,   693,   694,   689,   937,   690,   696,   697,
+     699,   704,   701,   709,   702,   909,   914,   924,   394,   703,
+     705,   706,   707,   708,   235,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   710,   717,   718,   719,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   720,   236,
+     237,   238,   721,   124,   722,    30,   731,   725,   910,   915,
+     925,   395,   732,   733,   734,   239,   740,   127,   128,   240,
+     241,   242,   129,   735,   736,   737,   738,   130,   131,   132,
+     739,   742,   243,   741,   743,   244,   135,   744,   752,   753,
+     754,   755,   760,   245,    91,    92,    93,    94,    95,   756,
+     757,   759,   789,   784,   761,   794,   763,   764,   765,   843,
+     847,   766,   767,   768,   851,   855,   769,   859,   875,   878,
+     882,   770,   771,   772,   773,   774,   775,   776,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   143,   144,
+     778,   779,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   933,   942,   780,   961,   124,   331,   962,   963,
+     964,   965,   966,   967,   968,   969,   786,   150,   970,   787,
+     127,   128,   972,   241,  1006,   129,   788,   981,   982,   984,
+     130,   131,   132,   985,   987,   243,   988,   990,   244,   991,
+     993,   994,  1002,  1001,  1007,  1005,   245,  1004,  1008,  1009,
+    1010,  1011,  1014,  1015,  1016,  1023,  1025,  1033,  1036,  1041,
+    1040,  1045,  1180,  1043,  1044,  1047,  1048,  1049,  1050,  1051,
+    1061,  1063,  1052,  1053,  1064,  1055,  1054,  1056,  1057,  1058,
+    1059,  1060,  1062,  1065,  1066,  1145,  1146,  1147,  1148,  1156,
+    1149,   143,   144,  1150,  1152,  1153,   246,  1154,  1157,   337,
+    1159,  1160,   356,  1162,  1177,  1076,   358,  1103,   289,  1161,
+    1122,  1179,   286,   311,  1183,   351,   373,  1114,   369,  1184,
+     150,  1112,  1131,   250,   288,   318,  1129,   359,   284,   313,
+     903,  1127,  1080,   338,   913,  1189,   357,  1111,  1190,  1100,
+     251,  1202,  1128,  1167,  1126,   312,   909,   937,   290,  1081,
+     914,   252,   294,  1191,   295,   287,   924,  1115,   352,  1169,
+    1082,   370,  1132,  1203,  1113,   319,   291,   247,   301,  1130,
+    1196,  1197,   314,   248,  1198,  1116,  1077,  1168,  1199,  1207,
+    1133,  1123,  1078,   320,   297,   253,   249,  1124,   254,   910,
+    1208,  1209,   255,   915,  1083,  1079,   256,  1084,   257,   925,
+    1125,  1085,  1170,   258,  1210,  1086,   259,  1087,   260,   261,
+     262,   302,  1088,   263,   264,  1089,   265,  1090,  1091,  1092,
+     266,   267,  1093,  1094,   268,  1095,   269,   279,   280,  1096,
+    1097,   281,   282,  1098,  1212,  1099,  1105,  1106,  1217,  1225,
+    1107,  1108,  1104,  1226,  1228,  1230,  1235,  1233,  1213,  1255,
+    1256,  1257,  1261,  1265,   791,   793,   785,   777,  1046,   950,
+    1067,  1069,  1144,  1119,   634,  1214,   679,  1143,  1070,  1071,
+    1221,  1151,  1224,  1072,  1229,  1263,  1232,  1234,   642,   672,
+    1264,  1262,  1267,  1268,  1073,  1118,  1155,   653,  1215,   296,
+    1075,  1074,   655,  1141,  1142,   947,  1227,  1158,  1163,  1182,
+    1181,   932,   664,  1140,   698,  1176,  1253,  1231,  1266,  1178,
+       0,     0,     0,     0,     0,   676,     0,  1076,     0,  1103,
+       0,     0,  1122,     0,     0,     0,     0,     0,     0,  1114,
+       0,     0,  1167,  1112,  1131,     0,   792,     0,  1129,     0,
+     695,     0,     0,  1127,  1080,     0,     0,     0,  1169,  1111,
+       0,  1100,     0,     0,  1128,     0,  1126,     0,     0,     0,
+       0,  1081,     0,     0,     0,     0,  1168,     0,     0,  1115,
+       0,     0,  1082,     0,  1132,     0,  1113,     0,     0,     0,
+       0,  1130,     0,     0,     0,     0,     0,  1116,  1077,     0,
+       0,  1170,  1133,  1123,  1078,     0,     0,     0,     0,  1124,
+       0,     0,     0,     0,     0,     0,  1083,  1079,     0,  1084,
+       0,     0,  1125,  1085,     0,     0,     0,  1086,     0,  1087,
+       0,     0,     0,     0,  1088,     0,     0,  1089,     0,  1090,
+    1091,  1092,     0,     0,  1093,  1094,     0,  1095,     0,     0,
+       0,  1096,  1097,     0,     0,  1098,     0,  1099,  1105,  1106,
+       0,     0,  1107,  1108,  1104
   };
 
   const short
   Dhcp4Parser::yycheck_[] =
   {
       67,    68,    69,    70,    71,    70,    73,    74,    75,    76,
-      64,    74,   708,   983,    69,   650,    71,    68,    69,    70,
-      71,   656,    73,    74,   983,    76,    72,   983,   611,    69,
-      69,    18,    74,     7,    69,    70,    71,     3,    88,     0,
-      73,    74,     8,     5,   188,     7,    69,     9,   132,   133,
-     202,   101,   102,   103,    69,     7,    71,    69,   202,     3,
-      68,    69,    70,    71,     8,    73,    74,   117,    76,     7,
-     120,    87,    69,    69,    71,   169,   170,   171,   172,    69,
-     180,     7,     3,   183,   184,   185,   186,     8,     3,    12,
-      13,    69,    69,     8,    69,   678,     3,     3,    69,     7,
-       6,     8,    69,     7,    69,   122,   123,   124,   125,    69,
-     127,   205,    69,     7,    69,    69,    69,    37,   202,    69,
-      69,     7,    69,     3,     3,     7,    69,    69,     8,     8,
-      69,     3,    69,    69,    69,    10,     8,    69,    69,     3,
-      70,    15,    16,    11,     8,    19,    14,     7,    22,    23,
-      24,    25,   202,     3,     3,     7,     6,     3,    26,     8,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    89,
-       7,    91,    92,     3,     3,    95,    96,    97,     8,     8,
-     167,     3,   102,   103,   102,   103,     8,     6,     3,    17,
-      18,     6,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,     3,     8,     3,    87,
-      88,     8,  1192,     8,    89,   143,   144,   145,   102,   103,
-      98,    99,     4,  1192,   102,   103,  1192,   102,   103,   107,
-     202,   203,   204,   205,   112,   113,   114,   115,   116,   102,
-     103,   129,   130,   121,   135,   136,   137,   138,   139,   140,
-       3,     3,     3,   131,     3,     8,   134,     8,     4,     8,
-       4,     3,     3,   141,   142,   971,     8,     8,   146,     4,
-       4,   149,   202,     3,   202,   153,   102,   103,     8,    89,
-      90,    91,    92,    93,    94,     3,     3,   150,   151,   152,
-       8,     8,   102,   103,     4,   173,   174,   175,   176,   177,
-     178,   132,   133,     3,   179,     3,   181,   182,     8,   187,
-       8,    20,    21,    29,    30,    31,    32,    33,   202,     4,
-       3,   147,   148,     3,   202,     8,     4,   202,     8,   108,
-     109,   110,   111,    38,    39,    40,    31,    32,    33,   202,
-       3,     8,     4,     6,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,     4,     4,   420,   421,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,     4,    84,    85,
-      86,     4,    88,    52,    53,    54,   202,     4,     4,     4,
-       4,     4,     4,     4,   100,     4,   102,   103,   104,   105,
-     106,   107,   202,    88,     4,     4,   112,   113,   114,     4,
-       4,   117,     4,     4,   120,   121,     4,   102,   103,     4,
-       4,     4,   128,     4,   491,     4,     4,     4,     4,     4,
-       3,   116,     4,   500,     8,     4,     3,   122,   123,   124,
-     125,   126,   127,     8,   129,   512,     4,     4,   515,   500,
-     515,     3,     8,     4,     4,     4,     4,   512,     4,   526,
-       4,   512,     4,     4,   515,   202,     4,   173,   174,   536,
-       4,   526,   512,   512,   541,   526,     4,   512,   541,   205,
-     515,     4,   205,   205,     4,   536,     4,     4,     4,   512,
-     541,   526,   500,     4,   561,   205,   202,   512,   203,   541,
-     512,   203,   203,   536,   512,   203,   203,   515,   541,   203,
-     561,   526,   204,   204,   203,   512,   512,   202,   526,     4,
-     204,   203,   512,   203,   205,     4,   205,   205,   536,   526,
-       4,     4,     4,   541,   512,   512,  1171,   512,   205,   205,
-     205,   512,     4,     4,   203,   512,     4,   512,     4,     4,
-       4,   205,   512,   561,   205,   512,   205,   512,   512,   512,
-       4,     4,   512,   512,     4,   512,     4,     4,   203,   512,
+      64,    74,   708,   992,    69,   650,    71,    68,    69,    70,
+      71,   656,    73,    74,   992,    76,    72,   992,   611,    69,
+      69,    18,    74,     7,    69,    70,    71,     3,    91,     3,
+      73,    74,     8,     5,     8,     7,    69,     9,   135,   136,
+     205,   104,   105,   106,    69,   191,    71,    69,   105,   106,
+      68,    69,    70,    71,    92,    73,    74,   120,    76,   205,
+     123,     0,    69,    69,    71,     3,     3,   105,   106,    69,
+       8,     8,     7,    92,    93,    94,    95,    96,    97,     7,
+       3,    69,    69,     6,    69,   678,   105,   106,    69,   146,
+     147,   148,    69,     3,    69,    31,    32,    33,     8,    69,
+      12,    13,    69,    37,    69,    69,    69,     7,   205,    69,
+      69,     7,    69,     3,     3,    10,    69,    69,     8,     8,
+      69,     3,    69,    69,    69,     6,     8,    69,    69,     3,
+      70,    15,    16,     3,     8,    19,     6,     3,    22,    23,
+      24,    25,   205,     7,   182,     7,   184,   185,   205,   135,
+     136,   172,   173,   174,   175,    91,     3,     3,    92,     6,
+      94,    95,     8,     3,    98,    99,   100,   205,     8,   105,
+     106,   105,   106,   170,     3,     3,     3,     6,   105,   106,
+       8,     8,     7,   119,     7,    11,   205,   208,    14,   125,
+     126,   127,   128,   129,   130,     7,   132,    38,    39,    40,
+      26,     7,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,     3,     3,   105,   106,  1204,     8,     8,    17,    18,
+       3,   105,   106,   150,   151,     8,  1204,     3,     7,  1204,
+      20,    21,     8,   205,   206,   207,   208,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,   153,   154,   155,    90,    91,    90,     3,     3,   205,
+       4,   205,     8,     8,   980,   101,   102,     8,   205,   105,
+     106,     3,   183,     4,   110,   186,   187,   188,   189,   115,
+     116,   117,   118,   119,   111,   112,   113,   114,   124,    31,
+      32,    33,   138,   139,   140,   141,   142,   143,   134,     3,
+       3,   137,     3,   205,     8,     8,     4,     8,   144,   145,
+       3,   205,     3,   149,     3,     8,   152,     8,     4,     8,
+     156,    63,    64,    65,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,    55,    56,    57,
+     176,   177,   178,   179,   180,   181,   420,   421,    90,    91,
+      92,   132,   133,     4,   190,   125,   126,   127,   128,     4,
+     130,     3,     3,   105,   106,     4,     8,     8,     4,   205,
+       4,     4,     4,     4,     4,     4,     4,     4,    37,   121,
+     122,     4,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,     4,     4,     4,    58,
+      59,    60,    61,    62,   491,     4,     4,     4,     4,     4,
+       4,     4,     4,   500,     4,     4,     4,     8,     4,     4,
+       4,     4,     4,     4,     3,   512,     4,     3,   515,   500,
+     515,     8,     4,    92,     8,     4,     4,   512,     8,   526,
+       3,   512,     4,     4,   515,     4,     4,     4,     4,   536,
+       4,   526,   512,   512,   541,   526,   205,   512,   541,     4,
+     515,     4,     4,   205,     4,   536,     4,     4,   208,   512,
+     541,   526,   500,   208,   561,   208,     4,   512,     4,   541,
+     512,     4,     4,   536,   512,   206,   206,   515,   541,   206,
+     561,   526,   206,   206,   206,   512,   512,   208,   526,   207,
+     207,   207,   512,     4,   206,     4,   206,   206,   536,   526,
+       4,   208,   208,   541,   512,   512,   208,   512,   105,   106,
+       4,   512,     4,   208,   208,   512,   208,   512,  1183,     4,
+       4,   206,   512,   561,     4,   512,     4,   512,   512,   512,
+       4,     4,   512,   512,   208,   512,   205,   208,   208,   512,
      512,     4,     4,   512,     4,   512,   512,   512,     4,     4,
-     512,   512,     4,   205,   205,   515,    31,    32,    33,    37,
-       4,     4,     4,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,   205,     4,     4,    55,    56,    57,
-      58,    59,   205,   203,   203,    60,    61,    62,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,     4,     4,   700,     4,   702,     4,   205,     4,   203,
-       4,    89,    87,    88,    89,   699,     4,     4,     4,     4,
-       4,   702,     4,     4,     4,     4,     4,   102,   103,     4,
-       4,     4,     4,   203,    29,    30,    31,    32,    33,   736,
-     737,     4,   739,   118,   119,     4,   743,     4,   205,     4,
-     205,   205,     4,     4,   205,   736,   737,   738,   739,     4,
-       4,   203,     4,   203,   702,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,   203,     4,     4,   205,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,   102,
-     103,   205,     4,    88,    89,     4,     4,     4,   736,   737,
-     738,   739,     4,   203,     4,   202,     7,   102,   103,     7,
-     105,     7,   107,     7,     7,   202,     7,   112,   113,   114,
-     202,     5,   117,   202,   202,   120,   202,   202,     5,     5,
-     202,     5,     5,   128,     5,     7,   202,     5,     5,     5,
-       5,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,     7,     7,     7,     7,     7,     7,
-     173,   174,   202,   202,     5,   202,   202,   202,     5,   202,
-     202,   202,     7,     5,     7,   202,   202,   202,   173,   174,
-     202,   202,   202,   202,   202,   202,   202,   202,   202,   202,
-     202,   202,   202,   202,   202,   202,   202,   168,   202,    27,
-       7,   202,     7,     7,     7,     7,     7,   202,     7,     7,
-       7,     4,     4,     4,     4,     4,     4,     4,     4,     3,
-     203,     6,     3,     6,     6,     3,     6,     3,     3,     6,
-       3,   678,     6,     3,     6,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     3,   202,     6,
-     203,     4,     6,     8,     4,     4,     4,     4,   205,   205,
-     203,     4,   203,   203,   203,     4,     4,     4,     4,   203,
-     203,   203,   203,   203,   203,     4,     4,   974,   203,   205,
-     977,   203,   205,   980,     4,   203,   983,   980,   983,   974,
-       4,   988,   205,   974,   991,     6,   977,   994,   983,   980,
-       3,     8,   983,   988,   974,   974,   991,   988,   980,   974,
-     991,  1008,   988,   983,   977,  1012,     4,   980,   983,   202,
-     983,   974,   202,   988,  1021,   988,   991,  1008,  1025,   974,
-     983,  1012,   974,  1030,     8,  1030,   974,  1018,   983,   977,
-    1021,   983,   980,   988,   202,   983,   991,   974,   974,  1030,
-     988,     4,     8,   991,   974,   202,   983,   983,  1021,   202,
-     202,   988,   988,   983,   991,  1030,   974,   974,   988,   974,
-    1008,   202,   202,   974,  1012,   983,   983,   974,   983,   974,
-    1018,   988,   983,  1021,   974,     3,   983,   974,   983,   974,
-     974,   974,  1030,   983,   974,   974,   983,   974,   983,   983,
-     983,   974,   974,   983,   983,   974,   983,   974,   974,   974,
-     983,   983,   974,   974,   983,     8,   983,   983,   983,     4,
-       4,   983,   983,   983,     4,     4,   205,     5,     4,     4,
-       7,   202,     4,     4,     4,   691,   700,   491,   789,   702,
-     973,   500,   949,   968,   986,  1008,   544,   996,   994,  1003,
-     202,   202,   974,   976,   512,   985,   202,  1192,   203,   203,
-     202,   202,   979,   977,   982,   205,  1150,   536,   203,   202,
-    1030,   202,  1030,  1032,   980,   526,   541,   515,   993,  1197,
-     760,  1012,   565,  1018,   739,   701,  1207,  1227,   991,   989,
-     561,  1247,    -1,  1022,    -1,  1192,    -1,  1192,  1025,    -1,
-    1197,    -1,    -1,    -1,    -1,    -1,    -1,  1192,    -1,    -1,
-    1207,  1192,  1197,    -1,    -1,    -1,  1197,    -1,    -1,    -1,
-      -1,  1197,  1192,    -1,    -1,    -1,  1207,  1192,    -1,  1192,
-      -1,    -1,  1197,    -1,  1197,    -1,    -1,    -1,    -1,  1192,
-      -1,    -1,    -1,    -1,  1207,    -1,    -1,  1192,    -1,    -1,
-    1192,    -1,  1197,    -1,  1192,    -1,    -1,    -1,    -1,  1197,
-      -1,    -1,    -1,    -1,    -1,  1192,  1192,    -1,    -1,  1207,
-    1197,  1197,  1192,    -1,    -1,    -1,    -1,  1197,    -1,    -1,
-      -1,    -1,    -1,    -1,  1192,  1192,    -1,  1192,    -1,    -1,
-    1197,  1192,    -1,    -1,    -1,  1192,    -1,  1192,    -1,    -1,
-      -1,    -1,  1192,    -1,    -1,  1192,    -1,  1192,  1192,  1192,
-      -1,    -1,  1192,  1192,    -1,  1192,    -1,    -1,    -1,  1192,
-    1192,    -1,    -1,  1192,    -1,  1192,  1192,  1192,    -1,    -1,
-    1192,  1192,  1192
+     512,   512,   206,     4,     4,   515,     4,     4,     4,     4,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   208,   208,     4,   208,     4,     4,   176,
+     177,     4,     4,   208,   208,   206,   206,     4,     4,     4,
+       4,     4,     4,   206,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,   700,     4,   702,     7,     4,   205,     4,
+       4,     4,     4,     4,     4,   699,   206,     4,     4,     4,
+       4,   702,     4,   208,     4,   208,     4,   208,     4,   206,
+     206,    29,    30,    31,    32,    33,     4,     4,   208,   736,
+     737,   206,   739,     4,     4,   208,   743,   208,     4,   206,
+       4,   205,     7,     5,     7,   736,   737,   738,   739,     7,
+     205,   205,     7,     7,   702,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,   205,   205,   205,     5,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,     5,    87,
+      88,    89,     5,    91,     5,     7,     5,   205,   736,   737,
+     738,   739,     5,     5,     5,   103,   205,   105,   106,   107,
+     108,   109,   110,     7,     7,     7,     7,   115,   116,   117,
+       7,     5,   120,   205,     7,   123,   124,     5,   205,   205,
+     205,     5,     7,   131,    29,    30,    31,    32,    33,   205,
+     205,   205,     5,   171,   205,    27,   205,   205,   205,     7,
+       7,   205,   205,   205,     7,     7,   205,     7,     7,     7,
+       7,   205,   205,   205,   205,   205,   205,   205,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,   176,   177,
+     205,   205,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,     7,     7,   205,     4,    91,    92,     4,     4,
+       4,     4,     4,     4,     4,     4,   205,   205,     4,   205,
+     105,   106,     4,   108,     4,   110,   205,     6,     3,     6,
+     115,   116,   117,     3,     6,   120,     3,     6,   123,     3,
+       6,     3,     3,     6,     4,     3,   131,     6,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,   205,     3,
+       6,     4,     3,     8,     6,     4,     4,     4,     4,   206,
+       4,     4,   208,   206,     4,   206,   208,   206,   206,   206,
+     206,   206,   206,     4,     4,   206,   206,   206,   206,     4,
+     206,   176,   177,   206,   208,   206,   983,   206,     4,   986,
+     208,     4,   989,     4,   208,   992,   989,   992,   983,   206,
+     997,     6,   983,  1000,     4,   986,  1003,   992,   989,   205,
+     205,   992,   997,   983,   983,  1000,   997,   989,   983,  1000,
+    1017,   997,   992,   986,  1021,   205,   989,   992,   205,   992,
+     983,     8,   997,  1030,   997,  1000,  1017,  1034,   983,   992,
+    1021,   983,  1039,   205,  1039,   983,  1027,   992,   986,  1030,
+     992,   989,   997,     8,   992,  1000,   983,   983,  1039,   997,
+     205,   205,  1000,   983,   205,   992,   992,  1030,   205,     4,
+     997,   997,   992,  1000,  1039,   983,   983,   997,   983,  1017,
+       8,     3,   983,  1021,   992,   992,   983,   992,   983,  1027,
+     997,   992,  1030,   983,     8,   992,   983,   992,   983,   983,
+     983,  1039,   992,   983,   983,   992,   983,   992,   992,   992,
+     983,   983,   992,   992,   983,   992,   983,   983,   983,   992,
+     992,   983,   983,   992,   205,   992,   992,   992,     4,     4,
+     992,   992,   992,   208,     4,     4,     7,     5,   205,     4,
+       4,     4,     4,     4,   700,   702,   691,   678,   955,   789,
+     977,   982,  1005,   995,   491,   205,   544,  1003,   983,   985,
+     205,  1012,  1204,   986,   206,   206,   205,   205,   500,   536,
+     206,   208,   205,   205,   988,   994,  1017,   512,  1162,  1039,
+     991,   989,   515,  1000,  1002,   760,  1209,  1021,  1027,  1041,
+    1039,   739,   526,   998,   565,  1031,  1239,  1219,  1259,  1034,
+      -1,    -1,    -1,    -1,    -1,   541,    -1,  1204,    -1,  1204,
+      -1,    -1,  1209,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
+      -1,    -1,  1219,  1204,  1209,    -1,   701,    -1,  1209,    -1,
+     561,    -1,    -1,  1209,  1204,    -1,    -1,    -1,  1219,  1204,
+      -1,  1204,    -1,    -1,  1209,    -1,  1209,    -1,    -1,    -1,
+      -1,  1204,    -1,    -1,    -1,    -1,  1219,    -1,    -1,  1204,
+      -1,    -1,  1204,    -1,  1209,    -1,  1204,    -1,    -1,    -1,
+      -1,  1209,    -1,    -1,    -1,    -1,    -1,  1204,  1204,    -1,
+      -1,  1219,  1209,  1209,  1204,    -1,    -1,    -1,    -1,  1209,
+      -1,    -1,    -1,    -1,    -1,    -1,  1204,  1204,    -1,  1204,
+      -1,    -1,  1209,  1204,    -1,    -1,    -1,  1204,    -1,  1204,
+      -1,    -1,    -1,    -1,  1204,    -1,    -1,  1204,    -1,  1204,
+    1204,  1204,    -1,    -1,  1204,  1204,    -1,  1204,    -1,    -1,
+      -1,  1204,  1204,    -1,    -1,  1204,    -1,  1204,  1204,  1204,
+      -1,    -1,  1204,  1204,  1204
   };
 
   const short
   Dhcp4Parser::yystos_[] =
   {
-       0,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,     0,     5,
-       7,     9,   202,   203,   204,   205,   221,   222,   223,   228,
-       7,   237,     7,   242,     7,   289,     7,   397,     7,   480,
-       7,   496,     7,   432,     7,   438,     7,   462,     7,   373,
-       7,   561,     7,   592,   229,   224,   238,   243,   290,   398,
-     481,   497,   433,   439,   463,   374,   562,   593,   221,   230,
-     231,   202,   226,   227,    10,   239,   241,    11,    14,    26,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    87,    88,    98,    99,   102,   103,   107,
-     112,   113,   114,   115,   116,   121,   131,   134,   141,   142,
-     146,   149,   153,   173,   174,   175,   176,   177,   178,   187,
-     202,   236,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   259,   260,   261,   262,
-     263,   264,   265,   266,   269,   271,   273,   274,   275,   277,
-     279,   280,   281,   282,   283,   284,   285,   303,   305,   311,
-     313,   351,   360,   367,   381,   391,   415,   416,   417,   418,
-     422,   430,   456,   486,   488,   490,   501,   503,   505,   528,
-     540,   541,   549,   559,   590,   599,   623,    15,    16,    19,
-      22,    23,    24,    25,   236,   287,   288,   291,   293,   296,
-     299,   300,   301,   302,   486,   488,    84,    85,    86,   100,
-     104,   105,   106,   117,   120,   128,   236,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   261,   262,   263,
-     264,   265,   266,   269,   271,   273,   274,   275,   277,   279,
-     399,   400,   401,   403,   405,   407,   409,   411,   413,   415,
-     416,   417,   418,   421,   456,   474,   486,   488,   490,   501,
-     503,   505,   525,   101,   236,   411,   413,   456,   482,   483,
-     484,   486,   488,   116,   122,   123,   124,   125,   126,   127,
-     129,   236,   456,   486,   488,   498,   499,   500,   501,   503,
-     505,   507,   511,   513,   515,   517,   519,   521,   523,   430,
-      37,    89,    91,    92,    95,    96,    97,   236,   331,   440,
-     441,   442,   443,   444,   445,   446,   448,   450,   452,   453,
-     455,   486,   488,    90,    93,    94,   236,   331,   444,   450,
-     464,   465,   466,   467,   468,   470,   471,   472,   473,   486,
-     488,   132,   133,   236,   375,   376,   377,   379,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   173,   174,   236,   486,   488,   563,   564,   565,   566,
-     568,   569,   571,   572,   573,   576,   578,   580,   581,   582,
-     584,   586,   588,    12,    13,   594,   595,   596,   598,     6,
-       3,     4,     8,     3,   240,     3,     8,   591,   286,   306,
-       4,     4,     4,   502,   504,   506,   304,   312,   314,     4,
+       0,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,     0,     5,
+       7,     9,   205,   206,   207,   208,   224,   225,   226,   231,
+       7,   240,     7,   245,     7,   292,     7,   403,     7,   486,
+       7,   502,     7,   438,     7,   444,     7,   468,     7,   379,
+       7,   567,     7,   598,   232,   227,   241,   246,   293,   404,
+     487,   503,   439,   445,   469,   380,   568,   599,   224,   233,
+     234,   205,   229,   230,    10,   242,   244,    11,    14,    26,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    90,    91,   101,   102,   105,   106,   110,
+     115,   116,   117,   118,   119,   124,   134,   137,   144,   145,
+     149,   152,   156,   176,   177,   178,   179,   180,   181,   190,
+     205,   239,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   262,   263,   264,   265,
+     266,   267,   268,   269,   272,   274,   276,   277,   278,   280,
+     282,   283,   284,   285,   286,   287,   288,   306,   308,   314,
+     316,   357,   366,   373,   387,   397,   421,   422,   423,   424,
+     428,   436,   462,   492,   494,   496,   507,   509,   511,   534,
+     546,   547,   555,   565,   596,   605,   629,    15,    16,    19,
+      22,    23,    24,    25,   239,   290,   291,   294,   296,   299,
+     302,   303,   304,   305,   492,   494,    87,    88,    89,   103,
+     107,   108,   109,   120,   123,   131,   239,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   264,   265,   266,
+     267,   268,   269,   272,   274,   276,   277,   278,   280,   282,
+     405,   406,   407,   409,   411,   413,   415,   417,   419,   421,
+     422,   423,   424,   427,   462,   480,   492,   494,   496,   507,
+     509,   511,   531,   104,   239,   417,   419,   462,   488,   489,
+     490,   492,   494,   119,   125,   126,   127,   128,   129,   130,
+     132,   239,   462,   492,   494,   504,   505,   506,   507,   509,
+     511,   513,   517,   519,   521,   523,   525,   527,   529,   436,
+      37,    92,    94,    95,    98,    99,   100,   239,   334,   446,
+     447,   448,   449,   450,   451,   452,   454,   456,   458,   459,
+     461,   492,   494,    93,    96,    97,   239,   334,   450,   456,
+     470,   471,   472,   473,   474,   476,   477,   478,   479,   492,
+     494,   135,   136,   239,   381,   382,   383,   385,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   176,   177,   239,   492,   494,   569,   570,   571,   572,
+     574,   575,   577,   578,   579,   582,   584,   586,   587,   588,
+     590,   592,   594,    12,    13,   600,   601,   602,   604,     6,
+       3,     4,     8,     3,   243,     3,     8,   597,   289,   309,
+       4,     4,     4,   508,   510,   512,   307,   315,   317,     4,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-     258,     4,     4,     4,     4,     4,   267,   270,   272,     4,
-       4,     4,   392,   431,   457,     4,   423,   487,   489,   419,
-       4,     4,     4,   352,   529,   491,   368,   382,     4,   361,
-     542,   550,   560,   276,   278,     4,     4,     4,   600,   624,
-       4,     3,     8,   292,   294,   297,     4,     4,     4,     4,
-       3,     8,   404,   406,   408,   475,   402,   410,     4,   414,
-     412,   526,     3,     8,   485,     3,     8,   524,   512,   514,
-     518,   516,   522,   520,   508,     8,     3,     8,   447,   332,
-       4,   451,   449,   454,     4,     8,     3,   469,     4,     4,
-       8,     3,   378,   380,     3,     8,     4,   579,   567,     4,
-     570,     4,     4,   574,   577,     4,     4,   583,   585,   587,
-     589,     3,     8,   597,     4,     3,     8,   221,   221,   202,
-       4,     4,     4,     4,   205,   205,   205,     4,     4,     4,
-       4,     4,     4,   203,   203,   203,   203,   203,   205,   204,
-     204,   204,   203,   203,     4,   203,   203,   205,   205,   205,
-       4,     4,     4,   205,   205,   205,     4,     4,     4,   203,
-       4,     4,     4,     4,   205,   205,   205,     4,     4,     4,
-       4,     4,   203,     4,     4,     4,     4,     4,     4,   205,
-     205,   205,     4,     4,   245,     4,     4,     4,   205,   205,
-     203,   203,   288,     4,     4,     4,     4,     4,     4,   203,
-       4,     4,     4,   400,     4,   483,     4,     4,     4,     4,
-       4,     4,     4,     4,   500,     4,     4,   203,     4,     4,
-       4,   205,   442,     4,   205,   205,   466,     4,     4,   376,
-     205,     4,     4,   203,     4,   203,   203,     4,     4,   205,
-     205,     4,     4,     4,     4,   564,     4,   203,   595,     4,
-       7,     7,     7,     7,   202,   202,   202,     7,     7,     5,
-     202,   169,   170,   171,   172,   205,   268,   202,   202,     5,
-       5,     5,     5,   223,   225,   202,   108,   109,   110,   111,
-     420,     5,     5,     5,     5,     7,     7,     7,     7,     7,
-     202,   202,     5,     7,     5,   232,    17,    18,   295,    20,
-      21,   298,   202,   202,   202,     5,   202,   202,   232,   202,
-       7,   202,   232,   202,   202,   202,   202,   202,   202,   202,
-     202,   202,   202,   202,   202,   202,   202,   225,   202,   202,
-     202,    18,   167,   575,   168,   268,   202,   202,   202,     5,
-     221,   244,   594,   287,    27,   307,   308,   309,    37,    41,
+     261,     4,     4,     4,     4,     4,   270,   273,   275,     4,
+       4,     4,   398,   437,   463,     4,   429,   493,   495,   425,
+       4,     4,     4,   358,   535,   497,   374,   388,     4,   367,
+     548,   556,   566,   279,   281,     4,     4,     4,   606,   630,
+       4,     3,     8,   295,   297,   300,     4,     4,     4,     4,
+       3,     8,   410,   412,   414,   481,   408,   416,     4,   420,
+     418,   532,     3,     8,   491,     3,     8,   530,   518,   520,
+     524,   522,   528,   526,   514,     8,     3,     8,   453,   335,
+       4,   457,   455,   460,     4,     8,     3,   475,     4,     4,
+       8,     3,   384,   386,     3,     8,     4,   585,   573,     4,
+     576,     4,     4,   580,   583,     4,     4,   589,   591,   593,
+     595,     3,     8,   603,     4,     3,     8,   224,   224,   205,
+       4,     4,     4,     4,   208,   208,   208,     4,     4,     4,
+       4,     4,     4,   206,   206,   206,   206,   206,   208,   207,
+     207,   207,   206,   206,     4,   206,   206,   208,   208,   208,
+       4,     4,     4,   208,   208,   208,     4,     4,     4,   206,
+       4,     4,     4,     4,   208,   208,   208,     4,     4,     4,
+       4,     4,   206,     4,     4,     4,     4,     4,     4,   208,
+     208,   208,     4,     4,   248,     4,     4,     4,   208,   208,
+     206,   206,   291,     4,     4,     4,     4,     4,     4,   206,
+       4,     4,     4,   406,     4,   489,     4,     4,     4,     4,
+       4,     4,     4,     4,   506,     4,     4,   206,     4,     4,
+       4,   208,   448,     4,   208,   208,   472,     4,     4,   382,
+     208,     4,     4,   206,     4,   206,   206,     4,     4,   208,
+     208,     4,     4,     4,     4,   570,     4,   206,   601,     4,
+       7,     7,     7,     7,   205,   205,   205,     7,     7,     5,
+     205,   172,   173,   174,   175,   208,   271,   205,   205,     5,
+       5,     5,     5,   226,   228,   205,   111,   112,   113,   114,
+     426,     5,     5,     5,     5,     7,     7,     7,     7,     7,
+     205,   205,     5,     7,     5,   235,    17,    18,   298,    20,
+      21,   301,   205,   205,   205,     5,   205,   205,   235,   205,
+       7,   205,   235,   205,   205,   205,   205,   205,   205,   205,
+     205,   205,   205,   205,   205,   205,   205,   228,   205,   205,
+     205,    18,   170,   581,   171,   271,   205,   205,   205,     5,
+     224,   247,   600,   290,    27,   310,   311,   312,    37,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      55,    56,    57,    58,    59,   236,   319,   320,   321,   324,
-     326,   328,   330,   331,   333,   334,   335,   336,   337,   338,
-     339,   342,   343,   345,   347,   349,   319,     7,   315,   316,
-     317,     7,   393,   394,   395,     7,   434,   435,   436,     7,
-     458,   459,   460,     7,   424,   425,   426,   122,   123,   124,
-     125,   127,   353,   354,   355,   356,   357,   358,   359,     7,
-     530,   531,     7,   492,   493,   494,     7,   369,   370,   371,
-     135,   136,   137,   138,   139,   140,   383,   384,   385,   386,
-     387,   388,   389,   390,   143,   144,   145,   236,   362,   363,
-     364,   365,   366,   486,   488,   147,   148,   236,   486,   488,
-     543,   544,   545,   547,   150,   151,   152,   202,   486,   488,
-     551,   552,   553,   554,   556,   557,   563,     7,   601,   602,
-     188,   236,   625,   626,   627,   233,     7,   476,   477,   478,
-     130,   507,   509,   527,   315,     8,     8,     8,   310,     3,
-       8,   322,   325,   327,   329,     4,     4,     4,     4,     4,
-       4,     4,   340,     4,   344,   346,   348,   350,     3,     8,
-       8,   318,     6,     3,   396,     6,     3,   437,     6,     3,
-     461,     6,     3,   427,     6,     3,     3,     6,   532,     3,
-       6,   495,     6,     3,   372,     6,     3,     4,     4,     4,
-       4,     4,     4,     3,     8,     4,     4,     4,     3,     8,
-     546,   548,     3,     8,     4,   555,     4,   558,     3,     8,
-       8,   603,     3,     6,     4,     3,     8,   202,   234,   235,
-     479,     6,     3,   510,     8,     6,     4,   308,     4,     4,
-       4,     4,   203,   205,   203,   205,   203,   203,   203,     4,
-     203,     4,     4,     4,     4,   320,   319,   317,   399,   395,
-     440,   436,   464,   460,   236,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   261,   262,   263,   264,   265,
-     266,   269,   271,   273,   274,   275,   277,   279,   331,   391,
-     409,   411,   413,   415,   416,   417,   418,   428,   429,   456,
-     486,   488,   501,   503,   505,   525,   426,   354,   118,   119,
-     236,   246,   247,   248,   331,   430,   456,   486,   488,   501,
-     503,   505,   533,   534,   535,   536,   537,   539,   531,   498,
-     494,   375,   371,   203,   203,   203,   203,   203,   203,   384,
-     205,   203,   203,   363,     4,     4,   544,   205,     4,   203,
-       4,   552,   179,   181,   182,   236,   331,   486,   488,   604,
-     605,   606,   607,   609,   602,   205,   626,     6,     3,   482,
-     478,     4,   202,    38,    39,    40,   323,   202,   202,   202,
-      52,    53,    54,   341,   202,   202,   202,   202,     8,     8,
-       8,     8,     3,     8,   538,     4,     8,     3,     8,     8,
-     202,   202,   202,   221,   610,     4,   608,     3,     8,   202,
-       8,   232,   429,     4,   205,   535,     4,   203,     4,   605,
-     202,     5,   202,     7,   611,   612,   613,     3,     6,   180,
-     183,   184,   185,   186,   614,   615,   616,   618,   619,   620,
-     621,   612,   617,     4,     4,     4,   622,     3,     8,     4,
-     205,   203,   203,     4,   615,   202,   202
+      52,    53,    54,    58,    59,    60,    61,    62,   239,   322,
+     323,   324,   327,   329,   331,   333,   334,   336,   337,   338,
+     339,   340,   341,   342,   343,   344,   345,   348,   349,   351,
+     353,   355,   322,     7,   318,   319,   320,     7,   399,   400,
+     401,     7,   440,   441,   442,     7,   464,   465,   466,     7,
+     430,   431,   432,   125,   126,   127,   128,   130,   359,   360,
+     361,   362,   363,   364,   365,     7,   536,   537,     7,   498,
+     499,   500,     7,   375,   376,   377,   138,   139,   140,   141,
+     142,   143,   389,   390,   391,   392,   393,   394,   395,   396,
+     146,   147,   148,   239,   368,   369,   370,   371,   372,   492,
+     494,   150,   151,   239,   492,   494,   549,   550,   551,   553,
+     153,   154,   155,   205,   492,   494,   557,   558,   559,   560,
+     562,   563,   569,     7,   607,   608,   191,   239,   631,   632,
+     633,   236,     7,   482,   483,   484,   133,   513,   515,   533,
+     318,     8,     8,     8,   313,     3,     8,   325,   328,   330,
+     332,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,   346,     4,   350,   352,   354,   356,     3,     8,     8,
+     321,     6,     3,   402,     6,     3,   443,     6,     3,   467,
+       6,     3,   433,     6,     3,     3,     6,   538,     3,     6,
+     501,     6,     3,   378,     6,     3,     4,     4,     4,     4,
+       4,     4,     3,     8,     4,     4,     4,     3,     8,   552,
+     554,     3,     8,     4,   561,     4,   564,     3,     8,     8,
+     609,     3,     6,     4,     3,     8,   205,   237,   238,   485,
+       6,     3,   516,     8,     6,     4,   311,     4,     4,     4,
+       4,   206,   208,   206,   208,   206,   206,   206,   206,   206,
+     206,     4,   206,     4,     4,     4,     4,   323,   322,   320,
+     405,   401,   446,   442,   470,   466,   239,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   264,   265,   266,
+     267,   268,   269,   272,   274,   276,   277,   278,   280,   282,
+     334,   397,   415,   417,   419,   421,   422,   423,   424,   434,
+     435,   462,   492,   494,   507,   509,   511,   531,   432,   360,
+     121,   122,   239,   249,   250,   251,   334,   436,   462,   492,
+     494,   507,   509,   511,   539,   540,   541,   542,   543,   545,
+     537,   504,   500,   381,   377,   206,   206,   206,   206,   206,
+     206,   390,   208,   206,   206,   369,     4,     4,   550,   208,
+       4,   206,     4,   558,   182,   184,   185,   239,   334,   492,
+     494,   610,   611,   612,   613,   615,   608,   208,   632,     6,
+       3,   488,   484,     4,   205,    38,    39,    40,   326,   205,
+     205,   205,    55,    56,    57,   347,   205,   205,   205,   205,
+       8,     8,     8,     8,     3,     8,   544,     4,     8,     3,
+       8,     8,   205,   205,   205,   224,   616,     4,   614,     3,
+       8,   205,     8,   235,   435,     4,   208,   541,     4,   206,
+       4,   611,   205,     5,   205,     7,   617,   618,   619,     3,
+       6,   183,   186,   187,   188,   189,   620,   621,   622,   624,
+     625,   626,   627,   618,   623,     4,     4,     4,   628,     3,
+       8,     4,   208,   206,   206,     4,   621,   205,   205
   };
 
   const short
   Dhcp4Parser::yyr1_[] =
   {
-       0,   206,   208,   207,   209,   207,   210,   207,   211,   207,
-     212,   207,   213,   207,   214,   207,   215,   207,   216,   207,
-     217,   207,   218,   207,   219,   207,   220,   207,   221,   221,
-     221,   221,   221,   221,   221,   222,   224,   223,   225,   226,
-     226,   227,   227,   227,   229,   228,   230,   230,   231,   231,
-     231,   233,   232,   234,   234,   235,   235,   235,   236,   238,
-     237,   240,   239,   239,   241,   243,   242,   244,   244,   244,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   245,
-     245,   245,   245,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   258,   257,   259,   260,   261,
-     262,   263,   264,   265,   267,   266,   268,   268,   268,   268,
-     268,   270,   269,   272,   271,   273,   274,   276,   275,   278,
-     277,   279,   280,   281,   282,   283,   284,   286,   285,   287,
-     287,   287,   288,   288,   288,   288,   288,   288,   288,   288,
-     288,   288,   290,   289,   292,   291,   294,   293,   295,   295,
-     297,   296,   298,   298,   299,   300,   301,   302,   304,   303,
-     306,   305,   307,   307,   307,   308,   310,   309,   312,   311,
-     314,   313,   315,   315,   316,   316,   316,   318,   317,   319,
-     319,   319,   320,   320,   320,   320,   320,   320,   320,   320,
-     320,   320,   320,   320,   320,   320,   320,   320,   320,   320,
-     320,   322,   321,   323,   323,   323,   325,   324,   327,   326,
-     329,   328,   330,   332,   331,   333,   334,   335,   336,   337,
-     338,   340,   339,   341,   341,   341,   342,   344,   343,   346,
-     345,   348,   347,   350,   349,   352,   351,   353,   353,   353,
-     354,   354,   354,   354,   354,   355,   356,   357,   358,   359,
-     361,   360,   362,   362,   362,   363,   363,   363,   363,   363,
-     363,   364,   365,   366,   368,   367,   369,   369,   370,   370,
-     370,   372,   371,   374,   373,   375,   375,   375,   375,   376,
-     376,   378,   377,   380,   379,   382,   381,   383,   383,   383,
-     384,   384,   384,   384,   384,   384,   385,   386,   387,   388,
-     389,   390,   392,   391,   393,   393,   394,   394,   394,   396,
-     395,   398,   397,   399,   399,   399,   400,   400,   400,   400,
-     400,   400,   400,   400,   400,   400,   400,   400,   400,   400,
-     400,   400,   400,   400,   400,   400,   400,   400,   400,   400,
-     400,   400,   400,   400,   400,   400,   400,   400,   400,   400,
-     400,   400,   400,   400,   400,   400,   400,   400,   400,   400,
-     400,   402,   401,   404,   403,   406,   405,   408,   407,   410,
-     409,   412,   411,   414,   413,   415,   416,   417,   419,   418,
-     420,   420,   420,   420,   421,   423,   422,   424,   424,   425,
-     425,   425,   427,   426,   428,   428,   428,   429,   429,   429,
-     429,   429,   429,   429,   429,   429,   429,   429,   429,   429,
-     429,   429,   429,   429,   429,   429,   429,   429,   429,   429,
-     429,   429,   429,   429,   429,   429,   429,   429,   429,   429,
-     429,   429,   429,   429,   429,   429,   429,   431,   430,   433,
-     432,   434,   434,   435,   435,   435,   437,   436,   439,   438,
-     440,   440,   441,   441,   441,   442,   442,   442,   442,   442,
-     442,   442,   442,   442,   442,   443,   444,   445,   447,   446,
-     449,   448,   451,   450,   452,   454,   453,   455,   457,   456,
-     458,   458,   459,   459,   459,   461,   460,   463,   462,   464,
-     464,   465,   465,   465,   466,   466,   466,   466,   466,   466,
-     466,   466,   466,   467,   469,   468,   470,   471,   472,   473,
-     475,   474,   476,   476,   477,   477,   477,   479,   478,   481,
-     480,   482,   482,   482,   483,   483,   483,   483,   483,   483,
-     483,   485,   484,   487,   486,   489,   488,   491,   490,   492,
-     492,   493,   493,   493,   495,   494,   497,   496,   498,   498,
-     499,   499,   499,   500,   500,   500,   500,   500,   500,   500,
-     500,   500,   500,   500,   500,   500,   500,   500,   502,   501,
-     504,   503,   506,   505,   508,   507,   510,   509,   512,   511,
+       0,   209,   211,   210,   212,   210,   213,   210,   214,   210,
+     215,   210,   216,   210,   217,   210,   218,   210,   219,   210,
+     220,   210,   221,   210,   222,   210,   223,   210,   224,   224,
+     224,   224,   224,   224,   224,   225,   227,   226,   228,   229,
+     229,   230,   230,   230,   232,   231,   233,   233,   234,   234,
+     234,   236,   235,   237,   237,   238,   238,   238,   239,   241,
+     240,   243,   242,   242,   244,   246,   245,   247,   247,   247,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   248,   248,   248,   248,   248,   248,
+     248,   248,   248,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   261,   260,   262,   263,   264,
+     265,   266,   267,   268,   270,   269,   271,   271,   271,   271,
+     271,   273,   272,   275,   274,   276,   277,   279,   278,   281,
+     280,   282,   283,   284,   285,   286,   287,   289,   288,   290,
+     290,   290,   291,   291,   291,   291,   291,   291,   291,   291,
+     291,   291,   293,   292,   295,   294,   297,   296,   298,   298,
+     300,   299,   301,   301,   302,   303,   304,   305,   307,   306,
+     309,   308,   310,   310,   310,   311,   313,   312,   315,   314,
+     317,   316,   318,   318,   319,   319,   319,   321,   320,   322,
+     322,   322,   323,   323,   323,   323,   323,   323,   323,   323,
+     323,   323,   323,   323,   323,   323,   323,   323,   323,   323,
+     323,   323,   323,   323,   325,   324,   326,   326,   326,   328,
+     327,   330,   329,   332,   331,   333,   335,   334,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   346,   345,   347,
+     347,   347,   348,   350,   349,   352,   351,   354,   353,   356,
+     355,   358,   357,   359,   359,   359,   360,   360,   360,   360,
+     360,   361,   362,   363,   364,   365,   367,   366,   368,   368,
+     368,   369,   369,   369,   369,   369,   369,   370,   371,   372,
+     374,   373,   375,   375,   376,   376,   376,   378,   377,   380,
+     379,   381,   381,   381,   381,   382,   382,   384,   383,   386,
+     385,   388,   387,   389,   389,   389,   390,   390,   390,   390,
+     390,   390,   391,   392,   393,   394,   395,   396,   398,   397,
+     399,   399,   400,   400,   400,   402,   401,   404,   403,   405,
+     405,   405,   406,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   406,   406,   406,
+     406,   406,   406,   406,   406,   406,   406,   408,   407,   410,
+     409,   412,   411,   414,   413,   416,   415,   418,   417,   420,
+     419,   421,   422,   423,   425,   424,   426,   426,   426,   426,
+     427,   429,   428,   430,   430,   431,   431,   431,   433,   432,
+     434,   434,   434,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   435,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   435,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   435,   435,   435,   435,   435,   435,   435,   435,
+     435,   435,   435,   437,   436,   439,   438,   440,   440,   441,
+     441,   441,   443,   442,   445,   444,   446,   446,   447,   447,
+     447,   448,   448,   448,   448,   448,   448,   448,   448,   448,
+     448,   449,   450,   451,   453,   452,   455,   454,   457,   456,
+     458,   460,   459,   461,   463,   462,   464,   464,   465,   465,
+     465,   467,   466,   469,   468,   470,   470,   471,   471,   471,
+     472,   472,   472,   472,   472,   472,   472,   472,   472,   473,
+     475,   474,   476,   477,   478,   479,   481,   480,   482,   482,
+     483,   483,   483,   485,   484,   487,   486,   488,   488,   488,
+     489,   489,   489,   489,   489,   489,   489,   491,   490,   493,
+     492,   495,   494,   497,   496,   498,   498,   499,   499,   499,
+     501,   500,   503,   502,   504,   504,   505,   505,   505,   506,
+     506,   506,   506,   506,   506,   506,   506,   506,   506,   506,
+     506,   506,   506,   506,   508,   507,   510,   509,   512,   511,
      514,   513,   516,   515,   518,   517,   520,   519,   522,   521,
-     524,   523,   526,   525,   527,   527,   529,   528,   530,   530,
-     530,   532,   531,   533,   533,   534,   534,   534,   535,   535,
-     535,   535,   535,   535,   535,   535,   535,   535,   535,   535,
-     535,   535,   536,   538,   537,   539,   540,   542,   541,   543,
-     543,   543,   544,   544,   544,   544,   544,   546,   545,   548,
-     547,   550,   549,   551,   551,   551,   552,   552,   552,   552,
-     552,   552,   553,   555,   554,   556,   558,   557,   560,   559,
-     562,   561,   563,   563,   563,   564,   564,   564,   564,   564,
-     564,   564,   564,   564,   564,   564,   564,   564,   564,   564,
-     564,   564,   564,   565,   567,   566,   568,   570,   569,   571,
-     572,   574,   573,   575,   575,   577,   576,   579,   578,   580,
-     581,   583,   582,   585,   584,   587,   586,   589,   588,   591,
-     590,   593,   592,   594,   594,   594,   595,   595,   597,   596,
-     598,   600,   599,   601,   601,   601,   603,   602,   604,   604,
-     604,   605,   605,   605,   605,   605,   605,   605,   606,   608,
-     607,   610,   609,   611,   611,   611,   613,   612,   614,   614,
-     614,   615,   615,   615,   615,   615,   617,   616,   618,   619,
-     620,   622,   621,   624,   623,   625,   625,   625,   626,   626,
-     627
+     524,   523,   526,   525,   528,   527,   530,   529,   532,   531,
+     533,   533,   535,   534,   536,   536,   536,   538,   537,   539,
+     539,   540,   540,   540,   541,   541,   541,   541,   541,   541,
+     541,   541,   541,   541,   541,   541,   541,   541,   542,   544,
+     543,   545,   546,   548,   547,   549,   549,   549,   550,   550,
+     550,   550,   550,   552,   551,   554,   553,   556,   555,   557,
+     557,   557,   558,   558,   558,   558,   558,   558,   559,   561,
+     560,   562,   564,   563,   566,   565,   568,   567,   569,   569,
+     569,   570,   570,   570,   570,   570,   570,   570,   570,   570,
+     570,   570,   570,   570,   570,   570,   570,   570,   570,   571,
+     573,   572,   574,   576,   575,   577,   578,   580,   579,   581,
+     581,   583,   582,   585,   584,   586,   587,   589,   588,   591,
+     590,   593,   592,   595,   594,   597,   596,   599,   598,   600,
+     600,   600,   601,   601,   603,   602,   604,   606,   605,   607,
+     607,   607,   609,   608,   610,   610,   610,   611,   611,   611,
+     611,   611,   611,   611,   612,   614,   613,   616,   615,   617,
+     617,   617,   619,   618,   620,   620,   620,   621,   621,   621,
+     621,   621,   623,   622,   624,   625,   626,   628,   627,   630,
+     629,   631,   631,   631,   632,   632,   633
   };
 
   const signed char
@@ -5776,64 +5811,64 @@ namespace isc { namespace dhcp {
        0,     6,     0,     1,     1,     3,     2,     0,     4,     1,
        3,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     1,     1,     0,     4,     0,     4,
-       0,     4,     3,     0,     4,     3,     3,     3,     3,     3,
-       3,     0,     4,     1,     1,     1,     3,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     6,     1,     3,     2,
+       1,     1,     1,     1,     0,     4,     1,     1,     1,     0,
+       4,     0,     4,     0,     4,     3,     0,     4,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     0,     4,     1,
+       1,     1,     3,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     6,     1,     3,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     6,     1,     3,
+       2,     1,     1,     1,     1,     1,     1,     3,     3,     3,
+       0,     6,     0,     1,     1,     3,     2,     0,     4,     0,
+       4,     1,     3,     2,     1,     1,     1,     0,     4,     0,
+       4,     0,     6,     1,     3,     2,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     3,     3,     3,     0,     6,
+       0,     1,     1,     3,     2,     0,     4,     0,     4,     1,
+       3,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     6,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     0,     6,     0,     1,     1,     3,
-       2,     0,     4,     0,     4,     1,     3,     2,     1,     1,
-       1,     0,     4,     0,     4,     0,     6,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     0,     6,     0,     1,     1,     3,     2,     0,
-       4,     0,     4,     1,     3,     2,     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,     0,
+       4,     3,     3,     3,     0,     4,     1,     1,     1,     1,
+       3,     0,     6,     0,     1,     1,     3,     2,     0,     4,
+       1,     3,     2,     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,     0,     4,     3,     3,     3,     0,     4,
-       1,     1,     1,     1,     3,     0,     6,     0,     1,     1,
-       3,     2,     0,     4,     1,     3,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     6,     0,     4,     0,     1,     1,
+       3,     2,     0,     4,     0,     4,     0,     1,     1,     3,
+       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     3,     1,     0,     4,     0,     4,     0,     4,
+       1,     0,     4,     3,     0,     6,     0,     1,     1,     3,
+       2,     0,     4,     0,     4,     0,     1,     1,     3,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     1,     1,     3,     3,     0,     6,     0,     1,
+       1,     3,     2,     0,     4,     0,     4,     1,     3,     2,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     6,     0,     1,     1,     3,     2,
+       0,     4,     0,     4,     0,     1,     1,     3,     2,     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,     2,     0,     4,     0,     4,
-       0,     1,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     1,     0,     4,
-       0,     4,     0,     4,     1,     0,     4,     3,     0,     6,
-       0,     1,     1,     3,     2,     0,     4,     0,     4,     0,
-       1,     1,     3,     2,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     1,     1,     3,     3,
-       0,     6,     0,     1,     1,     3,     2,     0,     4,     0,
-       4,     1,     3,     2,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     4,     0,     6,     0,
-       1,     1,     3,     2,     0,     4,     0,     4,     0,     1,
-       1,     3,     2,     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,     0,     4,     0,     4,     0,     4,
        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     6,     1,     1,     0,     6,     1,     3,
-       2,     0,     4,     0,     1,     1,     3,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     3,     3,     0,     6,     1,
-       3,     2,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     6,     1,     3,     2,     1,     1,     1,     1,
-       1,     1,     3,     0,     4,     3,     0,     4,     0,     6,
-       0,     4,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     3,     0,     4,     3,     0,     4,     3,
-       3,     0,     4,     1,     1,     0,     4,     0,     4,     3,
-       3,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       6,     0,     4,     1,     3,     2,     1,     1,     0,     6,
-       3,     0,     6,     1,     3,     2,     0,     4,     1,     3,
-       2,     1,     1,     1,     1,     1,     1,     1,     3,     0,
-       4,     0,     6,     1,     3,     2,     0,     4,     1,     3,
-       2,     1,     1,     1,     1,     1,     0,     4,     3,     3,
-       3,     0,     4,     0,     6,     1,     3,     2,     1,     1,
-       3
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       1,     1,     0,     6,     1,     3,     2,     0,     4,     0,
+       1,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       4,     3,     3,     0,     6,     1,     3,     2,     1,     1,
+       1,     1,     1,     0,     4,     0,     4,     0,     6,     1,
+       3,     2,     1,     1,     1,     1,     1,     1,     3,     0,
+       4,     3,     0,     4,     0,     6,     0,     4,     1,     3,
+       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       0,     4,     3,     0,     4,     3,     3,     0,     4,     1,
+       1,     0,     4,     0,     4,     3,     3,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     6,     0,     4,     1,
+       3,     2,     1,     1,     0,     6,     3,     0,     6,     1,
+       3,     2,     0,     4,     1,     3,     2,     1,     1,     1,
+       1,     1,     1,     1,     3,     0,     4,     0,     6,     1,
+       3,     2,     0,     4,     1,     3,     2,     1,     1,     1,
+       1,     1,     0,     4,     3,     3,     3,     0,     4,     0,
+       6,     1,     3,     2,     1,     1,     3
   };
 
 
@@ -5857,6 +5892,7 @@ namespace isc { namespace dhcp {
   "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
   "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"port\"",
   "\"persist\"", "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
+  "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"",
   "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"",
   "\"stop-retry-exit\"", "\"serve-retry-exit\"",
   "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"",
@@ -5941,7 +5977,8 @@ namespace isc { namespace dhcp {
   "not_empty_database_list", "database", "$@36", "database_map_params",
   "database_map_param", "database_type", "$@37", "db_type", "user", "$@38",
   "password", "$@39", "host", "$@40", "port", "name", "$@41", "persist",
-  "lfc_interval", "readonly", "connect_timeout", "max_reconnect_tries",
+  "lfc_interval", "readonly", "connect_timeout", "read_timeout",
+  "write_timeout", "tcp_user_timeout", "max_reconnect_tries",
   "reconnect_wait_time", "on_fail", "$@42", "on_fail_mode",
   "max_row_errors", "trust_anchor", "$@43", "cert_file", "$@44",
   "key_file", "$@45", "cipher_list", "$@46",
@@ -6023,89 +6060,89 @@ namespace isc { namespace dhcp {
   const short
   Dhcp4Parser::yyrline_[] =
   {
-       0,   295,   295,   295,   296,   296,   297,   297,   298,   298,
-     299,   299,   300,   300,   301,   301,   302,   302,   303,   303,
-     304,   304,   305,   305,   306,   306,   307,   307,   315,   316,
-     317,   318,   319,   320,   321,   324,   329,   329,   340,   343,
-     344,   347,   352,   358,   363,   363,   370,   371,   374,   378,
-     382,   388,   388,   395,   396,   399,   403,   407,   417,   426,
-     426,   441,   441,   455,   458,   464,   464,   473,   474,   475,
-     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,   507,   508,   509,   510,   511,
-     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,   545,   548,   554,   560,   566,   572,   578,
-     584,   590,   596,   602,   608,   614,   614,   623,   629,   635,
-     641,   647,   653,   659,   665,   665,   674,   677,   680,   683,
-     686,   692,   692,   701,   701,   710,   716,   722,   722,   731,
-     731,   740,   746,   752,   758,   764,   770,   776,   776,   788,
-     789,   790,   795,   796,   797,   798,   799,   800,   801,   802,
-     803,   804,   807,   807,   816,   816,   827,   827,   835,   836,
-     839,   839,   847,   849,   853,   859,   865,   871,   877,   877,
-     890,   890,   901,   902,   903,   908,   910,   910,   929,   929,
-     942,   942,   953,   954,   957,   958,   959,   964,   964,   974,
-     975,   976,   981,   982,   983,   984,   985,   986,   987,   988,
-     989,   990,   991,   992,   993,   994,   995,   996,   997,   998,
-     999,  1002,  1002,  1010,  1011,  1012,  1015,  1015,  1024,  1024,
-    1033,  1033,  1042,  1048,  1048,  1057,  1063,  1069,  1075,  1081,
-    1087,  1093,  1093,  1101,  1102,  1103,  1106,  1112,  1112,  1121,
-    1121,  1130,  1130,  1139,  1139,  1148,  1148,  1159,  1160,  1161,
-    1166,  1167,  1168,  1169,  1170,  1173,  1178,  1183,  1188,  1193,
-    1200,  1200,  1213,  1214,  1215,  1220,  1221,  1222,  1223,  1224,
-    1225,  1228,  1234,  1240,  1246,  1246,  1257,  1258,  1261,  1262,
-    1263,  1268,  1268,  1278,  1278,  1288,  1289,  1290,  1293,  1296,
-    1297,  1300,  1300,  1309,  1309,  1318,  1318,  1330,  1331,  1332,
-    1337,  1338,  1339,  1340,  1341,  1342,  1345,  1351,  1357,  1363,
-    1369,  1375,  1384,  1384,  1398,  1399,  1402,  1403,  1404,  1413,
-    1413,  1439,  1439,  1450,  1451,  1452,  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,  1505,  1505,  1514,  1514,  1523,  1523,  1532,  1532,  1541,
-    1541,  1550,  1550,  1559,  1559,  1570,  1576,  1582,  1588,  1588,
-    1596,  1597,  1598,  1599,  1602,  1610,  1610,  1622,  1623,  1627,
-    1628,  1629,  1634,  1634,  1642,  1643,  1644,  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,  1695,  1695,  1709,
-    1709,  1718,  1719,  1722,  1723,  1724,  1731,  1731,  1746,  1746,
-    1760,  1761,  1764,  1765,  1766,  1771,  1772,  1773,  1774,  1775,
-    1776,  1777,  1778,  1779,  1780,  1783,  1785,  1791,  1793,  1793,
-    1802,  1802,  1811,  1811,  1820,  1822,  1822,  1831,  1841,  1841,
-    1854,  1855,  1860,  1861,  1862,  1869,  1869,  1881,  1881,  1893,
-    1894,  1899,  1900,  1901,  1908,  1909,  1910,  1911,  1912,  1913,
-    1914,  1915,  1916,  1919,  1921,  1921,  1930,  1932,  1934,  1940,
-    1949,  1949,  1962,  1963,  1966,  1967,  1968,  1973,  1973,  1983,
-    1983,  1993,  1994,  1995,  2000,  2001,  2002,  2003,  2004,  2005,
-    2006,  2009,  2009,  2018,  2018,  2043,  2043,  2073,  2073,  2084,
-    2085,  2088,  2089,  2090,  2095,  2095,  2104,  2104,  2113,  2114,
-    2117,  2118,  2119,  2125,  2126,  2127,  2128,  2129,  2130,  2131,
-    2132,  2133,  2134,  2135,  2136,  2137,  2138,  2139,  2142,  2142,
-    2151,  2151,  2160,  2160,  2169,  2169,  2178,  2178,  2189,  2189,
-    2198,  2198,  2207,  2207,  2216,  2216,  2225,  2225,  2234,  2234,
-    2243,  2243,  2257,  2257,  2268,  2269,  2275,  2275,  2286,  2287,
-    2288,  2293,  2293,  2303,  2304,  2307,  2308,  2309,  2314,  2315,
-    2316,  2317,  2318,  2319,  2320,  2321,  2322,  2323,  2324,  2325,
-    2326,  2327,  2330,  2332,  2332,  2341,  2349,  2357,  2357,  2368,
-    2369,  2370,  2375,  2376,  2377,  2378,  2379,  2382,  2382,  2391,
-    2391,  2403,  2403,  2416,  2417,  2418,  2423,  2424,  2425,  2426,
-    2427,  2428,  2431,  2437,  2437,  2446,  2452,  2452,  2462,  2462,
-    2475,  2475,  2485,  2486,  2487,  2492,  2493,  2494,  2495,  2496,
-    2497,  2498,  2499,  2500,  2501,  2502,  2503,  2504,  2505,  2506,
-    2507,  2508,  2509,  2512,  2518,  2518,  2527,  2533,  2533,  2542,
-    2548,  2554,  2554,  2563,  2564,  2567,  2567,  2577,  2577,  2587,
-    2594,  2601,  2601,  2610,  2610,  2620,  2620,  2630,  2630,  2642,
-    2642,  2654,  2654,  2664,  2665,  2666,  2672,  2673,  2676,  2676,
-    2687,  2695,  2695,  2708,  2709,  2710,  2716,  2716,  2724,  2725,
-    2726,  2731,  2732,  2733,  2734,  2735,  2736,  2737,  2740,  2746,
-    2746,  2755,  2755,  2766,  2767,  2768,  2773,  2773,  2781,  2782,
-    2783,  2788,  2789,  2790,  2791,  2792,  2795,  2795,  2804,  2810,
-    2816,  2822,  2822,  2831,  2831,  2842,  2843,  2844,  2849,  2850,
-    2853
+       0,   298,   298,   298,   299,   299,   300,   300,   301,   301,
+     302,   302,   303,   303,   304,   304,   305,   305,   306,   306,
+     307,   307,   308,   308,   309,   309,   310,   310,   318,   319,
+     320,   321,   322,   323,   324,   327,   332,   332,   343,   346,
+     347,   350,   355,   361,   366,   366,   373,   374,   377,   381,
+     385,   391,   391,   398,   399,   402,   406,   410,   420,   429,
+     429,   444,   444,   458,   461,   467,   467,   476,   477,   478,
+     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
+     495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
+     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
+     515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
+     525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
+     535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
+     545,   546,   547,   548,   551,   557,   563,   569,   575,   581,
+     587,   593,   599,   605,   611,   617,   617,   626,   632,   638,
+     644,   650,   656,   662,   668,   668,   677,   680,   683,   686,
+     689,   695,   695,   704,   704,   713,   719,   725,   725,   734,
+     734,   743,   749,   755,   761,   767,   773,   779,   779,   791,
+     792,   793,   798,   799,   800,   801,   802,   803,   804,   805,
+     806,   807,   810,   810,   819,   819,   830,   830,   838,   839,
+     842,   842,   850,   852,   856,   862,   868,   874,   880,   880,
+     893,   893,   904,   905,   906,   911,   913,   913,   932,   932,
+     945,   945,   956,   957,   960,   961,   962,   967,   967,   977,
+     978,   979,   984,   985,   986,   987,   988,   989,   990,   991,
+     992,   993,   994,   995,   996,   997,   998,   999,  1000,  1001,
+    1002,  1003,  1004,  1005,  1008,  1008,  1016,  1017,  1018,  1021,
+    1021,  1030,  1030,  1039,  1039,  1048,  1054,  1054,  1063,  1069,
+    1075,  1081,  1087,  1093,  1099,  1105,  1111,  1117,  1117,  1125,
+    1126,  1127,  1130,  1136,  1136,  1145,  1145,  1154,  1154,  1163,
+    1163,  1172,  1172,  1183,  1184,  1185,  1190,  1191,  1192,  1193,
+    1194,  1197,  1202,  1207,  1212,  1217,  1224,  1224,  1237,  1238,
+    1239,  1244,  1245,  1246,  1247,  1248,  1249,  1252,  1258,  1264,
+    1270,  1270,  1281,  1282,  1285,  1286,  1287,  1292,  1292,  1302,
+    1302,  1312,  1313,  1314,  1317,  1320,  1321,  1324,  1324,  1333,
+    1333,  1342,  1342,  1354,  1355,  1356,  1361,  1362,  1363,  1364,
+    1365,  1366,  1369,  1375,  1381,  1387,  1393,  1399,  1408,  1408,
+    1422,  1423,  1426,  1427,  1428,  1437,  1437,  1463,  1463,  1474,
+    1475,  1476,  1482,  1483,  1484,  1485,  1486,  1487,  1488,  1489,
+    1490,  1491,  1492,  1493,  1494,  1495,  1496,  1497,  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,  1529,  1529,  1538,
+    1538,  1547,  1547,  1556,  1556,  1565,  1565,  1574,  1574,  1583,
+    1583,  1594,  1600,  1606,  1612,  1612,  1620,  1621,  1622,  1623,
+    1626,  1634,  1634,  1646,  1647,  1651,  1652,  1653,  1658,  1658,
+    1666,  1667,  1668,  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,  1719,  1719,  1733,  1733,  1742,  1743,  1746,
+    1747,  1748,  1755,  1755,  1770,  1770,  1784,  1785,  1788,  1789,
+    1790,  1795,  1796,  1797,  1798,  1799,  1800,  1801,  1802,  1803,
+    1804,  1807,  1809,  1815,  1817,  1817,  1826,  1826,  1835,  1835,
+    1844,  1846,  1846,  1855,  1865,  1865,  1878,  1879,  1884,  1885,
+    1886,  1893,  1893,  1905,  1905,  1917,  1918,  1923,  1924,  1925,
+    1932,  1933,  1934,  1935,  1936,  1937,  1938,  1939,  1940,  1943,
+    1945,  1945,  1954,  1956,  1958,  1964,  1973,  1973,  1986,  1987,
+    1990,  1991,  1992,  1997,  1997,  2007,  2007,  2017,  2018,  2019,
+    2024,  2025,  2026,  2027,  2028,  2029,  2030,  2033,  2033,  2042,
+    2042,  2067,  2067,  2097,  2097,  2108,  2109,  2112,  2113,  2114,
+    2119,  2119,  2128,  2128,  2137,  2138,  2141,  2142,  2143,  2149,
+    2150,  2151,  2152,  2153,  2154,  2155,  2156,  2157,  2158,  2159,
+    2160,  2161,  2162,  2163,  2166,  2166,  2175,  2175,  2184,  2184,
+    2193,  2193,  2202,  2202,  2213,  2213,  2222,  2222,  2231,  2231,
+    2240,  2240,  2249,  2249,  2258,  2258,  2267,  2267,  2281,  2281,
+    2292,  2293,  2299,  2299,  2310,  2311,  2312,  2317,  2317,  2327,
+    2328,  2331,  2332,  2333,  2338,  2339,  2340,  2341,  2342,  2343,
+    2344,  2345,  2346,  2347,  2348,  2349,  2350,  2351,  2354,  2356,
+    2356,  2365,  2373,  2381,  2381,  2392,  2393,  2394,  2399,  2400,
+    2401,  2402,  2403,  2406,  2406,  2415,  2415,  2427,  2427,  2440,
+    2441,  2442,  2447,  2448,  2449,  2450,  2451,  2452,  2455,  2461,
+    2461,  2470,  2476,  2476,  2486,  2486,  2499,  2499,  2509,  2510,
+    2511,  2516,  2517,  2518,  2519,  2520,  2521,  2522,  2523,  2524,
+    2525,  2526,  2527,  2528,  2529,  2530,  2531,  2532,  2533,  2536,
+    2542,  2542,  2551,  2557,  2557,  2566,  2572,  2578,  2578,  2587,
+    2588,  2591,  2591,  2601,  2601,  2611,  2618,  2625,  2625,  2634,
+    2634,  2644,  2644,  2654,  2654,  2666,  2666,  2678,  2678,  2688,
+    2689,  2690,  2696,  2697,  2700,  2700,  2711,  2719,  2719,  2732,
+    2733,  2734,  2740,  2740,  2748,  2749,  2750,  2755,  2756,  2757,
+    2758,  2759,  2760,  2761,  2764,  2770,  2770,  2779,  2779,  2790,
+    2791,  2792,  2797,  2797,  2805,  2806,  2807,  2812,  2813,  2814,
+    2815,  2816,  2819,  2819,  2828,  2834,  2840,  2846,  2846,  2855,
+    2855,  2866,  2867,  2868,  2873,  2874,  2877
   };
 
   void
@@ -6138,9 +6175,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 6142 "dhcp4_parser.cc"
+#line 6179 "dhcp4_parser.cc"
 
-#line 2859 "dhcp4_parser.yy"
+#line 2883 "dhcp4_parser.yy"
 
 
 void
diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h
index 86587e3a32..db0a999732 100644
--- a/src/bin/dhcp4/dhcp4_parser.h
+++ b/src/bin/dhcp4/dhcp4_parser.h
@@ -545,163 +545,166 @@ namespace isc { namespace dhcp {
     TOKEN_LFC_INTERVAL = 301,      // "lfc-interval"
     TOKEN_READONLY = 302,          // "readonly"
     TOKEN_CONNECT_TIMEOUT = 303,   // "connect-timeout"
-    TOKEN_MAX_RECONNECT_TRIES = 304, // "max-reconnect-tries"
-    TOKEN_RECONNECT_WAIT_TIME = 305, // "reconnect-wait-time"
-    TOKEN_ON_FAIL = 306,           // "on-fail"
-    TOKEN_STOP_RETRY_EXIT = 307,   // "stop-retry-exit"
-    TOKEN_SERVE_RETRY_EXIT = 308,  // "serve-retry-exit"
-    TOKEN_SERVE_RETRY_CONTINUE = 309, // "serve-retry-continue"
-    TOKEN_MAX_ROW_ERRORS = 310,    // "max-row-errors"
-    TOKEN_TRUST_ANCHOR = 311,      // "trust-anchor"
-    TOKEN_CERT_FILE = 312,         // "cert-file"
-    TOKEN_KEY_FILE = 313,          // "key-file"
-    TOKEN_CIPHER_LIST = 314,       // "cipher-list"
-    TOKEN_VALID_LIFETIME = 315,    // "valid-lifetime"
-    TOKEN_MIN_VALID_LIFETIME = 316, // "min-valid-lifetime"
-    TOKEN_MAX_VALID_LIFETIME = 317, // "max-valid-lifetime"
-    TOKEN_RENEW_TIMER = 318,       // "renew-timer"
-    TOKEN_REBIND_TIMER = 319,      // "rebind-timer"
-    TOKEN_CALCULATE_TEE_TIMES = 320, // "calculate-tee-times"
-    TOKEN_T1_PERCENT = 321,        // "t1-percent"
-    TOKEN_T2_PERCENT = 322,        // "t2-percent"
-    TOKEN_CACHE_THRESHOLD = 323,   // "cache-threshold"
-    TOKEN_CACHE_MAX_AGE = 324,     // "cache-max-age"
-    TOKEN_DECLINE_PROBATION_PERIOD = 325, // "decline-probation-period"
-    TOKEN_SERVER_TAG = 326,        // "server-tag"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 327, // "statistic-default-sample-count"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 328, // "statistic-default-sample-age"
-    TOKEN_DDNS_SEND_UPDATES = 329, // "ddns-send-updates"
-    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 330, // "ddns-override-no-update"
-    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 331, // "ddns-override-client-update"
-    TOKEN_DDNS_REPLACE_CLIENT_NAME = 332, // "ddns-replace-client-name"
-    TOKEN_DDNS_GENERATED_PREFIX = 333, // "ddns-generated-prefix"
-    TOKEN_DDNS_QUALIFYING_SUFFIX = 334, // "ddns-qualifying-suffix"
-    TOKEN_DDNS_UPDATE_ON_RENEW = 335, // "ddns-update-on-renew"
-    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 336, // "ddns-use-conflict-resolution"
-    TOKEN_STORE_EXTENDED_INFO = 337, // "store-extended-info"
-    TOKEN_SUBNET4 = 338,           // "subnet4"
-    TOKEN_SUBNET_4O6_INTERFACE = 339, // "4o6-interface"
-    TOKEN_SUBNET_4O6_INTERFACE_ID = 340, // "4o6-interface-id"
-    TOKEN_SUBNET_4O6_SUBNET = 341, // "4o6-subnet"
-    TOKEN_OPTION_DEF = 342,        // "option-def"
-    TOKEN_OPTION_DATA = 343,       // "option-data"
-    TOKEN_NAME = 344,              // "name"
-    TOKEN_DATA = 345,              // "data"
-    TOKEN_CODE = 346,              // "code"
-    TOKEN_SPACE = 347,             // "space"
-    TOKEN_CSV_FORMAT = 348,        // "csv-format"
-    TOKEN_ALWAYS_SEND = 349,       // "always-send"
-    TOKEN_RECORD_TYPES = 350,      // "record-types"
-    TOKEN_ENCAPSULATE = 351,       // "encapsulate"
-    TOKEN_ARRAY = 352,             // "array"
-    TOKEN_PARKED_PACKET_LIMIT = 353, // "parked-packet-limit"
-    TOKEN_SHARED_NETWORKS = 354,   // "shared-networks"
-    TOKEN_POOLS = 355,             // "pools"
-    TOKEN_POOL = 356,              // "pool"
-    TOKEN_USER_CONTEXT = 357,      // "user-context"
-    TOKEN_COMMENT = 358,           // "comment"
-    TOKEN_SUBNET = 359,            // "subnet"
-    TOKEN_INTERFACE = 360,         // "interface"
-    TOKEN_ID = 361,                // "id"
-    TOKEN_RESERVATION_MODE = 362,  // "reservation-mode"
-    TOKEN_DISABLED = 363,          // "disabled"
-    TOKEN_OUT_OF_POOL = 364,       // "out-of-pool"
-    TOKEN_GLOBAL = 365,            // "global"
-    TOKEN_ALL = 366,               // "all"
-    TOKEN_RESERVATIONS_GLOBAL = 367, // "reservations-global"
-    TOKEN_RESERVATIONS_IN_SUBNET = 368, // "reservations-in-subnet"
-    TOKEN_RESERVATIONS_OUT_OF_POOL = 369, // "reservations-out-of-pool"
-    TOKEN_HOST_RESERVATION_IDENTIFIERS = 370, // "host-reservation-identifiers"
-    TOKEN_CLIENT_CLASSES = 371,    // "client-classes"
-    TOKEN_REQUIRE_CLIENT_CLASSES = 372, // "require-client-classes"
-    TOKEN_TEST = 373,              // "test"
-    TOKEN_ONLY_IF_REQUIRED = 374,  // "only-if-required"
-    TOKEN_CLIENT_CLASS = 375,      // "client-class"
-    TOKEN_RESERVATIONS = 376,      // "reservations"
-    TOKEN_DUID = 377,              // "duid"
-    TOKEN_HW_ADDRESS = 378,        // "hw-address"
-    TOKEN_CIRCUIT_ID = 379,        // "circuit-id"
-    TOKEN_CLIENT_ID = 380,         // "client-id"
-    TOKEN_HOSTNAME = 381,          // "hostname"
-    TOKEN_FLEX_ID = 382,           // "flex-id"
-    TOKEN_RELAY = 383,             // "relay"
-    TOKEN_IP_ADDRESS = 384,        // "ip-address"
-    TOKEN_IP_ADDRESSES = 385,      // "ip-addresses"
-    TOKEN_HOOKS_LIBRARIES = 386,   // "hooks-libraries"
-    TOKEN_LIBRARY = 387,           // "library"
-    TOKEN_PARAMETERS = 388,        // "parameters"
-    TOKEN_EXPIRED_LEASES_PROCESSING = 389, // "expired-leases-processing"
-    TOKEN_RECLAIM_TIMER_WAIT_TIME = 390, // "reclaim-timer-wait-time"
-    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 391, // "flush-reclaimed-timer-wait-time"
-    TOKEN_HOLD_RECLAIMED_TIME = 392, // "hold-reclaimed-time"
-    TOKEN_MAX_RECLAIM_LEASES = 393, // "max-reclaim-leases"
-    TOKEN_MAX_RECLAIM_TIME = 394,  // "max-reclaim-time"
-    TOKEN_UNWARNED_RECLAIM_CYCLES = 395, // "unwarned-reclaim-cycles"
-    TOKEN_DHCP4O6_PORT = 396,      // "dhcp4o6-port"
-    TOKEN_DHCP_MULTI_THREADING = 397, // "multi-threading"
-    TOKEN_ENABLE_MULTI_THREADING = 398, // "enable-multi-threading"
-    TOKEN_THREAD_POOL_SIZE = 399,  // "thread-pool-size"
-    TOKEN_PACKET_QUEUE_SIZE = 400, // "packet-queue-size"
-    TOKEN_CONTROL_SOCKET = 401,    // "control-socket"
-    TOKEN_SOCKET_TYPE = 402,       // "socket-type"
-    TOKEN_SOCKET_NAME = 403,       // "socket-name"
-    TOKEN_DHCP_QUEUE_CONTROL = 404, // "dhcp-queue-control"
-    TOKEN_ENABLE_QUEUE = 405,      // "enable-queue"
-    TOKEN_QUEUE_TYPE = 406,        // "queue-type"
-    TOKEN_CAPACITY = 407,          // "capacity"
-    TOKEN_DHCP_DDNS = 408,         // "dhcp-ddns"
-    TOKEN_ENABLE_UPDATES = 409,    // "enable-updates"
-    TOKEN_QUALIFYING_SUFFIX = 410, // "qualifying-suffix"
-    TOKEN_SERVER_IP = 411,         // "server-ip"
-    TOKEN_SERVER_PORT = 412,       // "server-port"
-    TOKEN_SENDER_IP = 413,         // "sender-ip"
-    TOKEN_SENDER_PORT = 414,       // "sender-port"
-    TOKEN_MAX_QUEUE_SIZE = 415,    // "max-queue-size"
-    TOKEN_NCR_PROTOCOL = 416,      // "ncr-protocol"
-    TOKEN_NCR_FORMAT = 417,        // "ncr-format"
-    TOKEN_OVERRIDE_NO_UPDATE = 418, // "override-no-update"
-    TOKEN_OVERRIDE_CLIENT_UPDATE = 419, // "override-client-update"
-    TOKEN_REPLACE_CLIENT_NAME = 420, // "replace-client-name"
-    TOKEN_GENERATED_PREFIX = 421,  // "generated-prefix"
-    TOKEN_TCP = 422,               // "tcp"
-    TOKEN_JSON = 423,              // "JSON"
-    TOKEN_WHEN_PRESENT = 424,      // "when-present"
-    TOKEN_NEVER = 425,             // "never"
-    TOKEN_ALWAYS = 426,            // "always"
-    TOKEN_WHEN_NOT_PRESENT = 427,  // "when-not-present"
-    TOKEN_HOSTNAME_CHAR_SET = 428, // "hostname-char-set"
-    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 429, // "hostname-char-replacement"
-    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 430, // "early-global-reservations-lookup"
-    TOKEN_IP_RESERVATIONS_UNIQUE = 431, // "ip-reservations-unique"
-    TOKEN_RESERVATIONS_LOOKUP_FIRST = 432, // "reservations-lookup-first"
-    TOKEN_LOGGERS = 433,           // "loggers"
-    TOKEN_OUTPUT_OPTIONS = 434,    // "output_options"
-    TOKEN_OUTPUT = 435,            // "output"
-    TOKEN_DEBUGLEVEL = 436,        // "debuglevel"
-    TOKEN_SEVERITY = 437,          // "severity"
-    TOKEN_FLUSH = 438,             // "flush"
-    TOKEN_MAXSIZE = 439,           // "maxsize"
-    TOKEN_MAXVER = 440,            // "maxver"
-    TOKEN_PATTERN = 441,           // "pattern"
-    TOKEN_COMPATIBILITY = 442,     // "compatibility"
-    TOKEN_LENIENT_OPTION_PARSING = 443, // "lenient-option-parsing"
-    TOKEN_TOPLEVEL_JSON = 444,     // TOPLEVEL_JSON
-    TOKEN_TOPLEVEL_DHCP4 = 445,    // TOPLEVEL_DHCP4
-    TOKEN_SUB_DHCP4 = 446,         // SUB_DHCP4
-    TOKEN_SUB_INTERFACES4 = 447,   // SUB_INTERFACES4
-    TOKEN_SUB_SUBNET4 = 448,       // SUB_SUBNET4
-    TOKEN_SUB_POOL4 = 449,         // SUB_POOL4
-    TOKEN_SUB_RESERVATION = 450,   // SUB_RESERVATION
-    TOKEN_SUB_OPTION_DEFS = 451,   // SUB_OPTION_DEFS
-    TOKEN_SUB_OPTION_DEF = 452,    // SUB_OPTION_DEF
-    TOKEN_SUB_OPTION_DATA = 453,   // SUB_OPTION_DATA
-    TOKEN_SUB_HOOKS_LIBRARY = 454, // SUB_HOOKS_LIBRARY
-    TOKEN_SUB_DHCP_DDNS = 455,     // SUB_DHCP_DDNS
-    TOKEN_SUB_CONFIG_CONTROL = 456, // SUB_CONFIG_CONTROL
-    TOKEN_STRING = 457,            // "constant string"
-    TOKEN_INTEGER = 458,           // "integer"
-    TOKEN_FLOAT = 459,             // "floating point"
-    TOKEN_BOOLEAN = 460            // "boolean"
+    TOKEN_READ_TIMEOUT = 304,      // "read-timeout"
+    TOKEN_WRITE_TIMEOUT = 305,     // "write-timeout"
+    TOKEN_TCP_USER_TIMEOUT = 306,  // "tcp-user-timeout"
+    TOKEN_MAX_RECONNECT_TRIES = 307, // "max-reconnect-tries"
+    TOKEN_RECONNECT_WAIT_TIME = 308, // "reconnect-wait-time"
+    TOKEN_ON_FAIL = 309,           // "on-fail"
+    TOKEN_STOP_RETRY_EXIT = 310,   // "stop-retry-exit"
+    TOKEN_SERVE_RETRY_EXIT = 311,  // "serve-retry-exit"
+    TOKEN_SERVE_RETRY_CONTINUE = 312, // "serve-retry-continue"
+    TOKEN_MAX_ROW_ERRORS = 313,    // "max-row-errors"
+    TOKEN_TRUST_ANCHOR = 314,      // "trust-anchor"
+    TOKEN_CERT_FILE = 315,         // "cert-file"
+    TOKEN_KEY_FILE = 316,          // "key-file"
+    TOKEN_CIPHER_LIST = 317,       // "cipher-list"
+    TOKEN_VALID_LIFETIME = 318,    // "valid-lifetime"
+    TOKEN_MIN_VALID_LIFETIME = 319, // "min-valid-lifetime"
+    TOKEN_MAX_VALID_LIFETIME = 320, // "max-valid-lifetime"
+    TOKEN_RENEW_TIMER = 321,       // "renew-timer"
+    TOKEN_REBIND_TIMER = 322,      // "rebind-timer"
+    TOKEN_CALCULATE_TEE_TIMES = 323, // "calculate-tee-times"
+    TOKEN_T1_PERCENT = 324,        // "t1-percent"
+    TOKEN_T2_PERCENT = 325,        // "t2-percent"
+    TOKEN_CACHE_THRESHOLD = 326,   // "cache-threshold"
+    TOKEN_CACHE_MAX_AGE = 327,     // "cache-max-age"
+    TOKEN_DECLINE_PROBATION_PERIOD = 328, // "decline-probation-period"
+    TOKEN_SERVER_TAG = 329,        // "server-tag"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 330, // "statistic-default-sample-count"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 331, // "statistic-default-sample-age"
+    TOKEN_DDNS_SEND_UPDATES = 332, // "ddns-send-updates"
+    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 333, // "ddns-override-no-update"
+    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 334, // "ddns-override-client-update"
+    TOKEN_DDNS_REPLACE_CLIENT_NAME = 335, // "ddns-replace-client-name"
+    TOKEN_DDNS_GENERATED_PREFIX = 336, // "ddns-generated-prefix"
+    TOKEN_DDNS_QUALIFYING_SUFFIX = 337, // "ddns-qualifying-suffix"
+    TOKEN_DDNS_UPDATE_ON_RENEW = 338, // "ddns-update-on-renew"
+    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 339, // "ddns-use-conflict-resolution"
+    TOKEN_STORE_EXTENDED_INFO = 340, // "store-extended-info"
+    TOKEN_SUBNET4 = 341,           // "subnet4"
+    TOKEN_SUBNET_4O6_INTERFACE = 342, // "4o6-interface"
+    TOKEN_SUBNET_4O6_INTERFACE_ID = 343, // "4o6-interface-id"
+    TOKEN_SUBNET_4O6_SUBNET = 344, // "4o6-subnet"
+    TOKEN_OPTION_DEF = 345,        // "option-def"
+    TOKEN_OPTION_DATA = 346,       // "option-data"
+    TOKEN_NAME = 347,              // "name"
+    TOKEN_DATA = 348,              // "data"
+    TOKEN_CODE = 349,              // "code"
+    TOKEN_SPACE = 350,             // "space"
+    TOKEN_CSV_FORMAT = 351,        // "csv-format"
+    TOKEN_ALWAYS_SEND = 352,       // "always-send"
+    TOKEN_RECORD_TYPES = 353,      // "record-types"
+    TOKEN_ENCAPSULATE = 354,       // "encapsulate"
+    TOKEN_ARRAY = 355,             // "array"
+    TOKEN_PARKED_PACKET_LIMIT = 356, // "parked-packet-limit"
+    TOKEN_SHARED_NETWORKS = 357,   // "shared-networks"
+    TOKEN_POOLS = 358,             // "pools"
+    TOKEN_POOL = 359,              // "pool"
+    TOKEN_USER_CONTEXT = 360,      // "user-context"
+    TOKEN_COMMENT = 361,           // "comment"
+    TOKEN_SUBNET = 362,            // "subnet"
+    TOKEN_INTERFACE = 363,         // "interface"
+    TOKEN_ID = 364,                // "id"
+    TOKEN_RESERVATION_MODE = 365,  // "reservation-mode"
+    TOKEN_DISABLED = 366,          // "disabled"
+    TOKEN_OUT_OF_POOL = 367,       // "out-of-pool"
+    TOKEN_GLOBAL = 368,            // "global"
+    TOKEN_ALL = 369,               // "all"
+    TOKEN_RESERVATIONS_GLOBAL = 370, // "reservations-global"
+    TOKEN_RESERVATIONS_IN_SUBNET = 371, // "reservations-in-subnet"
+    TOKEN_RESERVATIONS_OUT_OF_POOL = 372, // "reservations-out-of-pool"
+    TOKEN_HOST_RESERVATION_IDENTIFIERS = 373, // "host-reservation-identifiers"
+    TOKEN_CLIENT_CLASSES = 374,    // "client-classes"
+    TOKEN_REQUIRE_CLIENT_CLASSES = 375, // "require-client-classes"
+    TOKEN_TEST = 376,              // "test"
+    TOKEN_ONLY_IF_REQUIRED = 377,  // "only-if-required"
+    TOKEN_CLIENT_CLASS = 378,      // "client-class"
+    TOKEN_RESERVATIONS = 379,      // "reservations"
+    TOKEN_DUID = 380,              // "duid"
+    TOKEN_HW_ADDRESS = 381,        // "hw-address"
+    TOKEN_CIRCUIT_ID = 382,        // "circuit-id"
+    TOKEN_CLIENT_ID = 383,         // "client-id"
+    TOKEN_HOSTNAME = 384,          // "hostname"
+    TOKEN_FLEX_ID = 385,           // "flex-id"
+    TOKEN_RELAY = 386,             // "relay"
+    TOKEN_IP_ADDRESS = 387,        // "ip-address"
+    TOKEN_IP_ADDRESSES = 388,      // "ip-addresses"
+    TOKEN_HOOKS_LIBRARIES = 389,   // "hooks-libraries"
+    TOKEN_LIBRARY = 390,           // "library"
+    TOKEN_PARAMETERS = 391,        // "parameters"
+    TOKEN_EXPIRED_LEASES_PROCESSING = 392, // "expired-leases-processing"
+    TOKEN_RECLAIM_TIMER_WAIT_TIME = 393, // "reclaim-timer-wait-time"
+    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 394, // "flush-reclaimed-timer-wait-time"
+    TOKEN_HOLD_RECLAIMED_TIME = 395, // "hold-reclaimed-time"
+    TOKEN_MAX_RECLAIM_LEASES = 396, // "max-reclaim-leases"
+    TOKEN_MAX_RECLAIM_TIME = 397,  // "max-reclaim-time"
+    TOKEN_UNWARNED_RECLAIM_CYCLES = 398, // "unwarned-reclaim-cycles"
+    TOKEN_DHCP4O6_PORT = 399,      // "dhcp4o6-port"
+    TOKEN_DHCP_MULTI_THREADING = 400, // "multi-threading"
+    TOKEN_ENABLE_MULTI_THREADING = 401, // "enable-multi-threading"
+    TOKEN_THREAD_POOL_SIZE = 402,  // "thread-pool-size"
+    TOKEN_PACKET_QUEUE_SIZE = 403, // "packet-queue-size"
+    TOKEN_CONTROL_SOCKET = 404,    // "control-socket"
+    TOKEN_SOCKET_TYPE = 405,       // "socket-type"
+    TOKEN_SOCKET_NAME = 406,       // "socket-name"
+    TOKEN_DHCP_QUEUE_CONTROL = 407, // "dhcp-queue-control"
+    TOKEN_ENABLE_QUEUE = 408,      // "enable-queue"
+    TOKEN_QUEUE_TYPE = 409,        // "queue-type"
+    TOKEN_CAPACITY = 410,          // "capacity"
+    TOKEN_DHCP_DDNS = 411,         // "dhcp-ddns"
+    TOKEN_ENABLE_UPDATES = 412,    // "enable-updates"
+    TOKEN_QUALIFYING_SUFFIX = 413, // "qualifying-suffix"
+    TOKEN_SERVER_IP = 414,         // "server-ip"
+    TOKEN_SERVER_PORT = 415,       // "server-port"
+    TOKEN_SENDER_IP = 416,         // "sender-ip"
+    TOKEN_SENDER_PORT = 417,       // "sender-port"
+    TOKEN_MAX_QUEUE_SIZE = 418,    // "max-queue-size"
+    TOKEN_NCR_PROTOCOL = 419,      // "ncr-protocol"
+    TOKEN_NCR_FORMAT = 420,        // "ncr-format"
+    TOKEN_OVERRIDE_NO_UPDATE = 421, // "override-no-update"
+    TOKEN_OVERRIDE_CLIENT_UPDATE = 422, // "override-client-update"
+    TOKEN_REPLACE_CLIENT_NAME = 423, // "replace-client-name"
+    TOKEN_GENERATED_PREFIX = 424,  // "generated-prefix"
+    TOKEN_TCP = 425,               // "tcp"
+    TOKEN_JSON = 426,              // "JSON"
+    TOKEN_WHEN_PRESENT = 427,      // "when-present"
+    TOKEN_NEVER = 428,             // "never"
+    TOKEN_ALWAYS = 429,            // "always"
+    TOKEN_WHEN_NOT_PRESENT = 430,  // "when-not-present"
+    TOKEN_HOSTNAME_CHAR_SET = 431, // "hostname-char-set"
+    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 432, // "hostname-char-replacement"
+    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 433, // "early-global-reservations-lookup"
+    TOKEN_IP_RESERVATIONS_UNIQUE = 434, // "ip-reservations-unique"
+    TOKEN_RESERVATIONS_LOOKUP_FIRST = 435, // "reservations-lookup-first"
+    TOKEN_LOGGERS = 436,           // "loggers"
+    TOKEN_OUTPUT_OPTIONS = 437,    // "output_options"
+    TOKEN_OUTPUT = 438,            // "output"
+    TOKEN_DEBUGLEVEL = 439,        // "debuglevel"
+    TOKEN_SEVERITY = 440,          // "severity"
+    TOKEN_FLUSH = 441,             // "flush"
+    TOKEN_MAXSIZE = 442,           // "maxsize"
+    TOKEN_MAXVER = 443,            // "maxver"
+    TOKEN_PATTERN = 444,           // "pattern"
+    TOKEN_COMPATIBILITY = 445,     // "compatibility"
+    TOKEN_LENIENT_OPTION_PARSING = 446, // "lenient-option-parsing"
+    TOKEN_TOPLEVEL_JSON = 447,     // TOPLEVEL_JSON
+    TOKEN_TOPLEVEL_DHCP4 = 448,    // TOPLEVEL_DHCP4
+    TOKEN_SUB_DHCP4 = 449,         // SUB_DHCP4
+    TOKEN_SUB_INTERFACES4 = 450,   // SUB_INTERFACES4
+    TOKEN_SUB_SUBNET4 = 451,       // SUB_SUBNET4
+    TOKEN_SUB_POOL4 = 452,         // SUB_POOL4
+    TOKEN_SUB_RESERVATION = 453,   // SUB_RESERVATION
+    TOKEN_SUB_OPTION_DEFS = 454,   // SUB_OPTION_DEFS
+    TOKEN_SUB_OPTION_DEF = 455,    // SUB_OPTION_DEF
+    TOKEN_SUB_OPTION_DATA = 456,   // SUB_OPTION_DATA
+    TOKEN_SUB_HOOKS_LIBRARY = 457, // SUB_HOOKS_LIBRARY
+    TOKEN_SUB_DHCP_DDNS = 458,     // SUB_DHCP_DDNS
+    TOKEN_SUB_CONFIG_CONTROL = 459, // SUB_CONFIG_CONTROL
+    TOKEN_STRING = 460,            // "constant string"
+    TOKEN_INTEGER = 461,           // "integer"
+    TOKEN_FLOAT = 462,             // "floating point"
+    TOKEN_BOOLEAN = 463            // "boolean"
       };
       /// Backward compatibility alias (Bison 3.6).
       typedef token_kind_type yytokentype;
@@ -718,7 +721,7 @@ namespace isc { namespace dhcp {
     {
       enum symbol_kind_type
       {
-        YYNTOKENS = 206, ///< Number of tokens.
+        YYNTOKENS = 209, ///< Number of tokens.
         S_YYEMPTY = -2,
         S_YYEOF = 0,                             // "end of file"
         S_YYerror = 1,                           // error
@@ -769,585 +772,591 @@ namespace isc { namespace dhcp {
         S_LFC_INTERVAL = 46,                     // "lfc-interval"
         S_READONLY = 47,                         // "readonly"
         S_CONNECT_TIMEOUT = 48,                  // "connect-timeout"
-        S_MAX_RECONNECT_TRIES = 49,              // "max-reconnect-tries"
-        S_RECONNECT_WAIT_TIME = 50,              // "reconnect-wait-time"
-        S_ON_FAIL = 51,                          // "on-fail"
-        S_STOP_RETRY_EXIT = 52,                  // "stop-retry-exit"
-        S_SERVE_RETRY_EXIT = 53,                 // "serve-retry-exit"
-        S_SERVE_RETRY_CONTINUE = 54,             // "serve-retry-continue"
-        S_MAX_ROW_ERRORS = 55,                   // "max-row-errors"
-        S_TRUST_ANCHOR = 56,                     // "trust-anchor"
-        S_CERT_FILE = 57,                        // "cert-file"
-        S_KEY_FILE = 58,                         // "key-file"
-        S_CIPHER_LIST = 59,                      // "cipher-list"
-        S_VALID_LIFETIME = 60,                   // "valid-lifetime"
-        S_MIN_VALID_LIFETIME = 61,               // "min-valid-lifetime"
-        S_MAX_VALID_LIFETIME = 62,               // "max-valid-lifetime"
-        S_RENEW_TIMER = 63,                      // "renew-timer"
-        S_REBIND_TIMER = 64,                     // "rebind-timer"
-        S_CALCULATE_TEE_TIMES = 65,              // "calculate-tee-times"
-        S_T1_PERCENT = 66,                       // "t1-percent"
-        S_T2_PERCENT = 67,                       // "t2-percent"
-        S_CACHE_THRESHOLD = 68,                  // "cache-threshold"
-        S_CACHE_MAX_AGE = 69,                    // "cache-max-age"
-        S_DECLINE_PROBATION_PERIOD = 70,         // "decline-probation-period"
-        S_SERVER_TAG = 71,                       // "server-tag"
-        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 72,   // "statistic-default-sample-count"
-        S_STATISTIC_DEFAULT_SAMPLE_AGE = 73,     // "statistic-default-sample-age"
-        S_DDNS_SEND_UPDATES = 74,                // "ddns-send-updates"
-        S_DDNS_OVERRIDE_NO_UPDATE = 75,          // "ddns-override-no-update"
-        S_DDNS_OVERRIDE_CLIENT_UPDATE = 76,      // "ddns-override-client-update"
-        S_DDNS_REPLACE_CLIENT_NAME = 77,         // "ddns-replace-client-name"
-        S_DDNS_GENERATED_PREFIX = 78,            // "ddns-generated-prefix"
-        S_DDNS_QUALIFYING_SUFFIX = 79,           // "ddns-qualifying-suffix"
-        S_DDNS_UPDATE_ON_RENEW = 80,             // "ddns-update-on-renew"
-        S_DDNS_USE_CONFLICT_RESOLUTION = 81,     // "ddns-use-conflict-resolution"
-        S_STORE_EXTENDED_INFO = 82,              // "store-extended-info"
-        S_SUBNET4 = 83,                          // "subnet4"
-        S_SUBNET_4O6_INTERFACE = 84,             // "4o6-interface"
-        S_SUBNET_4O6_INTERFACE_ID = 85,          // "4o6-interface-id"
-        S_SUBNET_4O6_SUBNET = 86,                // "4o6-subnet"
-        S_OPTION_DEF = 87,                       // "option-def"
-        S_OPTION_DATA = 88,                      // "option-data"
-        S_NAME = 89,                             // "name"
-        S_DATA = 90,                             // "data"
-        S_CODE = 91,                             // "code"
-        S_SPACE = 92,                            // "space"
-        S_CSV_FORMAT = 93,                       // "csv-format"
-        S_ALWAYS_SEND = 94,                      // "always-send"
-        S_RECORD_TYPES = 95,                     // "record-types"
-        S_ENCAPSULATE = 96,                      // "encapsulate"
-        S_ARRAY = 97,                            // "array"
-        S_PARKED_PACKET_LIMIT = 98,              // "parked-packet-limit"
-        S_SHARED_NETWORKS = 99,                  // "shared-networks"
-        S_POOLS = 100,                           // "pools"
-        S_POOL = 101,                            // "pool"
-        S_USER_CONTEXT = 102,                    // "user-context"
-        S_COMMENT = 103,                         // "comment"
-        S_SUBNET = 104,                          // "subnet"
-        S_INTERFACE = 105,                       // "interface"
-        S_ID = 106,                              // "id"
-        S_RESERVATION_MODE = 107,                // "reservation-mode"
-        S_DISABLED = 108,                        // "disabled"
-        S_OUT_OF_POOL = 109,                     // "out-of-pool"
-        S_GLOBAL = 110,                          // "global"
-        S_ALL = 111,                             // "all"
-        S_RESERVATIONS_GLOBAL = 112,             // "reservations-global"
-        S_RESERVATIONS_IN_SUBNET = 113,          // "reservations-in-subnet"
-        S_RESERVATIONS_OUT_OF_POOL = 114,        // "reservations-out-of-pool"
-        S_HOST_RESERVATION_IDENTIFIERS = 115,    // "host-reservation-identifiers"
-        S_CLIENT_CLASSES = 116,                  // "client-classes"
-        S_REQUIRE_CLIENT_CLASSES = 117,          // "require-client-classes"
-        S_TEST = 118,                            // "test"
-        S_ONLY_IF_REQUIRED = 119,                // "only-if-required"
-        S_CLIENT_CLASS = 120,                    // "client-class"
-        S_RESERVATIONS = 121,                    // "reservations"
-        S_DUID = 122,                            // "duid"
-        S_HW_ADDRESS = 123,                      // "hw-address"
-        S_CIRCUIT_ID = 124,                      // "circuit-id"
-        S_CLIENT_ID = 125,                       // "client-id"
-        S_HOSTNAME = 126,                        // "hostname"
-        S_FLEX_ID = 127,                         // "flex-id"
-        S_RELAY = 128,                           // "relay"
-        S_IP_ADDRESS = 129,                      // "ip-address"
-        S_IP_ADDRESSES = 130,                    // "ip-addresses"
-        S_HOOKS_LIBRARIES = 131,                 // "hooks-libraries"
-        S_LIBRARY = 132,                         // "library"
-        S_PARAMETERS = 133,                      // "parameters"
-        S_EXPIRED_LEASES_PROCESSING = 134,       // "expired-leases-processing"
-        S_RECLAIM_TIMER_WAIT_TIME = 135,         // "reclaim-timer-wait-time"
-        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 136, // "flush-reclaimed-timer-wait-time"
-        S_HOLD_RECLAIMED_TIME = 137,             // "hold-reclaimed-time"
-        S_MAX_RECLAIM_LEASES = 138,              // "max-reclaim-leases"
-        S_MAX_RECLAIM_TIME = 139,                // "max-reclaim-time"
-        S_UNWARNED_RECLAIM_CYCLES = 140,         // "unwarned-reclaim-cycles"
-        S_DHCP4O6_PORT = 141,                    // "dhcp4o6-port"
-        S_DHCP_MULTI_THREADING = 142,            // "multi-threading"
-        S_ENABLE_MULTI_THREADING = 143,          // "enable-multi-threading"
-        S_THREAD_POOL_SIZE = 144,                // "thread-pool-size"
-        S_PACKET_QUEUE_SIZE = 145,               // "packet-queue-size"
-        S_CONTROL_SOCKET = 146,                  // "control-socket"
-        S_SOCKET_TYPE = 147,                     // "socket-type"
-        S_SOCKET_NAME = 148,                     // "socket-name"
-        S_DHCP_QUEUE_CONTROL = 149,              // "dhcp-queue-control"
-        S_ENABLE_QUEUE = 150,                    // "enable-queue"
-        S_QUEUE_TYPE = 151,                      // "queue-type"
-        S_CAPACITY = 152,                        // "capacity"
-        S_DHCP_DDNS = 153,                       // "dhcp-ddns"
-        S_ENABLE_UPDATES = 154,                  // "enable-updates"
-        S_QUALIFYING_SUFFIX = 155,               // "qualifying-suffix"
-        S_SERVER_IP = 156,                       // "server-ip"
-        S_SERVER_PORT = 157,                     // "server-port"
-        S_SENDER_IP = 158,                       // "sender-ip"
-        S_SENDER_PORT = 159,                     // "sender-port"
-        S_MAX_QUEUE_SIZE = 160,                  // "max-queue-size"
-        S_NCR_PROTOCOL = 161,                    // "ncr-protocol"
-        S_NCR_FORMAT = 162,                      // "ncr-format"
-        S_OVERRIDE_NO_UPDATE = 163,              // "override-no-update"
-        S_OVERRIDE_CLIENT_UPDATE = 164,          // "override-client-update"
-        S_REPLACE_CLIENT_NAME = 165,             // "replace-client-name"
-        S_GENERATED_PREFIX = 166,                // "generated-prefix"
-        S_TCP = 167,                             // "tcp"
-        S_JSON = 168,                            // "JSON"
-        S_WHEN_PRESENT = 169,                    // "when-present"
-        S_NEVER = 170,                           // "never"
-        S_ALWAYS = 171,                          // "always"
-        S_WHEN_NOT_PRESENT = 172,                // "when-not-present"
-        S_HOSTNAME_CHAR_SET = 173,               // "hostname-char-set"
-        S_HOSTNAME_CHAR_REPLACEMENT = 174,       // "hostname-char-replacement"
-        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 175, // "early-global-reservations-lookup"
-        S_IP_RESERVATIONS_UNIQUE = 176,          // "ip-reservations-unique"
-        S_RESERVATIONS_LOOKUP_FIRST = 177,       // "reservations-lookup-first"
-        S_LOGGERS = 178,                         // "loggers"
-        S_OUTPUT_OPTIONS = 179,                  // "output_options"
-        S_OUTPUT = 180,                          // "output"
-        S_DEBUGLEVEL = 181,                      // "debuglevel"
-        S_SEVERITY = 182,                        // "severity"
-        S_FLUSH = 183,                           // "flush"
-        S_MAXSIZE = 184,                         // "maxsize"
-        S_MAXVER = 185,                          // "maxver"
-        S_PATTERN = 186,                         // "pattern"
-        S_COMPATIBILITY = 187,                   // "compatibility"
-        S_LENIENT_OPTION_PARSING = 188,          // "lenient-option-parsing"
-        S_TOPLEVEL_JSON = 189,                   // TOPLEVEL_JSON
-        S_TOPLEVEL_DHCP4 = 190,                  // TOPLEVEL_DHCP4
-        S_SUB_DHCP4 = 191,                       // SUB_DHCP4
-        S_SUB_INTERFACES4 = 192,                 // SUB_INTERFACES4
-        S_SUB_SUBNET4 = 193,                     // SUB_SUBNET4
-        S_SUB_POOL4 = 194,                       // SUB_POOL4
-        S_SUB_RESERVATION = 195,                 // SUB_RESERVATION
-        S_SUB_OPTION_DEFS = 196,                 // SUB_OPTION_DEFS
-        S_SUB_OPTION_DEF = 197,                  // SUB_OPTION_DEF
-        S_SUB_OPTION_DATA = 198,                 // SUB_OPTION_DATA
-        S_SUB_HOOKS_LIBRARY = 199,               // SUB_HOOKS_LIBRARY
-        S_SUB_DHCP_DDNS = 200,                   // SUB_DHCP_DDNS
-        S_SUB_CONFIG_CONTROL = 201,              // SUB_CONFIG_CONTROL
-        S_STRING = 202,                          // "constant string"
-        S_INTEGER = 203,                         // "integer"
-        S_FLOAT = 204,                           // "floating point"
-        S_BOOLEAN = 205,                         // "boolean"
-        S_YYACCEPT = 206,                        // $accept
-        S_start = 207,                           // start
-        S_208_1 = 208,                           // $@1
-        S_209_2 = 209,                           // $@2
-        S_210_3 = 210,                           // $@3
-        S_211_4 = 211,                           // $@4
-        S_212_5 = 212,                           // $@5
-        S_213_6 = 213,                           // $@6
-        S_214_7 = 214,                           // $@7
-        S_215_8 = 215,                           // $@8
-        S_216_9 = 216,                           // $@9
-        S_217_10 = 217,                          // $@10
-        S_218_11 = 218,                          // $@11
-        S_219_12 = 219,                          // $@12
-        S_220_13 = 220,                          // $@13
-        S_value = 221,                           // value
-        S_sub_json = 222,                        // sub_json
-        S_map2 = 223,                            // map2
-        S_224_14 = 224,                          // $@14
-        S_map_value = 225,                       // map_value
-        S_map_content = 226,                     // map_content
-        S_not_empty_map = 227,                   // not_empty_map
-        S_list_generic = 228,                    // list_generic
-        S_229_15 = 229,                          // $@15
-        S_list_content = 230,                    // list_content
-        S_not_empty_list = 231,                  // not_empty_list
-        S_list_strings = 232,                    // list_strings
-        S_233_16 = 233,                          // $@16
-        S_list_strings_content = 234,            // list_strings_content
-        S_not_empty_list_strings = 235,          // not_empty_list_strings
-        S_unknown_map_entry = 236,               // unknown_map_entry
-        S_syntax_map = 237,                      // syntax_map
-        S_238_17 = 238,                          // $@17
-        S_global_object = 239,                   // global_object
-        S_240_18 = 240,                          // $@18
-        S_global_object_comma = 241,             // global_object_comma
-        S_sub_dhcp4 = 242,                       // sub_dhcp4
-        S_243_19 = 243,                          // $@19
-        S_global_params = 244,                   // global_params
-        S_global_param = 245,                    // global_param
-        S_valid_lifetime = 246,                  // valid_lifetime
-        S_min_valid_lifetime = 247,              // min_valid_lifetime
-        S_max_valid_lifetime = 248,              // max_valid_lifetime
-        S_renew_timer = 249,                     // renew_timer
-        S_rebind_timer = 250,                    // rebind_timer
-        S_calculate_tee_times = 251,             // calculate_tee_times
-        S_t1_percent = 252,                      // t1_percent
-        S_t2_percent = 253,                      // t2_percent
-        S_cache_threshold = 254,                 // cache_threshold
-        S_cache_max_age = 255,                   // cache_max_age
-        S_decline_probation_period = 256,        // decline_probation_period
-        S_server_tag = 257,                      // server_tag
-        S_258_20 = 258,                          // $@20
-        S_parked_packet_limit = 259,             // parked_packet_limit
-        S_echo_client_id = 260,                  // echo_client_id
-        S_match_client_id = 261,                 // match_client_id
-        S_authoritative = 262,                   // authoritative
-        S_ddns_send_updates = 263,               // ddns_send_updates
-        S_ddns_override_no_update = 264,         // ddns_override_no_update
-        S_ddns_override_client_update = 265,     // ddns_override_client_update
-        S_ddns_replace_client_name = 266,        // ddns_replace_client_name
-        S_267_21 = 267,                          // $@21
-        S_ddns_replace_client_name_value = 268,  // ddns_replace_client_name_value
-        S_ddns_generated_prefix = 269,           // ddns_generated_prefix
-        S_270_22 = 270,                          // $@22
-        S_ddns_qualifying_suffix = 271,          // ddns_qualifying_suffix
-        S_272_23 = 272,                          // $@23
-        S_ddns_update_on_renew = 273,            // ddns_update_on_renew
-        S_ddns_use_conflict_resolution = 274,    // ddns_use_conflict_resolution
-        S_hostname_char_set = 275,               // hostname_char_set
-        S_276_24 = 276,                          // $@24
-        S_hostname_char_replacement = 277,       // hostname_char_replacement
-        S_278_25 = 278,                          // $@25
-        S_store_extended_info = 279,             // store_extended_info
-        S_statistic_default_sample_count = 280,  // statistic_default_sample_count
-        S_statistic_default_sample_age = 281,    // statistic_default_sample_age
-        S_early_global_reservations_lookup = 282, // early_global_reservations_lookup
-        S_ip_reservations_unique = 283,          // ip_reservations_unique
-        S_reservations_lookup_first = 284,       // reservations_lookup_first
-        S_interfaces_config = 285,               // interfaces_config
-        S_286_26 = 286,                          // $@26
-        S_interfaces_config_params = 287,        // interfaces_config_params
-        S_interfaces_config_param = 288,         // interfaces_config_param
-        S_sub_interfaces4 = 289,                 // sub_interfaces4
-        S_290_27 = 290,                          // $@27
-        S_interfaces_list = 291,                 // interfaces_list
-        S_292_28 = 292,                          // $@28
-        S_dhcp_socket_type = 293,                // dhcp_socket_type
-        S_294_29 = 294,                          // $@29
-        S_socket_type = 295,                     // socket_type
-        S_outbound_interface = 296,              // outbound_interface
-        S_297_30 = 297,                          // $@30
-        S_outbound_interface_value = 298,        // outbound_interface_value
-        S_re_detect = 299,                       // re_detect
-        S_service_sockets_require_all = 300,     // service_sockets_require_all
-        S_service_sockets_retry_wait_time = 301, // service_sockets_retry_wait_time
-        S_service_sockets_max_retries = 302,     // service_sockets_max_retries
-        S_lease_database = 303,                  // lease_database
-        S_304_31 = 304,                          // $@31
-        S_sanity_checks = 305,                   // sanity_checks
-        S_306_32 = 306,                          // $@32
-        S_sanity_checks_params = 307,            // sanity_checks_params
-        S_sanity_checks_param = 308,             // sanity_checks_param
-        S_lease_checks = 309,                    // lease_checks
-        S_310_33 = 310,                          // $@33
-        S_hosts_database = 311,                  // hosts_database
-        S_312_34 = 312,                          // $@34
-        S_hosts_databases = 313,                 // hosts_databases
-        S_314_35 = 314,                          // $@35
-        S_database_list = 315,                   // database_list
-        S_not_empty_database_list = 316,         // not_empty_database_list
-        S_database = 317,                        // database
-        S_318_36 = 318,                          // $@36
-        S_database_map_params = 319,             // database_map_params
-        S_database_map_param = 320,              // database_map_param
-        S_database_type = 321,                   // database_type
-        S_322_37 = 322,                          // $@37
-        S_db_type = 323,                         // db_type
-        S_user = 324,                            // user
-        S_325_38 = 325,                          // $@38
-        S_password = 326,                        // password
-        S_327_39 = 327,                          // $@39
-        S_host = 328,                            // host
-        S_329_40 = 329,                          // $@40
-        S_port = 330,                            // port
-        S_name = 331,                            // name
-        S_332_41 = 332,                          // $@41
-        S_persist = 333,                         // persist
-        S_lfc_interval = 334,                    // lfc_interval
-        S_readonly = 335,                        // readonly
-        S_connect_timeout = 336,                 // connect_timeout
-        S_max_reconnect_tries = 337,             // max_reconnect_tries
-        S_reconnect_wait_time = 338,             // reconnect_wait_time
-        S_on_fail = 339,                         // on_fail
-        S_340_42 = 340,                          // $@42
-        S_on_fail_mode = 341,                    // on_fail_mode
-        S_max_row_errors = 342,                  // max_row_errors
-        S_trust_anchor = 343,                    // trust_anchor
-        S_344_43 = 344,                          // $@43
-        S_cert_file = 345,                       // cert_file
-        S_346_44 = 346,                          // $@44
-        S_key_file = 347,                        // key_file
-        S_348_45 = 348,                          // $@45
-        S_cipher_list = 349,                     // cipher_list
-        S_350_46 = 350,                          // $@46
-        S_host_reservation_identifiers = 351,    // host_reservation_identifiers
-        S_352_47 = 352,                          // $@47
-        S_host_reservation_identifiers_list = 353, // host_reservation_identifiers_list
-        S_host_reservation_identifier = 354,     // host_reservation_identifier
-        S_duid_id = 355,                         // duid_id
-        S_hw_address_id = 356,                   // hw_address_id
-        S_circuit_id = 357,                      // circuit_id
-        S_client_id = 358,                       // client_id
-        S_flex_id = 359,                         // flex_id
-        S_dhcp_multi_threading = 360,            // dhcp_multi_threading
-        S_361_48 = 361,                          // $@48
-        S_multi_threading_params = 362,          // multi_threading_params
-        S_multi_threading_param = 363,           // multi_threading_param
-        S_enable_multi_threading = 364,          // enable_multi_threading
-        S_thread_pool_size = 365,                // thread_pool_size
-        S_packet_queue_size = 366,               // packet_queue_size
-        S_hooks_libraries = 367,                 // hooks_libraries
-        S_368_49 = 368,                          // $@49
-        S_hooks_libraries_list = 369,            // hooks_libraries_list
-        S_not_empty_hooks_libraries_list = 370,  // not_empty_hooks_libraries_list
-        S_hooks_library = 371,                   // hooks_library
-        S_372_50 = 372,                          // $@50
-        S_sub_hooks_library = 373,               // sub_hooks_library
-        S_374_51 = 374,                          // $@51
-        S_hooks_params = 375,                    // hooks_params
-        S_hooks_param = 376,                     // hooks_param
-        S_library = 377,                         // library
-        S_378_52 = 378,                          // $@52
-        S_parameters = 379,                      // parameters
-        S_380_53 = 380,                          // $@53
-        S_expired_leases_processing = 381,       // expired_leases_processing
-        S_382_54 = 382,                          // $@54
-        S_expired_leases_params = 383,           // expired_leases_params
-        S_expired_leases_param = 384,            // expired_leases_param
-        S_reclaim_timer_wait_time = 385,         // reclaim_timer_wait_time
-        S_flush_reclaimed_timer_wait_time = 386, // flush_reclaimed_timer_wait_time
-        S_hold_reclaimed_time = 387,             // hold_reclaimed_time
-        S_max_reclaim_leases = 388,              // max_reclaim_leases
-        S_max_reclaim_time = 389,                // max_reclaim_time
-        S_unwarned_reclaim_cycles = 390,         // unwarned_reclaim_cycles
-        S_subnet4_list = 391,                    // subnet4_list
-        S_392_55 = 392,                          // $@55
-        S_subnet4_list_content = 393,            // subnet4_list_content
-        S_not_empty_subnet4_list = 394,          // not_empty_subnet4_list
-        S_subnet4 = 395,                         // subnet4
-        S_396_56 = 396,                          // $@56
-        S_sub_subnet4 = 397,                     // sub_subnet4
-        S_398_57 = 398,                          // $@57
-        S_subnet4_params = 399,                  // subnet4_params
-        S_subnet4_param = 400,                   // subnet4_param
-        S_subnet = 401,                          // subnet
-        S_402_58 = 402,                          // $@58
-        S_subnet_4o6_interface = 403,            // subnet_4o6_interface
-        S_404_59 = 404,                          // $@59
-        S_subnet_4o6_interface_id = 405,         // subnet_4o6_interface_id
-        S_406_60 = 406,                          // $@60
-        S_subnet_4o6_subnet = 407,               // subnet_4o6_subnet
-        S_408_61 = 408,                          // $@61
-        S_interface = 409,                       // interface
-        S_410_62 = 410,                          // $@62
-        S_client_class = 411,                    // client_class
-        S_412_63 = 412,                          // $@63
-        S_require_client_classes = 413,          // require_client_classes
-        S_414_64 = 414,                          // $@64
-        S_reservations_global = 415,             // reservations_global
-        S_reservations_in_subnet = 416,          // reservations_in_subnet
-        S_reservations_out_of_pool = 417,        // reservations_out_of_pool
-        S_reservation_mode = 418,                // reservation_mode
-        S_419_65 = 419,                          // $@65
-        S_hr_mode = 420,                         // hr_mode
-        S_id = 421,                              // id
-        S_shared_networks = 422,                 // shared_networks
-        S_423_66 = 423,                          // $@66
-        S_shared_networks_content = 424,         // shared_networks_content
-        S_shared_networks_list = 425,            // shared_networks_list
-        S_shared_network = 426,                  // shared_network
-        S_427_67 = 427,                          // $@67
-        S_shared_network_params = 428,           // shared_network_params
-        S_shared_network_param = 429,            // shared_network_param
-        S_option_def_list = 430,                 // option_def_list
-        S_431_68 = 431,                          // $@68
-        S_sub_option_def_list = 432,             // sub_option_def_list
-        S_433_69 = 433,                          // $@69
-        S_option_def_list_content = 434,         // option_def_list_content
-        S_not_empty_option_def_list = 435,       // not_empty_option_def_list
-        S_option_def_entry = 436,                // option_def_entry
-        S_437_70 = 437,                          // $@70
-        S_sub_option_def = 438,                  // sub_option_def
-        S_439_71 = 439,                          // $@71
-        S_option_def_params = 440,               // option_def_params
-        S_not_empty_option_def_params = 441,     // not_empty_option_def_params
-        S_option_def_param = 442,                // option_def_param
-        S_option_def_name = 443,                 // option_def_name
-        S_code = 444,                            // code
-        S_option_def_code = 445,                 // option_def_code
-        S_option_def_type = 446,                 // option_def_type
-        S_447_72 = 447,                          // $@72
-        S_option_def_record_types = 448,         // option_def_record_types
-        S_449_73 = 449,                          // $@73
-        S_space = 450,                           // space
-        S_451_74 = 451,                          // $@74
-        S_option_def_space = 452,                // option_def_space
-        S_option_def_encapsulate = 453,          // option_def_encapsulate
-        S_454_75 = 454,                          // $@75
-        S_option_def_array = 455,                // option_def_array
-        S_option_data_list = 456,                // option_data_list
-        S_457_76 = 457,                          // $@76
-        S_option_data_list_content = 458,        // option_data_list_content
-        S_not_empty_option_data_list = 459,      // not_empty_option_data_list
-        S_option_data_entry = 460,               // option_data_entry
-        S_461_77 = 461,                          // $@77
-        S_sub_option_data = 462,                 // sub_option_data
-        S_463_78 = 463,                          // $@78
-        S_option_data_params = 464,              // option_data_params
-        S_not_empty_option_data_params = 465,    // not_empty_option_data_params
-        S_option_data_param = 466,               // option_data_param
-        S_option_data_name = 467,                // option_data_name
-        S_option_data_data = 468,                // option_data_data
-        S_469_79 = 469,                          // $@79
-        S_option_data_code = 470,                // option_data_code
-        S_option_data_space = 471,               // option_data_space
-        S_option_data_csv_format = 472,          // option_data_csv_format
-        S_option_data_always_send = 473,         // option_data_always_send
-        S_pools_list = 474,                      // pools_list
-        S_475_80 = 475,                          // $@80
-        S_pools_list_content = 476,              // pools_list_content
-        S_not_empty_pools_list = 477,            // not_empty_pools_list
-        S_pool_list_entry = 478,                 // pool_list_entry
-        S_479_81 = 479,                          // $@81
-        S_sub_pool4 = 480,                       // sub_pool4
-        S_481_82 = 481,                          // $@82
-        S_pool_params = 482,                     // pool_params
-        S_pool_param = 483,                      // pool_param
-        S_pool_entry = 484,                      // pool_entry
-        S_485_83 = 485,                          // $@83
-        S_user_context = 486,                    // user_context
-        S_487_84 = 487,                          // $@84
-        S_comment = 488,                         // comment
-        S_489_85 = 489,                          // $@85
-        S_reservations = 490,                    // reservations
-        S_491_86 = 491,                          // $@86
-        S_reservations_list = 492,               // reservations_list
-        S_not_empty_reservations_list = 493,     // not_empty_reservations_list
-        S_reservation = 494,                     // reservation
-        S_495_87 = 495,                          // $@87
-        S_sub_reservation = 496,                 // sub_reservation
-        S_497_88 = 497,                          // $@88
-        S_reservation_params = 498,              // reservation_params
-        S_not_empty_reservation_params = 499,    // not_empty_reservation_params
-        S_reservation_param = 500,               // reservation_param
-        S_next_server = 501,                     // next_server
-        S_502_89 = 502,                          // $@89
-        S_server_hostname = 503,                 // server_hostname
-        S_504_90 = 504,                          // $@90
-        S_boot_file_name = 505,                  // boot_file_name
-        S_506_91 = 506,                          // $@91
-        S_ip_address = 507,                      // ip_address
-        S_508_92 = 508,                          // $@92
-        S_ip_addresses = 509,                    // ip_addresses
-        S_510_93 = 510,                          // $@93
-        S_duid = 511,                            // duid
-        S_512_94 = 512,                          // $@94
-        S_hw_address = 513,                      // hw_address
-        S_514_95 = 514,                          // $@95
-        S_client_id_value = 515,                 // client_id_value
-        S_516_96 = 516,                          // $@96
-        S_circuit_id_value = 517,                // circuit_id_value
-        S_518_97 = 518,                          // $@97
-        S_flex_id_value = 519,                   // flex_id_value
-        S_520_98 = 520,                          // $@98
-        S_hostname = 521,                        // hostname
-        S_522_99 = 522,                          // $@99
-        S_reservation_client_classes = 523,      // reservation_client_classes
-        S_524_100 = 524,                         // $@100
-        S_relay = 525,                           // relay
-        S_526_101 = 526,                         // $@101
-        S_relay_map = 527,                       // relay_map
-        S_client_classes = 528,                  // client_classes
-        S_529_102 = 529,                         // $@102
-        S_client_classes_list = 530,             // client_classes_list
-        S_client_class_entry = 531,              // client_class_entry
-        S_532_103 = 532,                         // $@103
-        S_client_class_params = 533,             // client_class_params
-        S_not_empty_client_class_params = 534,   // not_empty_client_class_params
-        S_client_class_param = 535,              // client_class_param
-        S_client_class_name = 536,               // client_class_name
-        S_client_class_test = 537,               // client_class_test
-        S_538_104 = 538,                         // $@104
-        S_only_if_required = 539,                // only_if_required
-        S_dhcp4o6_port = 540,                    // dhcp4o6_port
-        S_control_socket = 541,                  // control_socket
-        S_542_105 = 542,                         // $@105
-        S_control_socket_params = 543,           // control_socket_params
-        S_control_socket_param = 544,            // control_socket_param
-        S_control_socket_type = 545,             // control_socket_type
-        S_546_106 = 546,                         // $@106
-        S_control_socket_name = 547,             // control_socket_name
-        S_548_107 = 548,                         // $@107
-        S_dhcp_queue_control = 549,              // dhcp_queue_control
-        S_550_108 = 550,                         // $@108
-        S_queue_control_params = 551,            // queue_control_params
-        S_queue_control_param = 552,             // queue_control_param
-        S_enable_queue = 553,                    // enable_queue
-        S_queue_type = 554,                      // queue_type
-        S_555_109 = 555,                         // $@109
-        S_capacity = 556,                        // capacity
-        S_arbitrary_map_entry = 557,             // arbitrary_map_entry
-        S_558_110 = 558,                         // $@110
-        S_dhcp_ddns = 559,                       // dhcp_ddns
-        S_560_111 = 560,                         // $@111
-        S_sub_dhcp_ddns = 561,                   // sub_dhcp_ddns
-        S_562_112 = 562,                         // $@112
-        S_dhcp_ddns_params = 563,                // dhcp_ddns_params
-        S_dhcp_ddns_param = 564,                 // dhcp_ddns_param
-        S_enable_updates = 565,                  // enable_updates
-        S_server_ip = 566,                       // server_ip
-        S_567_113 = 567,                         // $@113
-        S_server_port = 568,                     // server_port
-        S_sender_ip = 569,                       // sender_ip
-        S_570_114 = 570,                         // $@114
-        S_sender_port = 571,                     // sender_port
-        S_max_queue_size = 572,                  // max_queue_size
-        S_ncr_protocol = 573,                    // ncr_protocol
-        S_574_115 = 574,                         // $@115
-        S_ncr_protocol_value = 575,              // ncr_protocol_value
-        S_ncr_format = 576,                      // ncr_format
-        S_577_116 = 577,                         // $@116
-        S_dep_qualifying_suffix = 578,           // dep_qualifying_suffix
-        S_579_117 = 579,                         // $@117
-        S_dep_override_no_update = 580,          // dep_override_no_update
-        S_dep_override_client_update = 581,      // dep_override_client_update
-        S_dep_replace_client_name = 582,         // dep_replace_client_name
-        S_583_118 = 583,                         // $@118
-        S_dep_generated_prefix = 584,            // dep_generated_prefix
-        S_585_119 = 585,                         // $@119
-        S_dep_hostname_char_set = 586,           // dep_hostname_char_set
-        S_587_120 = 587,                         // $@120
-        S_dep_hostname_char_replacement = 588,   // dep_hostname_char_replacement
-        S_589_121 = 589,                         // $@121
-        S_config_control = 590,                  // config_control
-        S_591_122 = 591,                         // $@122
-        S_sub_config_control = 592,              // sub_config_control
-        S_593_123 = 593,                         // $@123
-        S_config_control_params = 594,           // config_control_params
-        S_config_control_param = 595,            // config_control_param
-        S_config_databases = 596,                // config_databases
-        S_597_124 = 597,                         // $@124
-        S_config_fetch_wait_time = 598,          // config_fetch_wait_time
-        S_loggers = 599,                         // loggers
-        S_600_125 = 600,                         // $@125
-        S_loggers_entries = 601,                 // loggers_entries
-        S_logger_entry = 602,                    // logger_entry
-        S_603_126 = 603,                         // $@126
-        S_logger_params = 604,                   // logger_params
-        S_logger_param = 605,                    // logger_param
-        S_debuglevel = 606,                      // debuglevel
-        S_severity = 607,                        // severity
-        S_608_127 = 608,                         // $@127
-        S_output_options_list = 609,             // output_options_list
-        S_610_128 = 610,                         // $@128
-        S_output_options_list_content = 611,     // output_options_list_content
-        S_output_entry = 612,                    // output_entry
-        S_613_129 = 613,                         // $@129
-        S_output_params_list = 614,              // output_params_list
-        S_output_params = 615,                   // output_params
-        S_output = 616,                          // output
-        S_617_130 = 617,                         // $@130
-        S_flush = 618,                           // flush
-        S_maxsize = 619,                         // maxsize
-        S_maxver = 620,                          // maxver
-        S_pattern = 621,                         // pattern
-        S_622_131 = 622,                         // $@131
-        S_compatibility = 623,                   // compatibility
-        S_624_132 = 624,                         // $@132
-        S_compatibility_params = 625,            // compatibility_params
-        S_compatibility_param = 626,             // compatibility_param
-        S_lenient_option_parsing = 627           // lenient_option_parsing
+        S_READ_TIMEOUT = 49,                     // "read-timeout"
+        S_WRITE_TIMEOUT = 50,                    // "write-timeout"
+        S_TCP_USER_TIMEOUT = 51,                 // "tcp-user-timeout"
+        S_MAX_RECONNECT_TRIES = 52,              // "max-reconnect-tries"
+        S_RECONNECT_WAIT_TIME = 53,              // "reconnect-wait-time"
+        S_ON_FAIL = 54,                          // "on-fail"
+        S_STOP_RETRY_EXIT = 55,                  // "stop-retry-exit"
+        S_SERVE_RETRY_EXIT = 56,                 // "serve-retry-exit"
+        S_SERVE_RETRY_CONTINUE = 57,             // "serve-retry-continue"
+        S_MAX_ROW_ERRORS = 58,                   // "max-row-errors"
+        S_TRUST_ANCHOR = 59,                     // "trust-anchor"
+        S_CERT_FILE = 60,                        // "cert-file"
+        S_KEY_FILE = 61,                         // "key-file"
+        S_CIPHER_LIST = 62,                      // "cipher-list"
+        S_VALID_LIFETIME = 63,                   // "valid-lifetime"
+        S_MIN_VALID_LIFETIME = 64,               // "min-valid-lifetime"
+        S_MAX_VALID_LIFETIME = 65,               // "max-valid-lifetime"
+        S_RENEW_TIMER = 66,                      // "renew-timer"
+        S_REBIND_TIMER = 67,                     // "rebind-timer"
+        S_CALCULATE_TEE_TIMES = 68,              // "calculate-tee-times"
+        S_T1_PERCENT = 69,                       // "t1-percent"
+        S_T2_PERCENT = 70,                       // "t2-percent"
+        S_CACHE_THRESHOLD = 71,                  // "cache-threshold"
+        S_CACHE_MAX_AGE = 72,                    // "cache-max-age"
+        S_DECLINE_PROBATION_PERIOD = 73,         // "decline-probation-period"
+        S_SERVER_TAG = 74,                       // "server-tag"
+        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 75,   // "statistic-default-sample-count"
+        S_STATISTIC_DEFAULT_SAMPLE_AGE = 76,     // "statistic-default-sample-age"
+        S_DDNS_SEND_UPDATES = 77,                // "ddns-send-updates"
+        S_DDNS_OVERRIDE_NO_UPDATE = 78,          // "ddns-override-no-update"
+        S_DDNS_OVERRIDE_CLIENT_UPDATE = 79,      // "ddns-override-client-update"
+        S_DDNS_REPLACE_CLIENT_NAME = 80,         // "ddns-replace-client-name"
+        S_DDNS_GENERATED_PREFIX = 81,            // "ddns-generated-prefix"
+        S_DDNS_QUALIFYING_SUFFIX = 82,           // "ddns-qualifying-suffix"
+        S_DDNS_UPDATE_ON_RENEW = 83,             // "ddns-update-on-renew"
+        S_DDNS_USE_CONFLICT_RESOLUTION = 84,     // "ddns-use-conflict-resolution"
+        S_STORE_EXTENDED_INFO = 85,              // "store-extended-info"
+        S_SUBNET4 = 86,                          // "subnet4"
+        S_SUBNET_4O6_INTERFACE = 87,             // "4o6-interface"
+        S_SUBNET_4O6_INTERFACE_ID = 88,          // "4o6-interface-id"
+        S_SUBNET_4O6_SUBNET = 89,                // "4o6-subnet"
+        S_OPTION_DEF = 90,                       // "option-def"
+        S_OPTION_DATA = 91,                      // "option-data"
+        S_NAME = 92,                             // "name"
+        S_DATA = 93,                             // "data"
+        S_CODE = 94,                             // "code"
+        S_SPACE = 95,                            // "space"
+        S_CSV_FORMAT = 96,                       // "csv-format"
+        S_ALWAYS_SEND = 97,                      // "always-send"
+        S_RECORD_TYPES = 98,                     // "record-types"
+        S_ENCAPSULATE = 99,                      // "encapsulate"
+        S_ARRAY = 100,                           // "array"
+        S_PARKED_PACKET_LIMIT = 101,             // "parked-packet-limit"
+        S_SHARED_NETWORKS = 102,                 // "shared-networks"
+        S_POOLS = 103,                           // "pools"
+        S_POOL = 104,                            // "pool"
+        S_USER_CONTEXT = 105,                    // "user-context"
+        S_COMMENT = 106,                         // "comment"
+        S_SUBNET = 107,                          // "subnet"
+        S_INTERFACE = 108,                       // "interface"
+        S_ID = 109,                              // "id"
+        S_RESERVATION_MODE = 110,                // "reservation-mode"
+        S_DISABLED = 111,                        // "disabled"
+        S_OUT_OF_POOL = 112,                     // "out-of-pool"
+        S_GLOBAL = 113,                          // "global"
+        S_ALL = 114,                             // "all"
+        S_RESERVATIONS_GLOBAL = 115,             // "reservations-global"
+        S_RESERVATIONS_IN_SUBNET = 116,          // "reservations-in-subnet"
+        S_RESERVATIONS_OUT_OF_POOL = 117,        // "reservations-out-of-pool"
+        S_HOST_RESERVATION_IDENTIFIERS = 118,    // "host-reservation-identifiers"
+        S_CLIENT_CLASSES = 119,                  // "client-classes"
+        S_REQUIRE_CLIENT_CLASSES = 120,          // "require-client-classes"
+        S_TEST = 121,                            // "test"
+        S_ONLY_IF_REQUIRED = 122,                // "only-if-required"
+        S_CLIENT_CLASS = 123,                    // "client-class"
+        S_RESERVATIONS = 124,                    // "reservations"
+        S_DUID = 125,                            // "duid"
+        S_HW_ADDRESS = 126,                      // "hw-address"
+        S_CIRCUIT_ID = 127,                      // "circuit-id"
+        S_CLIENT_ID = 128,                       // "client-id"
+        S_HOSTNAME = 129,                        // "hostname"
+        S_FLEX_ID = 130,                         // "flex-id"
+        S_RELAY = 131,                           // "relay"
+        S_IP_ADDRESS = 132,                      // "ip-address"
+        S_IP_ADDRESSES = 133,                    // "ip-addresses"
+        S_HOOKS_LIBRARIES = 134,                 // "hooks-libraries"
+        S_LIBRARY = 135,                         // "library"
+        S_PARAMETERS = 136,                      // "parameters"
+        S_EXPIRED_LEASES_PROCESSING = 137,       // "expired-leases-processing"
+        S_RECLAIM_TIMER_WAIT_TIME = 138,         // "reclaim-timer-wait-time"
+        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 139, // "flush-reclaimed-timer-wait-time"
+        S_HOLD_RECLAIMED_TIME = 140,             // "hold-reclaimed-time"
+        S_MAX_RECLAIM_LEASES = 141,              // "max-reclaim-leases"
+        S_MAX_RECLAIM_TIME = 142,                // "max-reclaim-time"
+        S_UNWARNED_RECLAIM_CYCLES = 143,         // "unwarned-reclaim-cycles"
+        S_DHCP4O6_PORT = 144,                    // "dhcp4o6-port"
+        S_DHCP_MULTI_THREADING = 145,            // "multi-threading"
+        S_ENABLE_MULTI_THREADING = 146,          // "enable-multi-threading"
+        S_THREAD_POOL_SIZE = 147,                // "thread-pool-size"
+        S_PACKET_QUEUE_SIZE = 148,               // "packet-queue-size"
+        S_CONTROL_SOCKET = 149,                  // "control-socket"
+        S_SOCKET_TYPE = 150,                     // "socket-type"
+        S_SOCKET_NAME = 151,                     // "socket-name"
+        S_DHCP_QUEUE_CONTROL = 152,              // "dhcp-queue-control"
+        S_ENABLE_QUEUE = 153,                    // "enable-queue"
+        S_QUEUE_TYPE = 154,                      // "queue-type"
+        S_CAPACITY = 155,                        // "capacity"
+        S_DHCP_DDNS = 156,                       // "dhcp-ddns"
+        S_ENABLE_UPDATES = 157,                  // "enable-updates"
+        S_QUALIFYING_SUFFIX = 158,               // "qualifying-suffix"
+        S_SERVER_IP = 159,                       // "server-ip"
+        S_SERVER_PORT = 160,                     // "server-port"
+        S_SENDER_IP = 161,                       // "sender-ip"
+        S_SENDER_PORT = 162,                     // "sender-port"
+        S_MAX_QUEUE_SIZE = 163,                  // "max-queue-size"
+        S_NCR_PROTOCOL = 164,                    // "ncr-protocol"
+        S_NCR_FORMAT = 165,                      // "ncr-format"
+        S_OVERRIDE_NO_UPDATE = 166,              // "override-no-update"
+        S_OVERRIDE_CLIENT_UPDATE = 167,          // "override-client-update"
+        S_REPLACE_CLIENT_NAME = 168,             // "replace-client-name"
+        S_GENERATED_PREFIX = 169,                // "generated-prefix"
+        S_TCP = 170,                             // "tcp"
+        S_JSON = 171,                            // "JSON"
+        S_WHEN_PRESENT = 172,                    // "when-present"
+        S_NEVER = 173,                           // "never"
+        S_ALWAYS = 174,                          // "always"
+        S_WHEN_NOT_PRESENT = 175,                // "when-not-present"
+        S_HOSTNAME_CHAR_SET = 176,               // "hostname-char-set"
+        S_HOSTNAME_CHAR_REPLACEMENT = 177,       // "hostname-char-replacement"
+        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 178, // "early-global-reservations-lookup"
+        S_IP_RESERVATIONS_UNIQUE = 179,          // "ip-reservations-unique"
+        S_RESERVATIONS_LOOKUP_FIRST = 180,       // "reservations-lookup-first"
+        S_LOGGERS = 181,                         // "loggers"
+        S_OUTPUT_OPTIONS = 182,                  // "output_options"
+        S_OUTPUT = 183,                          // "output"
+        S_DEBUGLEVEL = 184,                      // "debuglevel"
+        S_SEVERITY = 185,                        // "severity"
+        S_FLUSH = 186,                           // "flush"
+        S_MAXSIZE = 187,                         // "maxsize"
+        S_MAXVER = 188,                          // "maxver"
+        S_PATTERN = 189,                         // "pattern"
+        S_COMPATIBILITY = 190,                   // "compatibility"
+        S_LENIENT_OPTION_PARSING = 191,          // "lenient-option-parsing"
+        S_TOPLEVEL_JSON = 192,                   // TOPLEVEL_JSON
+        S_TOPLEVEL_DHCP4 = 193,                  // TOPLEVEL_DHCP4
+        S_SUB_DHCP4 = 194,                       // SUB_DHCP4
+        S_SUB_INTERFACES4 = 195,                 // SUB_INTERFACES4
+        S_SUB_SUBNET4 = 196,                     // SUB_SUBNET4
+        S_SUB_POOL4 = 197,                       // SUB_POOL4
+        S_SUB_RESERVATION = 198,                 // SUB_RESERVATION
+        S_SUB_OPTION_DEFS = 199,                 // SUB_OPTION_DEFS
+        S_SUB_OPTION_DEF = 200,                  // SUB_OPTION_DEF
+        S_SUB_OPTION_DATA = 201,                 // SUB_OPTION_DATA
+        S_SUB_HOOKS_LIBRARY = 202,               // SUB_HOOKS_LIBRARY
+        S_SUB_DHCP_DDNS = 203,                   // SUB_DHCP_DDNS
+        S_SUB_CONFIG_CONTROL = 204,              // SUB_CONFIG_CONTROL
+        S_STRING = 205,                          // "constant string"
+        S_INTEGER = 206,                         // "integer"
+        S_FLOAT = 207,                           // "floating point"
+        S_BOOLEAN = 208,                         // "boolean"
+        S_YYACCEPT = 209,                        // $accept
+        S_start = 210,                           // start
+        S_211_1 = 211,                           // $@1
+        S_212_2 = 212,                           // $@2
+        S_213_3 = 213,                           // $@3
+        S_214_4 = 214,                           // $@4
+        S_215_5 = 215,                           // $@5
+        S_216_6 = 216,                           // $@6
+        S_217_7 = 217,                           // $@7
+        S_218_8 = 218,                           // $@8
+        S_219_9 = 219,                           // $@9
+        S_220_10 = 220,                          // $@10
+        S_221_11 = 221,                          // $@11
+        S_222_12 = 222,                          // $@12
+        S_223_13 = 223,                          // $@13
+        S_value = 224,                           // value
+        S_sub_json = 225,                        // sub_json
+        S_map2 = 226,                            // map2
+        S_227_14 = 227,                          // $@14
+        S_map_value = 228,                       // map_value
+        S_map_content = 229,                     // map_content
+        S_not_empty_map = 230,                   // not_empty_map
+        S_list_generic = 231,                    // list_generic
+        S_232_15 = 232,                          // $@15
+        S_list_content = 233,                    // list_content
+        S_not_empty_list = 234,                  // not_empty_list
+        S_list_strings = 235,                    // list_strings
+        S_236_16 = 236,                          // $@16
+        S_list_strings_content = 237,            // list_strings_content
+        S_not_empty_list_strings = 238,          // not_empty_list_strings
+        S_unknown_map_entry = 239,               // unknown_map_entry
+        S_syntax_map = 240,                      // syntax_map
+        S_241_17 = 241,                          // $@17
+        S_global_object = 242,                   // global_object
+        S_243_18 = 243,                          // $@18
+        S_global_object_comma = 244,             // global_object_comma
+        S_sub_dhcp4 = 245,                       // sub_dhcp4
+        S_246_19 = 246,                          // $@19
+        S_global_params = 247,                   // global_params
+        S_global_param = 248,                    // global_param
+        S_valid_lifetime = 249,                  // valid_lifetime
+        S_min_valid_lifetime = 250,              // min_valid_lifetime
+        S_max_valid_lifetime = 251,              // max_valid_lifetime
+        S_renew_timer = 252,                     // renew_timer
+        S_rebind_timer = 253,                    // rebind_timer
+        S_calculate_tee_times = 254,             // calculate_tee_times
+        S_t1_percent = 255,                      // t1_percent
+        S_t2_percent = 256,                      // t2_percent
+        S_cache_threshold = 257,                 // cache_threshold
+        S_cache_max_age = 258,                   // cache_max_age
+        S_decline_probation_period = 259,        // decline_probation_period
+        S_server_tag = 260,                      // server_tag
+        S_261_20 = 261,                          // $@20
+        S_parked_packet_limit = 262,             // parked_packet_limit
+        S_echo_client_id = 263,                  // echo_client_id
+        S_match_client_id = 264,                 // match_client_id
+        S_authoritative = 265,                   // authoritative
+        S_ddns_send_updates = 266,               // ddns_send_updates
+        S_ddns_override_no_update = 267,         // ddns_override_no_update
+        S_ddns_override_client_update = 268,     // ddns_override_client_update
+        S_ddns_replace_client_name = 269,        // ddns_replace_client_name
+        S_270_21 = 270,                          // $@21
+        S_ddns_replace_client_name_value = 271,  // ddns_replace_client_name_value
+        S_ddns_generated_prefix = 272,           // ddns_generated_prefix
+        S_273_22 = 273,                          // $@22
+        S_ddns_qualifying_suffix = 274,          // ddns_qualifying_suffix
+        S_275_23 = 275,                          // $@23
+        S_ddns_update_on_renew = 276,            // ddns_update_on_renew
+        S_ddns_use_conflict_resolution = 277,    // ddns_use_conflict_resolution
+        S_hostname_char_set = 278,               // hostname_char_set
+        S_279_24 = 279,                          // $@24
+        S_hostname_char_replacement = 280,       // hostname_char_replacement
+        S_281_25 = 281,                          // $@25
+        S_store_extended_info = 282,             // store_extended_info
+        S_statistic_default_sample_count = 283,  // statistic_default_sample_count
+        S_statistic_default_sample_age = 284,    // statistic_default_sample_age
+        S_early_global_reservations_lookup = 285, // early_global_reservations_lookup
+        S_ip_reservations_unique = 286,          // ip_reservations_unique
+        S_reservations_lookup_first = 287,       // reservations_lookup_first
+        S_interfaces_config = 288,               // interfaces_config
+        S_289_26 = 289,                          // $@26
+        S_interfaces_config_params = 290,        // interfaces_config_params
+        S_interfaces_config_param = 291,         // interfaces_config_param
+        S_sub_interfaces4 = 292,                 // sub_interfaces4
+        S_293_27 = 293,                          // $@27
+        S_interfaces_list = 294,                 // interfaces_list
+        S_295_28 = 295,                          // $@28
+        S_dhcp_socket_type = 296,                // dhcp_socket_type
+        S_297_29 = 297,                          // $@29
+        S_socket_type = 298,                     // socket_type
+        S_outbound_interface = 299,              // outbound_interface
+        S_300_30 = 300,                          // $@30
+        S_outbound_interface_value = 301,        // outbound_interface_value
+        S_re_detect = 302,                       // re_detect
+        S_service_sockets_require_all = 303,     // service_sockets_require_all
+        S_service_sockets_retry_wait_time = 304, // service_sockets_retry_wait_time
+        S_service_sockets_max_retries = 305,     // service_sockets_max_retries
+        S_lease_database = 306,                  // lease_database
+        S_307_31 = 307,                          // $@31
+        S_sanity_checks = 308,                   // sanity_checks
+        S_309_32 = 309,                          // $@32
+        S_sanity_checks_params = 310,            // sanity_checks_params
+        S_sanity_checks_param = 311,             // sanity_checks_param
+        S_lease_checks = 312,                    // lease_checks
+        S_313_33 = 313,                          // $@33
+        S_hosts_database = 314,                  // hosts_database
+        S_315_34 = 315,                          // $@34
+        S_hosts_databases = 316,                 // hosts_databases
+        S_317_35 = 317,                          // $@35
+        S_database_list = 318,                   // database_list
+        S_not_empty_database_list = 319,         // not_empty_database_list
+        S_database = 320,                        // database
+        S_321_36 = 321,                          // $@36
+        S_database_map_params = 322,             // database_map_params
+        S_database_map_param = 323,              // database_map_param
+        S_database_type = 324,                   // database_type
+        S_325_37 = 325,                          // $@37
+        S_db_type = 326,                         // db_type
+        S_user = 327,                            // user
+        S_328_38 = 328,                          // $@38
+        S_password = 329,                        // password
+        S_330_39 = 330,                          // $@39
+        S_host = 331,                            // host
+        S_332_40 = 332,                          // $@40
+        S_port = 333,                            // port
+        S_name = 334,                            // name
+        S_335_41 = 335,                          // $@41
+        S_persist = 336,                         // persist
+        S_lfc_interval = 337,                    // lfc_interval
+        S_readonly = 338,                        // readonly
+        S_connect_timeout = 339,                 // connect_timeout
+        S_read_timeout = 340,                    // read_timeout
+        S_write_timeout = 341,                   // write_timeout
+        S_tcp_user_timeout = 342,                // tcp_user_timeout
+        S_max_reconnect_tries = 343,             // max_reconnect_tries
+        S_reconnect_wait_time = 344,             // reconnect_wait_time
+        S_on_fail = 345,                         // on_fail
+        S_346_42 = 346,                          // $@42
+        S_on_fail_mode = 347,                    // on_fail_mode
+        S_max_row_errors = 348,                  // max_row_errors
+        S_trust_anchor = 349,                    // trust_anchor
+        S_350_43 = 350,                          // $@43
+        S_cert_file = 351,                       // cert_file
+        S_352_44 = 352,                          // $@44
+        S_key_file = 353,                        // key_file
+        S_354_45 = 354,                          // $@45
+        S_cipher_list = 355,                     // cipher_list
+        S_356_46 = 356,                          // $@46
+        S_host_reservation_identifiers = 357,    // host_reservation_identifiers
+        S_358_47 = 358,                          // $@47
+        S_host_reservation_identifiers_list = 359, // host_reservation_identifiers_list
+        S_host_reservation_identifier = 360,     // host_reservation_identifier
+        S_duid_id = 361,                         // duid_id
+        S_hw_address_id = 362,                   // hw_address_id
+        S_circuit_id = 363,                      // circuit_id
+        S_client_id = 364,                       // client_id
+        S_flex_id = 365,                         // flex_id
+        S_dhcp_multi_threading = 366,            // dhcp_multi_threading
+        S_367_48 = 367,                          // $@48
+        S_multi_threading_params = 368,          // multi_threading_params
+        S_multi_threading_param = 369,           // multi_threading_param
+        S_enable_multi_threading = 370,          // enable_multi_threading
+        S_thread_pool_size = 371,                // thread_pool_size
+        S_packet_queue_size = 372,               // packet_queue_size
+        S_hooks_libraries = 373,                 // hooks_libraries
+        S_374_49 = 374,                          // $@49
+        S_hooks_libraries_list = 375,            // hooks_libraries_list
+        S_not_empty_hooks_libraries_list = 376,  // not_empty_hooks_libraries_list
+        S_hooks_library = 377,                   // hooks_library
+        S_378_50 = 378,                          // $@50
+        S_sub_hooks_library = 379,               // sub_hooks_library
+        S_380_51 = 380,                          // $@51
+        S_hooks_params = 381,                    // hooks_params
+        S_hooks_param = 382,                     // hooks_param
+        S_library = 383,                         // library
+        S_384_52 = 384,                          // $@52
+        S_parameters = 385,                      // parameters
+        S_386_53 = 386,                          // $@53
+        S_expired_leases_processing = 387,       // expired_leases_processing
+        S_388_54 = 388,                          // $@54
+        S_expired_leases_params = 389,           // expired_leases_params
+        S_expired_leases_param = 390,            // expired_leases_param
+        S_reclaim_timer_wait_time = 391,         // reclaim_timer_wait_time
+        S_flush_reclaimed_timer_wait_time = 392, // flush_reclaimed_timer_wait_time
+        S_hold_reclaimed_time = 393,             // hold_reclaimed_time
+        S_max_reclaim_leases = 394,              // max_reclaim_leases
+        S_max_reclaim_time = 395,                // max_reclaim_time
+        S_unwarned_reclaim_cycles = 396,         // unwarned_reclaim_cycles
+        S_subnet4_list = 397,                    // subnet4_list
+        S_398_55 = 398,                          // $@55
+        S_subnet4_list_content = 399,            // subnet4_list_content
+        S_not_empty_subnet4_list = 400,          // not_empty_subnet4_list
+        S_subnet4 = 401,                         // subnet4
+        S_402_56 = 402,                          // $@56
+        S_sub_subnet4 = 403,                     // sub_subnet4
+        S_404_57 = 404,                          // $@57
+        S_subnet4_params = 405,                  // subnet4_params
+        S_subnet4_param = 406,                   // subnet4_param
+        S_subnet = 407,                          // subnet
+        S_408_58 = 408,                          // $@58
+        S_subnet_4o6_interface = 409,            // subnet_4o6_interface
+        S_410_59 = 410,                          // $@59
+        S_subnet_4o6_interface_id = 411,         // subnet_4o6_interface_id
+        S_412_60 = 412,                          // $@60
+        S_subnet_4o6_subnet = 413,               // subnet_4o6_subnet
+        S_414_61 = 414,                          // $@61
+        S_interface = 415,                       // interface
+        S_416_62 = 416,                          // $@62
+        S_client_class = 417,                    // client_class
+        S_418_63 = 418,                          // $@63
+        S_require_client_classes = 419,          // require_client_classes
+        S_420_64 = 420,                          // $@64
+        S_reservations_global = 421,             // reservations_global
+        S_reservations_in_subnet = 422,          // reservations_in_subnet
+        S_reservations_out_of_pool = 423,        // reservations_out_of_pool
+        S_reservation_mode = 424,                // reservation_mode
+        S_425_65 = 425,                          // $@65
+        S_hr_mode = 426,                         // hr_mode
+        S_id = 427,                              // id
+        S_shared_networks = 428,                 // shared_networks
+        S_429_66 = 429,                          // $@66
+        S_shared_networks_content = 430,         // shared_networks_content
+        S_shared_networks_list = 431,            // shared_networks_list
+        S_shared_network = 432,                  // shared_network
+        S_433_67 = 433,                          // $@67
+        S_shared_network_params = 434,           // shared_network_params
+        S_shared_network_param = 435,            // shared_network_param
+        S_option_def_list = 436,                 // option_def_list
+        S_437_68 = 437,                          // $@68
+        S_sub_option_def_list = 438,             // sub_option_def_list
+        S_439_69 = 439,                          // $@69
+        S_option_def_list_content = 440,         // option_def_list_content
+        S_not_empty_option_def_list = 441,       // not_empty_option_def_list
+        S_option_def_entry = 442,                // option_def_entry
+        S_443_70 = 443,                          // $@70
+        S_sub_option_def = 444,                  // sub_option_def
+        S_445_71 = 445,                          // $@71
+        S_option_def_params = 446,               // option_def_params
+        S_not_empty_option_def_params = 447,     // not_empty_option_def_params
+        S_option_def_param = 448,                // option_def_param
+        S_option_def_name = 449,                 // option_def_name
+        S_code = 450,                            // code
+        S_option_def_code = 451,                 // option_def_code
+        S_option_def_type = 452,                 // option_def_type
+        S_453_72 = 453,                          // $@72
+        S_option_def_record_types = 454,         // option_def_record_types
+        S_455_73 = 455,                          // $@73
+        S_space = 456,                           // space
+        S_457_74 = 457,                          // $@74
+        S_option_def_space = 458,                // option_def_space
+        S_option_def_encapsulate = 459,          // option_def_encapsulate
+        S_460_75 = 460,                          // $@75
+        S_option_def_array = 461,                // option_def_array
+        S_option_data_list = 462,                // option_data_list
+        S_463_76 = 463,                          // $@76
+        S_option_data_list_content = 464,        // option_data_list_content
+        S_not_empty_option_data_list = 465,      // not_empty_option_data_list
+        S_option_data_entry = 466,               // option_data_entry
+        S_467_77 = 467,                          // $@77
+        S_sub_option_data = 468,                 // sub_option_data
+        S_469_78 = 469,                          // $@78
+        S_option_data_params = 470,              // option_data_params
+        S_not_empty_option_data_params = 471,    // not_empty_option_data_params
+        S_option_data_param = 472,               // option_data_param
+        S_option_data_name = 473,                // option_data_name
+        S_option_data_data = 474,                // option_data_data
+        S_475_79 = 475,                          // $@79
+        S_option_data_code = 476,                // option_data_code
+        S_option_data_space = 477,               // option_data_space
+        S_option_data_csv_format = 478,          // option_data_csv_format
+        S_option_data_always_send = 479,         // option_data_always_send
+        S_pools_list = 480,                      // pools_list
+        S_481_80 = 481,                          // $@80
+        S_pools_list_content = 482,              // pools_list_content
+        S_not_empty_pools_list = 483,            // not_empty_pools_list
+        S_pool_list_entry = 484,                 // pool_list_entry
+        S_485_81 = 485,                          // $@81
+        S_sub_pool4 = 486,                       // sub_pool4
+        S_487_82 = 487,                          // $@82
+        S_pool_params = 488,                     // pool_params
+        S_pool_param = 489,                      // pool_param
+        S_pool_entry = 490,                      // pool_entry
+        S_491_83 = 491,                          // $@83
+        S_user_context = 492,                    // user_context
+        S_493_84 = 493,                          // $@84
+        S_comment = 494,                         // comment
+        S_495_85 = 495,                          // $@85
+        S_reservations = 496,                    // reservations
+        S_497_86 = 497,                          // $@86
+        S_reservations_list = 498,               // reservations_list
+        S_not_empty_reservations_list = 499,     // not_empty_reservations_list
+        S_reservation = 500,                     // reservation
+        S_501_87 = 501,                          // $@87
+        S_sub_reservation = 502,                 // sub_reservation
+        S_503_88 = 503,                          // $@88
+        S_reservation_params = 504,              // reservation_params
+        S_not_empty_reservation_params = 505,    // not_empty_reservation_params
+        S_reservation_param = 506,               // reservation_param
+        S_next_server = 507,                     // next_server
+        S_508_89 = 508,                          // $@89
+        S_server_hostname = 509,                 // server_hostname
+        S_510_90 = 510,                          // $@90
+        S_boot_file_name = 511,                  // boot_file_name
+        S_512_91 = 512,                          // $@91
+        S_ip_address = 513,                      // ip_address
+        S_514_92 = 514,                          // $@92
+        S_ip_addresses = 515,                    // ip_addresses
+        S_516_93 = 516,                          // $@93
+        S_duid = 517,                            // duid
+        S_518_94 = 518,                          // $@94
+        S_hw_address = 519,                      // hw_address
+        S_520_95 = 520,                          // $@95
+        S_client_id_value = 521,                 // client_id_value
+        S_522_96 = 522,                          // $@96
+        S_circuit_id_value = 523,                // circuit_id_value
+        S_524_97 = 524,                          // $@97
+        S_flex_id_value = 525,                   // flex_id_value
+        S_526_98 = 526,                          // $@98
+        S_hostname = 527,                        // hostname
+        S_528_99 = 528,                          // $@99
+        S_reservation_client_classes = 529,      // reservation_client_classes
+        S_530_100 = 530,                         // $@100
+        S_relay = 531,                           // relay
+        S_532_101 = 532,                         // $@101
+        S_relay_map = 533,                       // relay_map
+        S_client_classes = 534,                  // client_classes
+        S_535_102 = 535,                         // $@102
+        S_client_classes_list = 536,             // client_classes_list
+        S_client_class_entry = 537,              // client_class_entry
+        S_538_103 = 538,                         // $@103
+        S_client_class_params = 539,             // client_class_params
+        S_not_empty_client_class_params = 540,   // not_empty_client_class_params
+        S_client_class_param = 541,              // client_class_param
+        S_client_class_name = 542,               // client_class_name
+        S_client_class_test = 543,               // client_class_test
+        S_544_104 = 544,                         // $@104
+        S_only_if_required = 545,                // only_if_required
+        S_dhcp4o6_port = 546,                    // dhcp4o6_port
+        S_control_socket = 547,                  // control_socket
+        S_548_105 = 548,                         // $@105
+        S_control_socket_params = 549,           // control_socket_params
+        S_control_socket_param = 550,            // control_socket_param
+        S_control_socket_type = 551,             // control_socket_type
+        S_552_106 = 552,                         // $@106
+        S_control_socket_name = 553,             // control_socket_name
+        S_554_107 = 554,                         // $@107
+        S_dhcp_queue_control = 555,              // dhcp_queue_control
+        S_556_108 = 556,                         // $@108
+        S_queue_control_params = 557,            // queue_control_params
+        S_queue_control_param = 558,             // queue_control_param
+        S_enable_queue = 559,                    // enable_queue
+        S_queue_type = 560,                      // queue_type
+        S_561_109 = 561,                         // $@109
+        S_capacity = 562,                        // capacity
+        S_arbitrary_map_entry = 563,             // arbitrary_map_entry
+        S_564_110 = 564,                         // $@110
+        S_dhcp_ddns = 565,                       // dhcp_ddns
+        S_566_111 = 566,                         // $@111
+        S_sub_dhcp_ddns = 567,                   // sub_dhcp_ddns
+        S_568_112 = 568,                         // $@112
+        S_dhcp_ddns_params = 569,                // dhcp_ddns_params
+        S_dhcp_ddns_param = 570,                 // dhcp_ddns_param
+        S_enable_updates = 571,                  // enable_updates
+        S_server_ip = 572,                       // server_ip
+        S_573_113 = 573,                         // $@113
+        S_server_port = 574,                     // server_port
+        S_sender_ip = 575,                       // sender_ip
+        S_576_114 = 576,                         // $@114
+        S_sender_port = 577,                     // sender_port
+        S_max_queue_size = 578,                  // max_queue_size
+        S_ncr_protocol = 579,                    // ncr_protocol
+        S_580_115 = 580,                         // $@115
+        S_ncr_protocol_value = 581,              // ncr_protocol_value
+        S_ncr_format = 582,                      // ncr_format
+        S_583_116 = 583,                         // $@116
+        S_dep_qualifying_suffix = 584,           // dep_qualifying_suffix
+        S_585_117 = 585,                         // $@117
+        S_dep_override_no_update = 586,          // dep_override_no_update
+        S_dep_override_client_update = 587,      // dep_override_client_update
+        S_dep_replace_client_name = 588,         // dep_replace_client_name
+        S_589_118 = 589,                         // $@118
+        S_dep_generated_prefix = 590,            // dep_generated_prefix
+        S_591_119 = 591,                         // $@119
+        S_dep_hostname_char_set = 592,           // dep_hostname_char_set
+        S_593_120 = 593,                         // $@120
+        S_dep_hostname_char_replacement = 594,   // dep_hostname_char_replacement
+        S_595_121 = 595,                         // $@121
+        S_config_control = 596,                  // config_control
+        S_597_122 = 597,                         // $@122
+        S_sub_config_control = 598,              // sub_config_control
+        S_599_123 = 599,                         // $@123
+        S_config_control_params = 600,           // config_control_params
+        S_config_control_param = 601,            // config_control_param
+        S_config_databases = 602,                // config_databases
+        S_603_124 = 603,                         // $@124
+        S_config_fetch_wait_time = 604,          // config_fetch_wait_time
+        S_loggers = 605,                         // loggers
+        S_606_125 = 606,                         // $@125
+        S_loggers_entries = 607,                 // loggers_entries
+        S_logger_entry = 608,                    // logger_entry
+        S_609_126 = 609,                         // $@126
+        S_logger_params = 610,                   // logger_params
+        S_logger_param = 611,                    // logger_param
+        S_debuglevel = 612,                      // debuglevel
+        S_severity = 613,                        // severity
+        S_614_127 = 614,                         // $@127
+        S_output_options_list = 615,             // output_options_list
+        S_616_128 = 616,                         // $@128
+        S_output_options_list_content = 617,     // output_options_list_content
+        S_output_entry = 618,                    // output_entry
+        S_619_129 = 619,                         // $@129
+        S_output_params_list = 620,              // output_params_list
+        S_output_params = 621,                   // output_params
+        S_output = 622,                          // output
+        S_623_130 = 623,                         // $@130
+        S_flush = 624,                           // flush
+        S_maxsize = 625,                         // maxsize
+        S_maxver = 626,                          // maxver
+        S_pattern = 627,                         // pattern
+        S_628_131 = 628,                         // $@131
+        S_compatibility = 629,                   // compatibility
+        S_630_132 = 630,                         // $@132
+        S_compatibility_params = 631,            // compatibility_params
+        S_compatibility_param = 632,             // compatibility_param
+        S_lenient_option_parsing = 633           // lenient_option_parsing
       };
     };
 
@@ -2489,6 +2498,51 @@ switch (yykind)
         return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
       }
 #endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_READ_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_READ_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_READ_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_READ_TIMEOUT, l);
+      }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_WRITE_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_WRITE_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_WRITE_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_WRITE_TIMEOUT, l);
+      }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_TCP_USER_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_TCP_USER_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_TCP_USER_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_TCP_USER_TIMEOUT, l);
+      }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       static
       symbol_type
@@ -5174,8 +5228,8 @@ switch (yykind)
     /// Constants.
     enum
     {
-      yylast_ = 1262,     ///< Last index in yytable_.
-      yynnts_ = 422,  ///< Number of nonterminal symbols.
+      yylast_ = 1274,     ///< Last index in yytable_.
+      yynnts_ = 425,  ///< Number of nonterminal symbols.
       yyfinal_ = 28 ///< Termination state number.
     };
 
@@ -5241,10 +5295,10 @@ switch (yykind)
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205
+     205,   206,   207,   208
     };
     // Last valid token kind.
-    const int code_max = 460;
+    const int code_max = 463;
 
     if (t <= 0)
       return symbol_kind::S_YYEOF;
@@ -5417,7 +5471,7 @@ switch (yykind)
 
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 5421 "dhcp4_parser.h"
+#line 5475 "dhcp4_parser.h"
 
 
 
diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy
index 6e5f5519d6..0055833bb2 100644
--- a/src/bin/dhcp4/dhcp4_parser.yy
+++ b/src/bin/dhcp4/dhcp4_parser.yy
@@ -93,6 +93,9 @@ using namespace std;
   LFC_INTERVAL "lfc-interval"
   READONLY "readonly"
   CONNECT_TIMEOUT "connect-timeout"
+  READ_TIMEOUT "read-timeout"
+  WRITE_TIMEOUT "write-timeout"
+  TCP_USER_TIMEOUT "tcp-user-timeout"
   MAX_RECONNECT_TRIES "max-reconnect-tries"
   RECONNECT_WAIT_TIME "reconnect-wait-time"
   ON_FAIL "on-fail"
@@ -988,6 +991,9 @@ database_map_param: database_type
                   | lfc_interval
                   | readonly
                   | connect_timeout
+                  | read_timeout
+                  | write_timeout
+                  | tcp_user_timeout
                   | max_reconnect_tries
                   | reconnect_wait_time
                   | on_fail
@@ -1078,6 +1084,24 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER {
     ctx.stack_.back()->set("connect-timeout", n);
 };
 
+read_timeout: READ_TIMEOUT COLON INTEGER {
+    ctx.unique("read-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("read-timeout", n);
+};
+
+write_timeout: WRITE_TIMEOUT COLON INTEGER {
+    ctx.unique("write-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("write-timeout", n);
+};
+
+tcp_user_timeout: TCP_USER_TIMEOUT COLON INTEGER {
+    ctx.unique("tcp-user-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("tcp-user-timeout", n);
+};
+
 max_reconnect_tries: MAX_RECONNECT_TRIES COLON INTEGER {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(@1));
     ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc
index b1c9254641..894e30a377 100644
--- a/src/bin/dhcp6/dhcp6_lexer.cc
+++ b/src/bin/dhcp6/dhcp6_lexer.cc
@@ -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 221
-#define YY_END_OF_BUFFER 222
+#define YY_NUM_RULES 224
+#define YY_END_OF_BUFFER 225
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,35 +700,35 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[2097] =
+static const flex_int16_t yy_accept[2136] =
     {   0,
-      214,  214,    0,    0,    0,    0,    0,    0,    0,    0,
-      222,  220,   10,   11,  220,    1,  214,  211,  214,  214,
-      220,  213,  212,  220,  220,  220,  220,  220,  207,  208,
-      220,  220,  220,  209,  210,    5,    5,    5,  220,  220,
-      220,   10,   11,    0,    0,  202,    0,    0,    0,    0,
+      217,  217,    0,    0,    0,    0,    0,    0,    0,    0,
+      225,  223,   10,   11,  223,    1,  217,  214,  217,  217,
+      223,  216,  215,  223,  223,  223,  223,  223,  210,  211,
+      223,  223,  223,  212,  213,    5,    5,    5,  223,  223,
+      223,   10,   11,    0,    0,  205,    0,    0,    0,    0,
         0,    0,    0,    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,  214,  214,
-        0,  213,  214,    3,    2,    6,    0,  214,    0,    0,
-        0,    0,    0,    0,    4,    0,    0,    9,    0,  203,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  217,
+      217,    0,  216,  217,    3,    2,    6,    0,  217,    0,
+        0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
+      206,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  208,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  205,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         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,  171,    0,    0,  172,    0,
+        0,    0,    0,    0,    0,    0,    0,    2,    0,    0,
+        0,    0,    0,    0,    0,    8,    0,    0,  174,    0,
 
-        0,    0,    0,    0,    0,    0,  204,  206,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  175,    0,    0,    0,    0,    0,    0,    0,  207,
+      209,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    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,    0,    0,  121,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -736,203 +736,207 @@ static const flex_int16_t yy_accept[2097] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  219,  217,    0,  216,  215,    0,    0,
-        0,    0,    0,  170,    0,   28,    0,   27,    0,    0,
-      125,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  222,  220,
+        0,  219,  218,    0,    0,    0,    0,    0,  173,    0,
+       28,    0,   27,    0,    0,  128,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    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,    0,
+        0,    0,    0,    0,    0,  125,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  218,  215,    0,    0,    0,    0,   29,    0,
-       31,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  129,    0,    0,    0,    0,    0,    0,  103,    0,
-        0,    0,    0,    0,    0,    0,    0,  155,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       60,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  221,
+      218,    0,    0,    0,    0,   29,    0,   31,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  132,    0,
+        0,    0,    0,    0,    0,  106,    0,    0,    0,    0,
+        0,    0,    0,    0,  158,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   60,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  112,    0,   61,    0,    0,
+        0,    0,    0,    0,    0,  105,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  115,    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,  150,
-        0,  175,    0,   54,    0,   58,    0,    0,    0,    0,
-       37,   34,   33,    0,    0,    0,  163,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  153,    0,
+      178,    0,   54,    0,   58,    0,    0,    0,    0,    0,
+       37,   34,   33,    0,    0,    0,  166,    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,    0,    0,    0,    0,    0,    0,    0,  174,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      144,    0,    0,    0,    0,    0,    0,    0,    0,  177,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,   56,    0,    0,   32,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      105,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  164,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  159,    0,    0,
+      108,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  167,    0,    0,    0,    0,    0,
 
-        0,    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,  162,    0,
         0,    0,    0,    0,    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,  124,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  143,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  140,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  107,
-
+        0,    0,    0,    0,  127,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  146,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+      143,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  110,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    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,  114,    0,    0,    0,
+        0,  118,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  117,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  158,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  168,  138,    0,    0,    0,
+        0,    0,    0,  161,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,  142,   55,    0,    0,    0,    0,
-        0,   66,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  144,    0,   62,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  171,  141,    0,    0,    0,    0,    0,    0,    0,
+      145,   55,    0,    0,    0,    0,    0,   69,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  147,    0,   62,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   97,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  195,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  121,    0,    0,    0,
+        0,    0,    0,    0,  100,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      198,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      157,    0,    0,    0,    0,    0,    0,    0,   74,    0,
+        0,    0,    0,    0,    0,  124,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  160,
+        0,    0,    0,    0,    0,    0,    0,   77,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   59,  106,    0,    0,    0,  154,
+        0,    0,    0,   59,  109,    0,    0,    0,  157,    0,
         0,    0,    0,    0,   53,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  146,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   73,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  149,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  196,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   76,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  116,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  199,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  119,    0,    0,    0,
         0,    0,    0,    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,   16,    0,    0,  169,   14,    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,  172,   14,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  160,    0,    0,
-        0,    0,    0,    0,    0,    0,  145,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  156,  173,    0,   40,
-        0,  165,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   20,    0,
-        0,    0,  100,    0,    0,    0,    0,    0,  167,    0,
-       57,    0,  108,    0,  194,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   85,
-
-        0,    0,    0,    0,    0,    0,    0,  134,  135,    0,
-        0,    0,    0,    0,    0,    0,  104,    0,    0,    0,
-       75,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  162,    0,    0,    0,    0,    0,
+        0,    0,  163,    0,    0,    0,    0,    0,    0,    0,
+        0,  148,    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,    0,    0,    0,  101,  123,    0,    0,    0,
+        0,  159,  176,    0,   40,    0,  168,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       82,    0,    0,    0,    0,    0,   17,    0,   15,    0,
+        0,    0,    0,   20,    0,    0,    0,  103,    0,    0,
 
-        0,  191,  190,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   30,    0,    0,    0,  149,    0,    0,    0,
+        0,    0,    0,  170,    0,   57,    0,  111,    0,  197,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  184,    0,    0,  193,    0,
+        0,    0,    0,    0,    0,   88,    0,    0,    0,    0,
+        0,    0,    0,  137,  138,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  107,    0,    0,    0,   78,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      117,    0,  153,    0,   46,    0,    0,   63,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   19,    0,
-        0,    0,    0,    0,    0,    0,    0,  119,   83,    0,
-        0,  161,    0,    0,    0,    0,  152,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   72,    0,  113,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  165,    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,  137,    0,    0,    0,  200,    0,    0,    0,
+        0,    0,    0,  104,  126,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   85,
+        0,    0,    0,    0,    0,   17,    0,   15,    0,    0,
+      194,  193,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   30,    0,    0,    0,  152,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  111,    0,    0,    0,    0,  176,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  187,    0,    0,  196,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  120,    0,  156,    0,   46,    0,    0,   63,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   19,
+
+        0,    0,    0,    0,    0,    0,    0,    0,  122,   65,
+       86,    0,    0,  164,    0,    0,    0,    0,  155,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       75,    0,  116,    0,    0,    0,  140,    0,    0,    0,
+      203,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  114,    0,    0,    0,    0,
+      179,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   45,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  147,   50,    0,    0,    0,  189,   38,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,   12,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   48,    0,    0,    0,   47,    0,    0,   18,    0,
-        0,    0,   71,    0,    0,    0,    0,    0,  139,    0,
+        0,    0,   45,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   66,    0,    0,    0,  150,   50,
+        0,    0,    0,  192,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   12,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   48,    0,    0,
+        0,   47,    0,    0,   18,    0,    0,    0,   74,    0,
+        0,    0,    0,    0,  142,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   79,    0,  136,    0,    0,    0,
-       64,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  109,    0,    0,    0,    0,    0,  166,
-        0,    0,    0,   49,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  185,    0,    0,    0,    0,    0,
+        0,   82,    0,  139,    0,    0,    0,   64,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   99,    0,   67,    0,    0,
-        0,   36,    0,   51,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      182,    0,    0,    0,    0,  151,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  120,    0,    0,
-        0,    0,    0,   68,    0,    0,    0,    0,  187,    0,
-        0,    0,    0,    0,    0,    0,    0,   89,    0,    0,
+      112,    0,    0,    0,    0,    0,  169,    0,    0,    0,
+       49,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  188,    0,    0,    0,    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,    0,  188,    0,    0,   13,    0,    0,    0,    0,
+        0,    0,  102,    0,   70,    0,    0,    0,    0,   36,
+        0,   51,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   24,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  185,    0,
+        0,    0,    0,  154,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,  123,    0,    0,    0,    0,
+        0,   71,    0,    0,    0,    0,   67,  190,    0,    0,
+        0,    0,    0,    0,    0,    0,   92,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+       39,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  191,    0,    0,   13,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  192,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  181,    0,   81,    0,   80,    0,   21,
-        0,   76,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  133,    0,
+      195,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  184,    0,   84,    0,   83,    0,   21,    0,
+
+       79,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  136,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  113,
+        0,    0,  183,    0,    0,    0,    0,    0,   73,    0,
+        0,   89,    0,   68,    0,   23,    0,  129,    0,    0,
+        0,    0,    0,    0,    0,    0,  101,    0,    0,    0,
+        0,    0,    0,    0,   98,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      110,    0,    0,  180,    0,    0,    0,    0,    0,   70,
+        0,    0,    0,    0,   72,    0,    0,    0,    0,    0,
+        0,   96,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,   86,    0,   65,    0,   23,    0,  126,    0,
-        0,    0,    0,    0,    0,    0,    0,   98,    0,    0,
-        0,    0,    0,    0,    0,   95,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   69,    0,    0,    0,    0,
-        0,    0,   93,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       52,    0,    0,   97,    0,    0,    0,    0,  189,    0,
+        0,    0,    0,  201,  204,   81,   80,   22,    0,  134,
+      151,  130,    0,    0,    0,    0,    0,    0,    0,    0,
+       93,    0,    0,    0,    0,    0,    0,    0,    0,  181,
+        0,    0,    0,    0,    0,    0,  186,    0,   95,    0,
+       87,    0,    0,    0,    0,    0,    0,  131,    0,    0,
+        0,    0,    0,    0,    0,  180,    0,    0,   26,  202,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   52,    0,    0,   94,    0,    0,    0,    0,  186,
-        0,    0,    0,    0,  198,  201,   78,   77,   22,    0,
-
-      131,  148,  127,    0,    0,    0,    0,    0,    0,    0,
-        0,   90,    0,    0,    0,    0,    0,    0,    0,    0,
-      178,    0,    0,    0,    0,    0,    0,  183,    0,   92,
-        0,   84,    0,    0,    0,    0,    0,    0,  128,    0,
-        0,    0,    0,    0,    0,    0,  177,    0,    0,   26,
-      199,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   91,    0,    0,    0,
-        0,   44,   42,    0,    0,    0,   96,    0,    0,  132,
-        0,   88,    0,    0,    0,    0,    0,    0,    0,    0,
-       87,    0,  179,   43,  197,    0
 
+        0,    0,    0,    0,    0,   94,    0,    0,    0,    0,
+       44,   42,    0,    0,    0,   99,    0,    0,  135,    0,
+       91,    0,    0,    0,    0,    0,    0,    0,    0,   90,
+        0,  182,   43,  200,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -979,271 +983,275 @@ static const YY_CHAR yy_meta[74] =
         1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[2105] =
+static const flex_int16_t yy_base[2144] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     2484, 2485,   34, 2480,  145,    0,  207, 2485,  214,  221,
-       13,  228, 2485, 2460,  118,   25,    2,    6, 2485, 2485,
-       73,   11,   17, 2485, 2485, 2485,  104, 2468, 2421,    0,
-     2458,  108, 2475,   24,  256, 2485,   67, 2424, 2444,   84,
-       75, 2444,   88,  226,   91,   89,  284,  196,  206,  219,
-      208,  235,  241,   60,  277, 2424,  279,  291,  253,  293,
-      316, 2407,  282,  317,  356,  325, 2426,    0,  378,  385,
-      406,  415,  422, 2485,    0, 2485,  429,  436,  218,  219,
-      287,  311,  333,  320, 2485, 2423, 2464, 2485,  342, 2485,
-
-      412,  340, 2421, 2462,  356,   10,  442,  349,  186,  396,
-      312,  348, 2461,    0,  474,  401, 2403,  409, 2402, 2403,
-     2409,  415, 2395, 2396, 2401,  436, 2411, 2394, 2403, 2393,
-      439,  308,  410, 2396, 2394,  446, 2383, 2441,  455, 2386,
-     2439, 2379,  422, 2400, 2400, 2394,  286, 2387, 2385, 2386,
-     2378, 2383, 2377,  428, 2388,  471, 2373, 2372, 2386,  448,
-     2424, 2371,  454, 2383,  361, 2371,  483, 2372,  474, 2384,
-     2381, 2382,  486, 2380, 2415, 2414, 2360, 2360, 2364,  469,
-     2360, 2352, 2369, 2361,    0,  472,  495,  459,  479,  496,
-      489, 2360, 2485,  511, 2355, 2485,  502,  516, 2485, 2409,
-
-      522, 2408,  523, 2407,  519, 2406, 2485, 2485,  565, 2405,
-      531, 2364, 2356, 2360, 2361, 2341, 2352, 2354, 2353,  497,
-      505, 2391, 2355, 2336, 2333, 2341, 2347, 2335, 2349, 2345,
-     2336, 2345, 2345, 2340, 2332, 2334, 2318, 2322, 2335, 2337,
-     2334, 2326, 2316, 2319, 2333, 2485, 2319, 2327,   80, 2365,
-     2311, 2320, 2362, 2309, 2319, 2359,  554, 2318, 2357, 2302,
-     2304, 2315, 2353,  534, 2357, 2311, 2291, 2306,  508, 2296,
-     2302,  530, 2293, 2291, 2294, 2290, 2296, 2287, 2286, 2299,
-     2292, 2282, 2293, 2297, 2296, 2290,  502, 2297, 2292, 2284,
-     2274, 2289, 2284, 2288, 2269, 2285, 2271, 2277, 2284, 2266,
-
-      524, 2271, 2268, 2267, 2262, 2276, 2275,  544, 2274, 2277,
-     2259, 2267,  547, 2485, 2485,  569, 2485, 2485, 2254,  192,
-     2301,  572, 2312, 2485,  532, 2485, 2311, 2485, 2305,  609,
-     2485,  559, 2245, 2264, 2247, 2264, 2300, 2260, 2250, 2302,
-     2257, 2260, 2251, 2254, 2240, 2251,  289, 2290, 2248, 2245,
-     2246,  587, 2250, 2290, 2225, 2237, 2232, 2229, 2225, 2227,
-     2278, 2235, 2224, 2240, 2274, 2220,  632, 2233, 2233, 2216,
-     2217, 2230, 2228, 2226, 2226, 2225, 2220, 2227, 2222, 2207,
-      540, 2216, 2219, 2214,  578, 2213, 2209, 2259,  559,  605,
-     2485, 2218, 2252, 2202, 2201, 2194, 2196, 2208, 2199, 2206,
-
-     2187, 2204, 2193, 2198,  599, 2245, 2198,  592, 2195, 2198,
-     2198, 2196, 2185, 2185, 2197,  585, 2172, 2173, 2194, 2185,
-     2175, 2172, 2186,  597, 2172, 2184, 2183, 2182, 2177, 2219,
-     2179, 2178, 2177, 2176, 2219, 2178, 2217, 2157, 2215, 2157,
-      557, 2170, 2485, 2485, 2169,  605, 2211, 2210, 2485, 2209,
-     2485,  618,  683,  617, 2208, 2202, 2155, 2157, 2159, 2146,
-     2143, 2485, 2148, 2141, 2153, 2156, 2143, 2142, 2485, 2152,
-      610, 2143, 2140, 2152,  568, 2137, 2139, 2485, 2184, 2144,
-     2129, 2131, 2142, 2140, 2135,  643, 2142, 2130, 2123, 2174,
-     2485, 2121, 2137, 2171, 2175, 2131, 2125, 2127, 2128, 2112,
-
-     2121, 2163, 2114, 2113, 2108, 2107, 2109, 2105, 2101,  611,
-     2120, 2094, 2101, 2106, 2099, 2115, 2149, 2153, 2485, 2098,
-     2094, 2150, 2101, 2100, 2094, 2101, 2086, 2096, 2084, 2098,
-     2098, 2086, 2082, 2084, 2079, 2485, 2136, 2485, 2078, 2077,
-     2070, 2087, 2126, 2125, 2070, 2075, 2084, 2078, 2072, 2081,
-      669, 2118, 2080, 2064, 2059, 2055, 2061,  620, 2075, 2068,
-     2072, 2055, 2113, 2054, 2054, 2105, 2050, 2051, 2050, 2485,
-     2063, 2485, 2100, 2485, 2051, 2485, 2061, 2097, 2057, 2100,
-     2485, 2485, 2485,  632,  631,  676, 2485,  620, 2059, 2039,
-     2049, 2091, 2090, 2035, 2045, 2087, 2032, 2039, 2032, 2040,
-
-     2043, 2025, 2025, 2040, 2039,  545, 2038, 2037, 2021, 2036,
-     2018, 2065, 2032, 2029, 2069, 2013, 2015, 2027, 2027, 2026,
-     2485, 2011, 2008, 2066, 2021, 2013, 2019, 2010, 2018, 2485,
-     2003, 2014, 2018, 2000, 2012, 2004,  640, 1995, 1994, 1988,
-     1993, 1990, 2005, 2004, 2005, 1984, 1994, 2000, 2043, 1998,
-     1997, 1989, 1980, 2485, 1981, 1983, 2485, 1985, 1990, 2029,
-     2028,   16, 1989, 2026, 1971, 2024, 1971, 1974, 1975, 1966,
-     2485, 1980, 1966,  706, 1958, 1962, 1978, 1975, 1967, 2012,
-     1964, 1971, 2009, 2485, 1955, 1953, 1967, 1966, 1969, 2003,
-     2002, 1949, 2000, 1960, 1944, 1997, 1996, 2485, 1941, 1955,
-
-     1954,  684, 1955, 1954, 1990, 1954, 1949, 1938, 1940, 2485,
-     2485,  630,  666, 1932, 1949, 1941, 1928, 1922, 1934, 1933,
-     1941, 1982, 1940,  670, 1971,   20,   83,  277,  355,  406,
-      514,  567,  605,  635,  636,  636,  693,  655,  654,  664,
-      704,  671,  665,  677,  666,  670,  676,  715,  721,  678,
-      686, 2485,  689,  684,  676,  691,  696,  694,  691,  698,
-      697,  685,  699,  697,  705,  741,  703,  748,  749,  694,
-      707,  693,  703,  750,  708,  758, 2485,  759,  715,  713,
-      715,  711,  705,  765,  761,  724,  713, 2485,  715,  726,
-      715,  728,  718,  731,  775,  718,  777,  720,  735, 2485,
-
-      729,  723,  734,  719,  730,  743,  722,  728,  783,  747,
-      731,  731,  744,  788,  789,  736,  754,  749,  754,  751,
-      795,  737,  749,  750,  757,  748,  745, 2485,  811,  768,
-      769,  759,  762,  773,  764,  770,  814,  790,  777,  759,
-      766,  780,  825,  782,  779,  777, 2485,  781,  776,  791,
-      788,  774,  776,  795,  792,  793,  781,  788,  789,  798,
-      802,  838,  800,  790,  803,  789,  789,  795,  851,  798,
-      793,  794,  800,  816,  799,  853,  808, 2485,  818,  818,
-      811,  822,  820,  865,  807,  809,  824,  825,  813,  811,
-      873,  830,  816,  822,  820, 2485, 2485,  836,  835,  836,
-
-      841,  829,  839,  841, 2485, 2485,  841,  843,  830,  848,
-      835, 2485,  833,  851,  838,  838,  889,  836,  840,  858,
-      899, 2485,  900, 2485,  845,  859,  859,  904,  852,  851,
-      855,  849,  909,  862,  852,  853,  849,  859,  863,  874,
-      875,  870,  872,  865,  867,  863,  880,  870,  885,  868,
-      927,  884,  889,  866,  889,  875,  874, 2485,  881,  883,
-      883,  896,  934,  881,  896,  914,  922,  891,  940,  902,
-      942, 2485,  948,  891,  910,  900,  899,  894,  895,  907,
-      902,  898,  916,  902,  903,  913,  922,  958,  905,  923,
-      916,  911,  965,  971,  928,  919, 2485,  933,  924,  932,
-
-      934,  919,  935,  925,  937,  931,  978,  944,  928,  929,
-     2485,  945,  948,  931,  933,  991,  934,  953, 2485,  952,
-      955,  942,  937,  955,  943,  996,  954,  950,  947, 1000,
-      949, 1002,  964,  950,  968,  967,  953,  968,  960,  956,
-      974,  973,  960,  977, 2485, 2485,  969, 1016,  969, 2485,
-      977,  980,  973, 1026, 2485,  976,  981, 1025,  976,  977,
-      989,  983,  984,  982,  993, 1038,  982,  983, 1041, 1042,
-      986,  998,  991, 2485,  987,  995,  993, 1045,  987, 1008,
-      994,  995, 1001, 1009, 1000, 1014, 1015, 1031, 1036, 1018,
-     1023, 1006, 1006, 2485, 1007, 1009, 1020, 1010, 1030, 1029,
-
-     1020, 1031, 1074, 1016, 1036, 1029, 1033, 1037, 1020, 1037,
-     1028, 1083, 1030, 1034, 2485, 1081, 1030, 1050, 1032, 1032,
-     1053, 1050, 1090, 1039, 1057, 1058, 1044, 1052, 1061, 1041,
-     1056, 1063, 1105, 1106, 2485, 1059, 1108, 1109, 1051, 1061,
-     1071, 1055, 1075, 1058, 1060, 1060, 1067, 1076, 1064, 1071,
-     1066, 1073, 1085, 1126, 1073, 1072, 1089, 1130, 1080, 1084,
-     1082, 1080, 1075, 1136, 1087, 1138, 1088, 1140, 1136, 1142,
-     1095, 2485, 1100, 1093, 1084, 1103, 1097, 1092, 1102, 1103,
-     1099, 1112, 2485, 1096, 1092, 2485, 2485, 1098, 1158, 1117,
-     1098, 1117, 1118, 1120, 1159, 1112, 1166, 1167, 1117, 1115,
-
-     1126, 1108, 1113, 1152, 1143, 1175, 1130, 1130, 1134, 1179,
-     1122, 1122, 1125, 1142, 1137, 1141, 1136, 2485, 1133, 1129,
-     1146, 1126, 1147, 1137, 1188, 1141, 2485, 1154, 1153, 1156,
-     1140, 1149, 1153, 1159, 1145, 1205, 1158, 1163, 1150, 1161,
-     1153, 1159, 1155, 1173, 1174, 1175, 2485, 2485, 1173, 2485,
-     1175, 2485, 1160, 1171, 1162, 1181, 1174, 1172, 1224, 1181,
-     1178, 1222, 1186, 1175, 1182, 1187, 1184, 1190, 2485, 1183,
-     1175, 1236, 2485, 1237, 1184, 1191, 1235, 1197, 2485, 1198,
-     2485, 1195, 2485, 1186, 2485, 1186, 1189, 1203, 1208, 1191,
-     1202, 1251, 1208, 1209, 1249, 1205, 1256, 1252, 1258, 2485,
-
-     1209, 1206, 1261, 1262, 1219, 1220, 1222, 2485, 2485, 1261,
-     1210, 1226, 1210, 1222, 1241, 1272, 2485, 1229, 1220, 1231,
-     2485, 1276, 1213, 1224, 1239, 1275, 1227, 1238, 1226, 1240,
-     1241, 1238, 1282, 1245, 1235, 1245, 1251, 1239, 1239, 1294,
-     1290, 1291, 1297, 1254, 2485, 1257, 1256, 1258, 1251, 1260,
-     1261, 1258, 1249, 1252, 1252, 1311, 1258, 1313, 1260, 1315,
-     1258, 1263, 1318, 2485, 1276, 1256, 1271, 1264, 1267, 1280,
-     1283, 1282, 1280, 1329, 1283, 2485, 2485, 1279, 1289, 1274,
-     1330, 1277, 1292, 1278, 1339, 1340, 1284, 1294, 1343, 1300,
-     2485, 1292, 1293, 1295, 1348, 1291, 2485, 1308, 2485, 1307,
-
-     1297, 2485, 2485, 1310, 1293, 1313, 1300, 1359, 1309, 1361,
-     1310, 1342, 2485, 1364, 1314, 1361, 2485, 1309, 1368, 1318,
-     1312, 1309, 1312, 1314, 1310, 1332, 1371, 1324, 1336, 1339,
-     1327, 1330, 1323, 1383, 1331, 2485, 1328, 1328, 2485, 1330,
-     1389, 1342, 1333, 1348, 1348, 1351, 1351, 1348, 1392, 1354,
-     2485, 1346, 2485, 1347, 2485, 1357, 1349, 2485, 1398, 1360,
-     1361, 1358, 1402, 1350, 1365, 1405, 1367, 1359, 2485, 1356,
-     1356, 1362, 1361, 1359, 1413, 1375, 1375, 2485, 2485, 1416,
-     1363, 2485, 1380, 1365, 1366, 1372, 2485, 1381, 1428, 1376,
-     1368, 1374, 1384, 1396, 1389, 1395, 1391, 2485, 1400, 2485,
-
-     1397, 1416, 2485, 1400, 1385, 1445, 2485, 1446, 1403, 1408,
-     1390, 1450, 1451, 1447, 1411, 1408, 1404, 1397, 1452, 1410,
-     1411, 2485, 1401, 1417, 1415, 1463, 2485, 1402, 1461, 1424,
-     1420, 1465, 1413, 1418, 1416, 1475, 1431, 1419, 1478, 1474,
-     1429, 1481, 1442, 1431, 1425, 1485, 1427, 1436, 1429, 1443,
-     1446, 1491, 1433, 1450, 1446, 1444, 1437, 1452, 1436, 1494,
-     1495, 1496, 1497, 1460, 1453, 1452, 1452, 1447, 2485, 1455,
-     1461, 1452, 1453, 1452, 1454, 1509, 1450, 1468, 1517, 1487,
-     1519, 1472, 2485, 2485, 1463, 1474, 1523, 2485, 2485, 1469,
-     1474, 1472, 1522, 1480, 1485, 1473, 1489, 1478, 1477, 1477,
-
-     1479, 2485, 1537, 1483, 1534, 1477, 1482, 1543, 1491, 1501,
-     1503, 2485, 1548, 1501, 1545, 2485, 1496, 1504, 2485, 1495,
-     1510, 1498, 2485, 1508, 1509, 1510, 1559, 1517, 2485, 1556,
-     1522, 1498, 1516, 1517, 1518, 1527, 1509, 1515, 1517, 1529,
-     1528, 1519, 1569, 1521, 1517, 1518, 1519, 1574, 1580, 1530,
-     1582, 1535, 1540, 1533, 2485, 1586, 2485, 1535, 1588, 1530,
-     2485, 1533, 1543, 1587, 1535, 1550, 1537, 1552, 1538, 1545,
-     1545, 1556, 1557, 2485, 1551, 1546, 1545, 1605, 1558, 2485,
-     1602, 1553, 1550, 2485, 1564, 1551, 1572, 1568, 1570, 1615,
-     1568, 1565, 1573, 1567, 2485, 1620, 1561, 1563, 1579, 1572,
-
-     1573, 1563, 1579, 1580, 1574, 1590, 1580, 1632, 1592, 1576,
-     1585, 1631, 1589, 1638, 1587, 2485, 1581, 2485, 1588, 1642,
-     1638, 2485, 1601, 2485, 1641, 1603, 1604, 1589, 1590, 1598,
-     1652, 1600, 1649, 1650, 1605, 1600, 1618, 1615, 1606, 1613,
-     2485, 1610, 1615, 1613, 1665, 1666, 1614, 1611, 1625, 1612,
-     2485, 1627, 1628, 1629, 1630, 2485, 1620, 1632, 1677, 1630,
-     1635, 1680, 1622, 1630, 1624, 1632, 1645, 2485, 1646, 1627,
-     1628, 1635, 1637, 2485, 1651, 1648, 1688, 1649, 2485, 1653,
-     1638, 1638, 1653, 1646, 1645, 1656, 1643, 2485, 1659, 1647,
-     1650, 1706, 1646, 1665, 1656, 1668, 1659, 1668, 1670, 1674,
-
-     2485, 2485, 1667, 1658, 1658, 1718, 1661, 1720, 1662, 1722,
-     1680, 1724, 2485, 1666, 1726, 2485, 1722, 1684, 1681, 1686,
-     1673, 1681, 1692, 1679, 1690, 1676, 1674, 1682, 1681, 1686,
-     1678, 1743, 1696, 1697, 1687, 1704, 1703, 1744, 1688, 1707,
-     1708, 2485, 1713, 1706, 1755, 1712, 1713, 1758, 1715, 1718,
-     1705, 1714, 1715, 2485, 1764, 2485, 1717, 2485, 1726, 2485,
-     1767, 2485, 1709, 1769, 1716, 1771, 1714, 1773, 1721, 1770,
-     1771, 1733, 1773, 1719, 1723, 1741, 1782, 1741, 2485, 1732,
-     1722, 1781, 1747, 1740, 1736, 1790, 1733, 1735, 1734, 1741,
-     2485, 1737, 1739, 2485, 1744, 1754, 1739, 1747, 1749, 2485,
-
-     1750, 1744, 2485, 1756, 2485, 1752, 2485, 1762, 2485, 1763,
-     1763, 1754, 1810, 1754, 1764, 1749, 1762, 2485, 1764, 1772,
-     1817, 1758, 1760, 1757, 1781, 2485, 1768, 1775, 1776, 1779,
-     1768, 1822, 1769, 1777, 1786, 1785, 1788, 1789, 1790, 1783,
-     1778, 1779, 1779, 1791, 1786, 2485, 1797, 1785, 1838, 1789,
-     1801, 1846, 2485, 1792, 1804, 1849, 1798, 1800, 1798, 1799,
-     1854, 1807, 1794, 1809, 1814, 1859, 1860, 1861, 1862, 1863,
-     1820, 1865, 1866, 1867, 1811, 1815, 1811, 1827, 1810, 1822,
-     1816, 2485, 1832, 1876, 2485, 1833, 1818, 1836, 1827, 2485,
-     1828, 1842, 1838, 1831, 2485, 2485, 2485, 2485, 2485, 1885,
-
-     2485, 2485, 2485, 1828, 1836, 1831, 1884, 1850, 1847, 1892,
-     1853, 2485, 1894, 1836, 1896, 1839, 1852, 1851, 1852, 1842,
-     2485, 1843, 1903, 1856, 1865, 1858, 1902, 2485, 1849, 2485,
-     1861, 2485, 1905, 1911, 1853, 1869, 1914, 1915, 2485, 1872,
-     1866, 1859, 1879, 1876, 1868, 1872, 2485, 1919, 1868, 2485,
-     2485, 1868, 1876, 1923, 1883, 1876, 1931, 1879, 1879, 1875,
-     1877, 1936, 1937, 1879, 1895, 1880, 2485, 1941, 1888, 1895,
-     1944, 2485, 2485, 1897, 1946, 1894, 2485, 1898, 1897, 2485,
-     1898, 2485, 1892, 1892, 1909, 1910, 1955, 1901, 1957, 1958,
-     2485, 1959, 2485, 2485, 2485, 2485, 1965, 1968, 1971, 1972,
-
-     1974, 1977, 1980, 1983
+     2526, 2527,   34, 2522,  145,    0,  207, 2527,  214,  221,
+       13,  228, 2527, 2502,  118,   25,    2,    6, 2527, 2527,
+       73,   11,   17, 2527, 2527, 2527,  104, 2510, 2463,    0,
+     2500,  108, 2517,   24,  256, 2527,   67, 2466, 2486,   84,
+       75, 2486,   88,  226,   91,   89,  284,  196,  206,  219,
+      208,  235,  241,   60,  277, 2466,  279,  291,  253,  293,
+      316, 2449,  282,  317,  356,  325, 2468,  305,    0,  378,
+      385,  406,  415,  422, 2527,    0, 2527,  429,  436,  218,
+      219,  287,  333,  354,  342, 2527, 2465, 2506, 2527,  382,
+
+     2527,  428,  346, 2463, 2504,  356,   10,  336,  409,  186,
+      417,  314,  319, 2503,    0,  489,  416, 2445,  409, 2444,
+     2445, 2451,  409, 2437, 2438, 2443,  412, 2453, 2436, 2445,
+     2435,  415,  416,  290, 2438, 2436,  421, 2425, 2483,  412,
+     2428, 2481, 2421,  440, 2442, 2442, 2436,  440, 2429, 2427,
+     2428, 2420, 2425, 2419,  435, 2430,  471, 2415, 2414, 2428,
+      460, 2466, 2413,  437, 2425,  446, 2413,  499, 2414,  459,
+     2426, 2423, 2424,  473, 2422, 2457, 2456,  487, 2402, 2402,
+     2406,  489, 2402, 2394, 2411, 2403, 2405,    0,  493,  510,
+      484,  495,  511,  493, 2401, 2527,  507, 2396, 2527,  508,
+
+      517, 2527, 2450,  523, 2449,  524, 2448,  520, 2447, 2527,
+     2527,  566, 2446,  531, 2405, 2397, 2401, 2402, 2382, 2393,
+     2395, 2394,  504,  536, 2432, 2396, 2377, 2374, 2382, 2388,
+     2376, 2390, 2386, 2377, 2386, 2386, 2381, 2373, 2375, 2359,
+     2363, 2376, 2378, 2375, 2367, 2357, 2360, 2374, 2527, 2360,
+     2368,   80, 2406, 2352, 2361, 2403, 2350, 2360, 2400,  521,
+     2359, 2398, 2343, 2345, 2356, 2394,  548, 2398, 2352, 2332,
+     2347,  558, 2337, 2343,  540, 2334, 2332, 2335, 2331, 2337,
+     2328, 2327, 2340, 2333, 2323, 2334, 2338, 2337, 2331,  540,
+     2338, 2333, 2325, 2315, 2330, 2325, 2329, 2310, 2326, 2312,
+
+     2318, 2325, 2307,  503, 2312, 2309, 2308,  289, 2303, 2317,
+     2316,  572, 2315, 2318, 2300, 2308, 2296,  575, 2527, 2527,
+      576, 2527, 2527, 2294,  192, 2341,  577, 2352, 2527,  543,
+     2527, 2351, 2527, 2345,  623, 2527,  564, 2285, 2304, 2287,
+     2304, 2340, 2300, 2290, 2342, 2297, 2300, 2291, 2294, 2280,
+     2291,  612, 2330, 2288, 2285, 2286,  613, 2290, 2330, 2265,
+     2277, 2272, 2269, 2265, 2267, 2318, 2275, 2264, 2280, 2314,
+     2260,  622, 2273, 2273, 2256, 2257, 2270, 2268, 2266, 2266,
+     2265, 2260, 2267, 2262, 2247,  591, 2256, 2259, 2254,  568,
+     2253, 2249, 2299,  559,  596, 2527, 2258, 2292, 2242, 2241,
+
+     2234, 2236, 2248, 2239, 2246, 2227, 2244, 2233, 2238,  601,
+     2285, 2238,  606, 2235, 2238, 2238, 2236,  597, 2226, 2238,
+      603, 2213, 2214, 2235, 2226, 2216, 2213, 2227,  613, 2213,
+     2225, 2224, 2223, 2218, 2260, 2220, 2219, 2218, 2217, 2200,
+     2259, 2218, 2257, 2197, 2255, 2197,  669, 2210, 2208, 2527,
+     2527, 2208,  619, 2250, 2249, 2527, 2248, 2527,  644,  692,
+      625, 2247, 2241, 2194, 2196, 2198, 2185, 2182, 2527, 2187,
+     2180, 2192, 2195, 2182, 2181, 2527, 2191,  630, 2182, 2179,
+     2191,  583, 2176, 2178, 2527, 2223, 2183, 2168, 2170, 2181,
+     2179, 2174,  673, 2181, 2169, 2162, 2213, 2527, 2160, 2176,
+
+     2210, 2214, 2170, 2164, 2166, 2167, 2151, 2160, 2202, 2153,
+     2152, 2147, 2146, 2148, 2144, 2140,  561, 2159, 2133, 2140,
+     2145, 2138, 2154, 2188, 2192, 2527, 2137, 2133, 2189, 2140,
+     2139, 2133, 2140, 2125, 2135, 2123, 2137, 2137, 2125, 2121,
+     2123, 2118, 2527, 2175, 2527, 2117, 2116, 2109, 2126, 2165,
+     2164, 2109, 2108, 2113, 2122, 2116, 2110, 2119,  689, 2156,
+     2118, 2102, 2097, 2093, 2099,  344, 2113, 2106, 2110, 2093,
+     2151, 2092, 2092, 2143, 2088, 2089, 2088, 2086, 2527, 2100,
+     2527, 2137, 2527, 2088, 2527, 2098, 2134, 2133, 2093, 2136,
+     2527, 2527, 2527,  631,  650,  691, 2527,  646, 2095, 2075,
+
+     2085, 2127, 2126, 2071, 2081, 2123, 2068, 2075, 2068, 2076,
+     2079, 2061, 2061, 2076, 2075,  637, 2074, 2073, 2057, 2072,
+     2054, 2101, 2068, 2065, 2105, 2049, 2051, 2063, 2063, 2062,
+     2527, 2047, 2044, 2102, 2057, 2049, 2055, 2046, 2054, 2527,
+     2039, 2050, 2054, 2036, 2048, 2040,  441, 2031, 2030, 2024,
+     2029, 2026, 2041, 2040, 2041, 2020, 2030, 2036, 2079, 2034,
+     2033, 2025, 2016, 2527, 2017, 2019, 2527, 2021, 2026, 2065,
+     2064,   16, 2025, 2062, 2007, 2060, 2007, 2010, 2011, 2002,
+     2527, 2016, 2002,  715, 1994, 1998, 2014, 2011, 2006, 2002,
+     2047, 1999, 2006, 2044, 2527, 1990, 1988, 2002, 2001, 2004,
+
+     2038, 2037, 1984, 2035, 1995, 1979, 2032, 2031, 2527, 1976,
+     1990, 1989,  681, 1990, 1989, 1986, 2024, 1988, 1983, 1972,
+     1974, 1965, 2527, 2527,  685,  685, 1965, 1978,   88,  333,
+      346,  441,  513,  523,  603,  595,  676,  632,  633,  610,
+      614,  629,  664,  677,  667,  670,  681,  681,  665,  722,
+      684,  677,  687,  733,  696,  689,  689,  691,  695,  703,
+      742,  748,  706,  707, 2527,  710,  705,  696,  711,  716,
+      713,  710,  718,  717,  705,  719,  717,  725,  761,  723,
+      768,  769,  713,  726,  712,  722,  769,  727,  777, 2527,
+      778,  734,  732,  734,  730,  724,  784,  780,  743,  732,
+
+     2527,  734,  745,  734,  747,  737,  750,  794,  737,  796,
+      739,  754, 2527,  748,  742,  753,  738,  749,  762,  753,
+      742,  748,  803,  767,  751,  751,  764,  808,  809,  756,
+      774,  769,  774,  771,  815,  757,  769,  770,  777,  768,
+      765, 2527,  831,  788,  789,  777,  780,  783,  794,  785,
+      791,  792,  836,  812,  799,  781,  788,  802,  847,  804,
+      801,  799, 2527,  803,  798,  813,  810,  796,  798,  817,
+      814,  815,  803,  810,  811,  820,  824,  860,  822,  812,
+      825,  811,  811,  817,  873,  820,  815,  816,  822,  838,
+      821,  875,  830, 2527,  840,  840,  833,  844,  842,  887,
+
+      829,  831,  846,  847,  835,  833,  895,  852,  838,  844,
+      842, 2527, 2527,  858,  857,  858,  863,  851,  861,  863,
+     2527, 2527,  863,  865,  852,  870,  857, 2527,  855,  873,
+      860,  860,  911,  858,  862,  880,  921, 2527,  922, 2527,
+      867,  881,  881,  926,  874,  873,  877,  871,  887,  932,
+      885,  875,  876,  872,  882,  886,  897,  898,  893,  895,
+      888,  890,  886,  903,  893,  908,  891,  950,  907,  912,
+      889,  912,  898,  897, 2527,  904,  906,  955,  907,  920,
+      958,  905,  920,  914,  939,  947,  916,  965,  927,  967,
+     2527,  973,  916,  935,  925,  924,  919,  920,  932,  927,
+
+      923,  941,  927,  928,  938,  947,  983,  930,  948,  941,
+      936,  990,  996,  953,  944, 2527,  958,  949,  957,  959,
+      944,  960,  950,  962,  956, 1003,  969,  953,  954, 2527,
+      970,  973,  956,  958, 1016,  959,  978, 2527,  977,  980,
+      967,  962,  980,  968, 1021,  979,  975,  972, 1025,  974,
+     1027,  989,  975,  993,  992,  978,  993,  985,  981,  999,
+      998,  985, 1002, 2527, 2527,  994, 1041,  994, 2527, 1002,
+     1005,  998, 1051,  999, 2527, 1002, 1007, 1051, 1002, 1003,
+     1015, 1009, 1010, 1008, 1019, 1064, 1008, 1009, 1067, 1068,
+     1012, 1024, 1017, 2527, 1013, 1021, 1020, 1071, 1013, 1034,
+
+     1020, 1021, 1022, 1028, 1036, 1027, 1041, 1042, 1043, 1059,
+     1064, 1046, 1051, 1034, 1034, 2527, 1035, 1037, 1048, 1038,
+     1058, 1057, 1048, 1059, 1102, 1044, 1064, 1057, 1061, 1065,
+     1048, 1065, 1056, 1111, 1058, 1062, 2527, 1109, 1058, 1078,
+     1060, 1060, 1081, 1078, 1118, 1067, 1085, 1086, 1072, 1080,
+     1089, 1069, 1084, 1091, 1133, 1134, 2527, 1087, 1136, 1137,
+     1079, 1089, 1099, 1083, 1103, 1086, 1088, 1088, 1095, 1104,
+     1092, 1099, 1094, 1101, 1113, 1154, 1101, 1100, 1117, 1158,
+     1108, 1112, 1110, 1108, 1103, 1164, 1115, 1166, 1116, 1168,
+     1164, 1170, 1123, 2527, 1112, 1129, 1122, 1113, 1132, 1126,
+
+     1121, 1131, 1132, 1129, 1141, 2527, 1125, 1121, 2527, 2527,
+     1127, 1187, 1146, 1127, 1146, 1147, 1149, 1188, 1141, 1195,
+     1196, 1149, 1147, 1145, 1156, 1138, 1143, 1149, 1183, 1174,
+     1206, 1161, 1161, 1165, 1210, 1153, 1153, 1156, 1173, 1168,
+     1172, 1167, 2527, 1164, 1160, 1177, 1157, 1178, 1168, 1219,
+     1172, 2527, 1185, 1184, 1187, 1171, 1180, 1184, 1190, 1176,
+     1236, 1189, 1194, 1181, 1192, 1184, 1190, 1186, 1204, 1205,
+     1206, 2527, 2527, 1204, 2527, 1206, 2527, 1191, 1202, 1193,
+     1212, 1205, 1203, 1255, 1212, 1209, 1253, 1217, 1206, 1213,
+     1218, 1215, 1221, 2527, 1214, 1206, 1267, 2527, 1268, 1215,
+
+     1222, 1266, 1228, 2527, 1229, 2527, 1226, 2527, 1217, 2527,
+     1217, 1218, 1221, 1235, 1240, 1223, 1234, 1283, 1240, 1241,
+     1281, 1237, 1288, 1284, 1290, 2527, 1241, 1238, 1293, 1294,
+     1251, 1252, 1254, 2527, 2527, 1246, 1294, 1243, 1259, 1243,
+     1255, 1244, 1275, 1306, 2527, 1263, 1254, 1265, 2527, 1310,
+     1247, 1258, 1273, 1309, 1261, 1272, 1260, 1274, 1275, 1272,
+     1316, 1279, 1269, 1279, 1285, 1273, 1273, 1328, 1324, 1325,
+     1331, 1288, 2527, 1291, 1290, 1292, 1285, 1294, 1296, 1293,
+     1283, 1286, 1286, 1345, 1292, 1347, 1294, 1349, 1292, 1297,
+     1352, 2527, 1310, 1290, 1305, 1298, 1301, 1314, 1317, 1316,
+
+     1314, 1363, 1317, 2527, 2527, 1313, 1323, 1308, 1364, 1311,
+     1326, 1312, 1373, 1374, 1375, 1319, 1329, 1378, 1335, 2527,
+     1327, 1328, 1330, 1383, 1326, 2527, 1343, 2527, 1342, 1332,
+     2527, 2527, 1345, 1328, 1348, 1349, 1336, 1395, 1345, 1397,
+     1346, 1340, 1379, 2527, 1401, 1351, 1398, 2527, 1346, 1405,
+     1355, 1349, 1346, 1349, 1351, 1347, 1369, 1408, 1361, 1373,
+     1376, 1364, 1367, 1360, 1420, 1368, 2527, 1365, 1365, 2527,
+     1367, 1426, 1379, 1370, 1385, 1385, 1388, 1388, 1385, 1429,
+     1391, 2527, 1383, 2527, 1384, 2527, 1394, 1386, 2527, 1435,
+     1397, 1398, 1395, 1439, 1387, 1402, 1442, 1404, 1396, 2527,
+
+     1393, 1393, 1399, 1398, 1396, 1450, 1412, 1412, 2527, 2527,
+     2527, 1453, 1400, 2527, 1417, 1402, 1403, 1409, 2527, 1418,
+     1465, 1413, 1405, 1411, 1421, 1433, 1426, 1432, 1422, 1429,
+     2527, 1438, 2527, 1435, 1480, 1455, 2527, 1439, 1424, 1484,
+     2527, 1485, 1442, 1447, 1429, 1489, 1490, 1486, 1450, 1447,
+     1443, 1436, 1491, 1449, 1450, 2527, 1440, 1456, 1454, 1502,
+     2527, 1441, 1500, 1463, 1459, 1504, 1452, 1457, 1455, 1514,
+     1470, 1458, 1517, 1513, 1468, 1520, 1481, 1470, 1464, 1524,
+     1466, 1475, 1468, 1482, 1485, 1530, 1472, 1489, 1485, 1483,
+     1476, 1491, 1475, 1533, 1534, 1535, 1536, 1499, 1492, 1491,
+
+     1491, 1486, 2527, 1494, 1500, 1491, 1492, 1491, 1493, 1548,
+     1494, 1490, 1508, 1557, 2527, 1527, 1559, 1512, 2527, 2527,
+     1503, 1514, 1563, 2527, 2527, 1509, 1514, 1512, 1562, 1520,
+     1525, 1513, 1529, 1519, 1517, 1517, 1519, 2527, 1577, 1523,
+     1574, 1517, 1522, 1583, 1531, 1541, 1543, 2527, 1588, 1541,
+     1585, 2527, 1536, 1544, 2527, 1535, 1550, 1538, 2527, 1548,
+     1549, 1550, 1599, 1557, 2527, 1596, 1562, 1538, 1556, 1557,
+     1558, 1567, 1549, 1555, 1557, 1569, 1568, 1559, 1609, 1561,
+     1557, 1558, 1559, 1614, 1620, 1570, 1622, 1575, 1565, 1581,
+     1574, 2527, 1627, 2527, 1576, 1629, 1571, 2527, 1574, 1584,
+
+     1628, 1576, 1591, 1578, 1593, 1579, 1586, 1586, 1597, 1598,
+     2527, 1592, 1587, 1586, 1646, 1599, 2527, 1643, 1594, 1591,
+     2527, 1605, 1592, 1613, 1609, 1611, 1656, 1609, 1606, 1614,
+     1608, 2527, 1661, 1602, 1604, 1620, 1613, 1614, 1604, 1620,
+     1621, 1615, 1631, 1621, 1673, 1633, 1617, 1626, 1672, 1630,
+     1679, 1628, 2527, 1622, 2527, 1629, 1683, 1684, 1681, 2527,
+     1643, 2527, 1683, 1645, 1646, 1631, 1632, 1640, 1694, 1642,
+     1691, 1692, 1647, 1642, 1660, 1657, 1648, 1655, 2527, 1652,
+     1657, 1655, 1707, 1708, 1656, 1653, 1667, 1654, 2527, 1669,
+     1670, 1671, 1672, 2527, 1662, 1674, 1719, 1672, 1677, 1722,
+
+     1664, 1672, 1666, 1674, 1687, 2527, 1688, 1669, 1670, 1677,
+     1679, 2527, 1693, 1690, 1730, 1691, 2527, 2527, 1695, 1680,
+     1680, 1695, 1688, 1687, 1698, 1685, 2527, 1701, 1689, 1692,
+     1748, 1688, 1707, 1698, 1710, 1701, 1710, 1712, 1716, 2527,
+     2527, 1709, 1700, 1700, 1760, 1703, 1762, 1704, 1764, 1722,
+     1766, 2527, 1708, 1768, 2527, 1764, 1726, 1723, 1728, 1715,
+     1723, 1734, 1721, 1732, 1718, 1716, 1724, 1723, 1728, 1720,
+     1785, 1738, 1739, 1729, 1746, 1745, 1786, 1730, 1749, 1750,
+     2527, 1755, 1748, 1797, 1754, 1755, 1800, 1757, 1760, 1747,
+     1756, 1757, 2527, 1806, 2527, 1759, 2527, 1768, 2527, 1809,
+
+     2527, 1751, 1811, 1758, 1813, 1756, 1815, 1763, 1812, 1813,
+     1775, 1815, 1761, 1765, 1783, 1824, 1783, 2527, 1774, 1764,
+     1823, 1789, 1782, 1778, 1832, 1775, 1777, 1776, 1783, 2527,
+     1779, 1781, 2527, 1786, 1796, 1781, 1789, 1791, 2527, 1792,
+     1786, 2527, 1798, 2527, 1794, 2527, 1804, 2527, 1805, 1805,
+     1796, 1852, 1796, 1806, 1791, 1804, 2527, 1806, 1814, 1859,
+     1800, 1802, 1799, 1823, 2527, 1810, 1817, 1818, 1821, 1810,
+     1864, 1811, 1819, 1828, 1827, 1830, 1831, 1832, 1825, 1820,
+     1821, 1821, 1833, 1828, 2527, 1839, 1827, 1880, 1831, 1843,
+     1888, 2527, 1834, 1846, 1891, 1840, 1842, 1840, 1841, 1896,
+
+     1849, 1836, 1851, 1856, 1901, 1902, 1903, 1904, 1905, 1862,
+     1907, 1908, 1909, 1853, 1857, 1853, 1869, 1852, 1864, 1858,
+     2527, 1874, 1918, 2527, 1875, 1860, 1878, 1869, 2527, 1870,
+     1884, 1880, 1873, 2527, 2527, 2527, 2527, 2527, 1927, 2527,
+     2527, 2527, 1870, 1878, 1873, 1926, 1892, 1889, 1934, 1895,
+     2527, 1936, 1878, 1938, 1881, 1894, 1893, 1894, 1884, 2527,
+     1885, 1945, 1898, 1907, 1900, 1944, 2527, 1891, 2527, 1903,
+     2527, 1947, 1953, 1895, 1911, 1956, 1957, 2527, 1914, 1908,
+     1901, 1921, 1918, 1910, 1914, 2527, 1961, 1910, 2527, 2527,
+     1910, 1918, 1965, 1925, 1918, 1973, 1921, 1921, 1917, 1919,
+
+     1978, 1979, 1921, 1937, 1922, 2527, 1983, 1930, 1937, 1986,
+     2527, 2527, 1939, 1988, 1936, 2527, 1940, 1939, 2527, 1940,
+     2527, 1934, 1934, 1951, 1952, 1997, 1943, 1999, 2000, 2527,
+     2001, 2527, 2527, 2527, 2527, 2007, 2010, 2013, 2014, 2016,
+     2019, 2022, 2025
     } ;
 
-static const flex_int16_t yy_def[2105] =
+static const flex_int16_t yy_def[2144] =
     {   0,
-     2097, 2097, 2098, 2098, 2097, 2097, 2097, 2097, 2097, 2097,
-     2096, 2096, 2096, 2096, 2096, 2099, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2100,
-     2096, 2096, 2096, 2101,   15, 2096,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2102,   45,   45,   45,
+     2136, 2136, 2137, 2137, 2136, 2136, 2136, 2136, 2136, 2136,
+     2135, 2135, 2135, 2135, 2135, 2138, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2139,
+     2135, 2135, 2135, 2140,   15, 2135,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2141,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2099, 2096, 2096,
-     2096, 2096, 2096, 2096, 2103, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2100, 2096, 2101, 2096,
+       45,   45,   45,   45,   45,   45,   45,   45, 2138, 2135,
+     2135, 2135, 2135, 2135, 2135, 2142, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2139, 2135, 2140,
 
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2104,   45, 2102,   45,   45,   45,   45,   45,
+     2135, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2143,   45, 2141,   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,   45,
-       45,   45,   45,   45, 2103, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096,   45,   45, 2096,   45,   45, 2096,   45,
+       45,   45,   45,   45,   45,   45,   45, 2142, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135,   45,   45, 2135,   45,
 
-       45,   45,   45,   45,   45, 2104, 2096, 2096,  115,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45,   45,   45, 2143, 2135,
+     2135,  116,   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, 2096,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   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,
@@ -1251,224 +1259,228 @@ static const flex_int16_t yy_def[2105] =
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2096, 2096, 2096, 2096, 2096, 2096, 2096,   45,
-       45,   45,   45, 2096,   45, 2096,   45, 2096,   45,  115,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135,   45,   45,   45,   45, 2135,   45,
+     2135,   45, 2135,   45,  116, 2135,   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,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2135,   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, 2096, 2096, 2096,   45,   45,   45, 2096,   45,
-     2096,   45,  115,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45,   45,   45, 2096,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+     2135, 2135,   45,   45,   45, 2135,   45, 2135,   45,  116,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2096,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2096,   45, 2096,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2135,   45, 2135,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2096,
-       45, 2096,   45, 2096,   45, 2096,   45,   45, 2096,   45,
-     2096, 2096, 2096,   45,   45,   45, 2096,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   45,
+     2135,   45, 2135,   45, 2135,   45,   45,   45, 2135,   45,
+     2135, 2135, 2135,   45,   45,   45, 2135,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45, 2096,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45, 2096,   45,   45,   45,
+       45,   45,   45, 2135,   45,   45, 2135,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2096,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2135, 2135,   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, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2096,
-
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2135,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2135,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2096, 2096,   45,   45,   45,
+       45,   45,   45, 2135,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 2096, 2096,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45, 2096,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135, 2135,   45,   45,   45,   45,   45,   45,   45,
+     2135, 2135,   45,   45,   45,   45,   45, 2135,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45, 2135,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
-
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45, 2096,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2096, 2096,   45,   45,   45, 2096,
-       45,   45,   45,   45, 2096,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2135, 2135,   45,   45,   45, 2135,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2135,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2096,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2096,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2135,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2135,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2096,   45,   45, 2096, 2096,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2135,   45,   45,   45,   45,   45,   45,
 
+       45,   45,   45,   45,   45, 2135,   45,   45, 2135, 2135,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096, 2096,   45, 2096,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2096,   45,
-       45,   45, 2096,   45,   45,   45,   45,   45, 2096,   45,
-     2096,   45, 2096,   45, 2096,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2096,
-
-       45,   45,   45,   45,   45,   45,   45, 2096, 2096,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2096,   45,   45,   45,   45,   45,
+       45,   45, 2135,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2096, 2096,   45,   45,   45,
+       45, 2135, 2135,   45, 2135,   45, 2135,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45, 2096,   45, 2096,   45,
+       45,   45,   45, 2135,   45,   45,   45, 2135,   45,   45,
 
-       45, 2096, 2096,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2096,   45,   45,   45, 2096,   45,   45,   45,
+       45,   45,   45, 2135,   45, 2135,   45, 2135,   45, 2135,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+       45,   45,   45, 2135, 2135,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45, 2135,   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, 2096,   45,   45, 2096,   45,
+       45,   45, 2135,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45, 2096,   45, 2096,   45,   45, 2096,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2096,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096, 2096,   45,
-       45, 2096,   45,   45,   45,   45, 2096,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45, 2096,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 2096,   45,   45,   45, 2096,   45,   45,   45,
+       45,   45,   45, 2135, 2135,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45,   45,   45,   45,   45, 2135,   45, 2135,   45,   45,
+     2135, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2135,   45,   45,   45, 2135,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45, 2096,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2135,   45,   45, 2135,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135,   45, 2135,   45, 2135,   45,   45, 2135,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+
+       45,   45,   45,   45,   45,   45,   45,   45, 2135, 2135,
+     2135,   45,   45, 2135,   45,   45,   45,   45, 2135,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2135,   45, 2135,   45,   45,   45, 2135,   45,   45,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+     2135,   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, 2096,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2096, 2096,   45,   45,   45, 2096, 2096,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45, 2096,   45,   45, 2096,   45,
-       45,   45, 2096,   45,   45,   45,   45,   45, 2096,   45,
+       45,   45, 2135,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45, 2135, 2135,
+       45,   45,   45, 2135, 2135,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
+       45, 2135,   45,   45, 2135,   45,   45,   45, 2135,   45,
+       45,   45,   45,   45, 2135,   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, 2096,   45, 2096,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45, 2096,
-       45,   45,   45, 2096,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2096,   45,   45,   45,   45,   45,
+       45, 2135,   45, 2135,   45,   45,   45, 2135,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2096,   45, 2096,   45,   45,
-       45, 2096,   45, 2096,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45, 2096,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
-       45,   45,   45, 2096,   45,   45,   45,   45, 2096,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
+     2135,   45,   45,   45,   45,   45, 2135,   45,   45,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-
-     2096, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2096,   45,   45, 2096,   45,   45,   45,   45,
+       45,   45, 2135,   45, 2135,   45,   45,   45,   45, 2135,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2135,   45,
+       45,   45,   45, 2135,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45, 2135, 2135,   45,   45,
+       45,   45,   45,   45,   45,   45, 2135,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2135,   45,   45, 2135,   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, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2096,   45, 2096,   45, 2096,   45, 2096,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2096,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2135,   45, 2135,   45, 2135,   45, 2135,   45,
+
+     2135,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45,   45, 2135,   45,   45,   45,   45,   45, 2135,   45,
+       45, 2135,   45, 2135,   45, 2135,   45, 2135,   45,   45,
+       45,   45,   45,   45,   45,   45, 2135,   45,   45,   45,
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45, 2096,   45,   45,   45,   45,   45, 2096,
+       45,   45,   45,   45, 2135,   45,   45,   45,   45,   45,
+       45, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45, 2096,   45, 2096,   45, 2096,   45, 2096,   45,
-       45,   45,   45,   45,   45,   45,   45, 2096,   45,   45,
-       45,   45,   45,   45,   45, 2096,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2096,   45,   45,   45,   45,
-       45,   45, 2096,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2135,   45,   45, 2135,   45,   45,   45,   45, 2135,   45,
+       45,   45,   45, 2135, 2135, 2135, 2135, 2135,   45, 2135,
+     2135, 2135,   45,   45,   45,   45,   45,   45,   45,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45,   45,   45,   45,   45,   45, 2135,   45, 2135,   45,
+     2135,   45,   45,   45,   45,   45,   45, 2135,   45,   45,
+       45,   45,   45,   45,   45, 2135,   45,   45, 2135, 2135,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45, 2096,   45,   45,   45,   45, 2096,
-       45,   45,   45,   45, 2096, 2096, 2096, 2096, 2096,   45,
-
-     2096, 2096, 2096,   45,   45,   45,   45,   45,   45,   45,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45,   45,   45,   45,   45,   45, 2096,   45, 2096,
-       45, 2096,   45,   45,   45,   45,   45,   45, 2096,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45, 2096,
-     2096,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2096,   45,   45,   45,
-       45, 2096, 2096,   45,   45,   45, 2096,   45,   45, 2096,
-       45, 2096,   45,   45,   45,   45,   45,   45,   45,   45,
-     2096,   45, 2096, 2096, 2096,    0, 2096, 2096, 2096, 2096,
-
-     2096, 2096, 2096, 2096
+
+       45,   45,   45,   45,   45, 2135,   45,   45,   45,   45,
+     2135, 2135,   45,   45,   45, 2135,   45,   45, 2135,   45,
+     2135,   45,   45,   45,   45,   45,   45,   45,   45, 2135,
+       45, 2135, 2135, 2135,    0, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135
     } ;
 
-static const flex_int16_t yy_nxt[2559] =
+static const flex_int16_t yy_nxt[2601] =
     {   0,
-     2096,   13,   14,   13, 2096,   15,   16, 2096,   17,   18,
+     2135,   13,   14,   13, 2135,   15,   16, 2135,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
-       84,  788,   37,   14,   37,   85,   25,   26,   38,  100,
-      853,   27,   37,   14,   37,   42,   28,   42,   38,   90,
-       91,   29,  198,   30,   13,   14,   13,   89,   90,   25,
-       31,   91,   13,   14,   13,   13,   14,   13,   32,   40,
-      789,   13,   14,   13,   33,   40,  101,   90,   91,  198,
-       89,   34,   35,   13,   14,   13,   93,   15,   16,   94,
+       85,  801,   37,   14,   37,   86,   25,   26,   38,  101,
+     2135,   27,   37,   14,   37,   42,   28,   42,   38,   91,
+       92,   29,  201,   30,   13,   14,   13,   90,   91,   25,
+       31,   92,   13,   14,   13,   13,   14,   13,   32,   40,
+      802,   13,   14,   13,   33,   40,  102,   91,   92,  201,
+       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,   89,   39,  102,   25,   26,
+       23,   24,   13,   14,   13,   90,   39,  103,   25,   26,
 
-       13,   14,   13,   27,   39,   42,  105,   42,   28,   42,
-      106,   42,   41,   29,  108,   30,  111,  112,   92,  136,
-       41,   25,   31,  102,  137,  372,   87,  138,   87,  105,
-       32,   88,   88,   88,   88,   88,   33,  108,  106,  111,
-      854,  112,  373,   34,   35,   44,   44,   44,   45,   45,
+       13,   14,   13,   27,   39,   42,  106,   42,   28,   42,
+      107,   42,   41,   29,  109,   30,  112,  113,   93,  137,
+       41,   25,   31,  103,  138,  377,   88,  139,   88,  106,
+       32,   89,   89,   89,   89,   89,   33,  109,  107,  112,
+      857,  113,  378,   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,   45,
        48,   49,   50,   45,   51,   52,   53,   45,   45,   45,
@@ -1476,284 +1488,289 @@ static const flex_int16_t yy_nxt[2559] =
        58,   45,   59,   60,   61,   62,   63,   64,   65,   51,
 
        66,   67,   68,   69,   70,   71,   72,   73,   74,   75,
-       76,   77,   56,   45,   45,   45,   45,   45,   79,  202,
-       80,   80,   80,   80,   80,   79,  102,   82,   82,   82,
-       82,   82,  446,   81,   83,   83,   83,   83,   83,   79,
-       81,   82,   82,   82,   82,   82,  202,   81,  186,  187,
-      109,  118,  116,  130,   81,  119,   81,  105,  117,  120,
-      110,  446,  121,   81,  124,  122,  131,  125,  126,  123,
-       81,  127,  128,  109,  186,  187,  132,   81,   45,  108,
-      105,   45,   45,   45,  129,   45,   45,   45,  110,  114,
-      134,  133,   45,   45,  469,   45,   45,  135,  152,  470,
-
-      153,   45,  154,   45,   45,   45,   45,   45,   45,   45,
+       76,   77,   78,   45,   45,   45,   45,   45,   80,  205,
+       81,   81,   81,   81,   81,   80,  103,   83,   83,   83,
+       83,   83,  453,   82,   84,   84,   84,   84,   84,   80,
+       82,   83,   83,   83,   83,   83,  205,   82,  189,  190,
+      110,  119,  117,  131,   82,  120,   82,  106,  118,  121,
+      111,  453,  122,   82,  125,  123,  132,  126,  127,  124,
+       82,  128,  129,  110,  189,  190,  133,   82,   45,  109,
+      106,   45,   45,   45,  130,   45,   45,   45,  111,  115,
+      135,  134,   45,   45,  331,   45,   45,  136,  153,  440,
+
+      154,   45,  155,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  188,  139,   45,  166,  143,  144,
-       45,  167,  145,  256,   45,  140,  147,  141,  146,  855,
-      148,  186,   45,  155,  149,  204,   45,  100,   45,  115,
-      111,  156,  188,  157,  257,  235,  150,  188,  158,  159,
-      151,  160,  168,  187,  161,  162,  169,  189,  236,  170,
-      175,  176,  204,  111,  205,  163,  171,  172,  164,  194,
-      109,  173,  174,  182,  101,  191,  197,  201,  183,  190,
-      110,   83,   83,   83,   83,   83,   79,  205,   80,   80,
-
-       80,   80,   80,  109,   81,  177,  281,  194,  178,  179,
-      282,   81,  197,  856,   87,  201,   87,   99,  180,   88,
-       88,   88,   88,   88,   99,  181,   79,   81,   82,   82,
-       82,   82,   82,  203,   81,   83,   83,   83,   83,   83,
-      194,   81,   88,   88,   88,   88,   88,  199,   81,   88,
-       88,   88,   88,   88,   99,  857,  213,  210,   99,  237,
-      246,  203,   99,  219,   81,  214,  201,  251,  211,  215,
-       99,   81,  220,  221,   99,  238,   99,   99,  200,  208,
-      252,  266,  225,  226,  232,  315,  233,  209,  209,  209,
-      209,  209,  227,  284,  264,  271,  209,  209,  209,  209,
-
-      209,  209,  241,  234,  247,  242,  203,  313,  315,  243,
-      272,  273,  274,  277,  313,  315,  278,  279,  395,  209,
-      209,  209,  209,  209,  209,  314,  314,  267,  285,  286,
-      287,  300,  294,  320,  308,  313,  295,  322,  318,  288,
-      296,  289,  316,  290,  291,  301,  292,  323,  325,  327,
-      329,  314,  317,  320,  341,  343,  320,  342,  415,  858,
-      325,  416,  576,  344,  381,  322,  450,  577,  396,  345,
-      327,  325,  327,  443,  323,  399,  332,  329,  330,  330,
-      330,  330,  330,  390,  430,  400,  431,  330,  330,  330,
-      330,  330,  330,  327,  450,  443,  443,  475,  448,  446,
-
-      508,  509,  510,  476,  536,  734,  511,  438,  735,  520,
-      330,  330,  330,  330,  330,  330,  610,  382,  444,  521,
-      383,  448,  453,  453,  453,  453,  453,  859,  454,  611,
-      692,  453,  453,  453,  453,  453,  453,  491,  515,  450,
-      580,  540,  492,  549,  516,  541,  558,  550,  621,  584,
-      559,  585,  580,  622,  453,  453,  453,  453,  453,  453,
-      645,  601,  537,  860,  712,  713,  837,  522,  580,  602,
-      646,  603,  604,  605,  684,  606,  584,  715,  585,  685,
-      586,  711,  693,  861,  716,  862,  714,  764,  765,  828,
-      493,  712,  838,  713,  837,  494,   45,   45,   45,   45,
-
-       45,  829,  863,  864,  865,   45,   45,   45,   45,   45,
-       45,  800,  866,  867,  868,  838,  801,  849,  850,  869,
-      851,  870,  874,  875,  876,  877,  878,  879,   45,   45,
-       45,   45,   45,   45,  871,  880,  881,  882,  872,  883,
-      884,  885,  873,  886,  887,  888,  889,  890,  891,  892,
-      893,  894,  895,  896,  897,  802,  898,  899,  900,  901,
-      903,  904,  902,  905,  906,  907,  908,  909,  910,  911,
-      912,  913,  914,  915,  916,  917,  918,  919,  920,  921,
-      922,  923,  924,  925,  926,  927,  928,  929,  930,  931,
-      932,  933,  934,  935,  936,  937,  938,  939,  940,  941,
-
-      942,  943,  944,  946,  947,  950,  951,  952,  953,  945,
-      955,  948,  956,  957,  954,  949,  958,  959,  960,  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,  967,  995,  996,  997,  998,  999, 1000,
-     1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
-     1011, 1013, 1014, 1015, 1016, 1012, 1017, 1018, 1019, 1020,
-     1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
-     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1039, 1040, 1041,
-
-     1038, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
-     1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
-     1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1071,
-     1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
-     1070, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090,
-     1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100,
-     1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
-     1111, 1089, 1112, 1113, 1088, 1114, 1115, 1116, 1117, 1118,
-     1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128,
-     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1138, 1139, 1140,
-
-     1141, 1136, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
-     1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159,
-     1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
-     1171, 1172, 1162, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
-     1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
-     1190, 1191, 1192, 1193, 1137, 1194, 1195, 1196, 1197, 1198,
-     1199, 1200, 1201, 1202, 1203, 1204, 1206, 1205, 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, 1204, 1205, 1232, 1233, 1234, 1235, 1236,
-
-     1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
-     1247, 1248, 1249, 1250, 1252, 1254, 1255, 1256, 1251, 1257,
-     1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267,
-     1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277,
-     1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
-     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1253, 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, 1333, 1334, 1335, 1336,
-
-     1337, 1315, 1338, 1339, 1340, 1341, 1342, 1316, 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, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384,
-     1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394,
-     1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405,
-     1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415,
-     1416, 1417, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426,
-     1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436,
-
-     1437, 1438, 1439, 1440, 1412, 1441, 1442, 1443, 1444, 1445,
-     1446, 1447, 1395, 1448, 1449, 1450, 1451, 1452, 1453, 1454,
-     1455, 1456, 1457, 1458, 1459, 1418, 1460, 1461, 1463, 1464,
-     1465, 1466, 1467, 1468, 1469, 1462, 1470, 1471, 1472, 1473,
-     1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483,
-     1484, 1485, 1486, 1487, 1489, 1490, 1492, 1491, 1488, 1493,
-     1494, 1495, 1496, 1497, 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, 1502, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532,
-
-     1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542,
-     1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552,
-     1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562,
-     1563, 1564, 1565, 1569, 1566, 1570, 1571, 1567, 1572, 1573,
-     1568, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582,
-     1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1593,
-     1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1592,
-     1603, 1604, 1605, 1606, 1580, 1607, 1608, 1609, 1610, 1611,
-     1612, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622,
-     1623, 1624, 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, 1613, 1671,
-     1672, 1673, 1674, 1676, 1677, 1678, 1679, 1675, 1680, 1681,
-     1682, 1656, 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, 1735, 1736, 1737, 1738, 1739, 1740,
-     1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750,
-     1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760,
-     1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770,
-     1771, 1772, 1773, 1774, 1775, 1777, 1778, 1779, 1780, 1776,
-     1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790,
-     1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800,
-     1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810,
-     1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820,
-     1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830,
-
-     1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840,
-     1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850,
-     1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860,
-     1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870,
-     1871, 1872, 1873, 1874, 1876, 1877, 1875, 1878, 1879, 1880,
-     1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
-     1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900,
-     1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910,
-     1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920,
-     1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930,
-
-     1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940,
-     1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950,
-     1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960,
-     1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970,
-     1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980,
-     1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
-     1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-     2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-     2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020,
-     2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030,
-
-     2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040,
-     2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050,
-     2051, 2052, 2053, 2054, 2055, 2057, 2056, 2058, 2059, 2060,
-     2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070,
-     2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080,
-     2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090,
-     2091, 2092, 2093, 2094, 2095,   12,   12,   12,   36,   36,
-       36,   78,   97,   78,   99,   99,   99,  113,  113,  113,
-      185,  852,  185,  206,  206,  206,  848,  847,  846,  845,
-      844,  843,  842,  841,  840,  839,  836,  835,  834,  833,
-
-      832,  831,  830,  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,  799,  798,
-      797,  796,  795,  794,  793,  792,  791,  790,  787,  786,
-      785,  784,  783,  782,  781,  780,  779,  778,  777,  776,
-      775,  774,  773,  772,  771,  770,  769,  768,  767,  766,
-      763,  762,  761,  760,  759,  758,  757,  756,  755,  754,
-      753,  752,  751,  750,  749,  748,  747,  746,  745,  744,
-      743,  742,  741,  740,  739,  738,  737,  736,  733,  732,
-      731,  730,  729,  728,  727,  726,  725,  724,  723,  722,
-
-      721,  720,  719,  718,  717,  711,  710,  709,  708,  707,
-      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
-      696,  695,  694,  691,  690,  689,  688,  687,  686,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  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,  647,  644,  643,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  628,  627,  626,  625,  624,  623,  620,  619,
-      618,  617,  616,  615,  614,  613,  612,  609,  608,  607,
-
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-      590,  589,  588,  587,  583,  582,  581,  579,  578,  575,
-      574,  573,  572,  571,  570,  569,  568,  567,  566,  565,
-      564,  563,  562,  561,  560,  557,  556,  555,  554,  553,
-      552,  551,  548,  547,  546,  545,  544,  543,  542,  539,
-      538,  535,  534,  533,  532,  531,  530,  529,  528,  527,
-      526,  525,  524,  523,  519,  518,  517,  514,  513,  512,
-      507,  506,  505,  504,  503,  502,  501,  500,  499,  498,
-      497,  496,  495,  490,  489,  488,  487,  486,  485,  484,
-      483,  482,  481,  480,  479,  478,  477,  474,  473,  472,
-
-      471,  468,  467,  466,  465,  464,  463,  462,  461,  460,
-      459,  458,  457,  456,  455,  452,  451,  449,  447,  445,
-      442,  441,  440,  439,  437,  436,  435,  434,  433,  432,
-      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
-      419,  418,  417,  414,  413,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  401,  398,  397,  394,
-      393,  392,  391,  389,  388,  387,  386,  385,  384,  380,
-      379,  378,  377,  376,  375,  374,  371,  370,  369,  368,
-      367,  366,  365,  364,  363,  362,  361,  360,  359,  358,
-      357,  356,  355,  354,  353,  352,  351,  350,  349,  348,
-
-      347,  346,  340,  339,  338,  337,  336,  335,  334,  333,
-      331,  207,  328,  326,  324,  321,  319,  312,  311,  310,
-      309,  307,  306,  305,  304,  303,  302,  299,  298,  297,
-      293,  283,  280,  276,  275,  270,  269,  268,  265,  263,
-      262,  261,  260,  259,  258,  255,  254,  253,  250,  249,
-      248,  245,  244,  240,  239,  231,  230,  229,  228,  224,
-      223,  222,  218,  217,  216,  212,  207,  196,  195,  193,
-      192,  184,  165,  142,  107,  104,  103,   43,   98,   96,
-       95,   86,   43, 2096,   11, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096
+       45,   45,   45,   45,  191,  140,   45,  167,  144,  145,
+       45,  168,  146,  113,   45,  141,  148,  142,  147,  240,
+      149,  202,   45,  156,  150,  208,   45,  207,   45,  116,
+      112,  157,  191,  158,  703,  241,  151,  113,  159,  160,
+      152,  161,  169,  189,  162,  163,  170,  187,  208,  171,
+      176,  177,  203,  112,  207,  164,  172,  173,  165,  191,
+      110,  174,  175,  184,  190,  197,  200,  101,  185,  192,
+      111,   84,   84,   84,   84,   84,   80,  858,   81,   81,
+
+       81,   81,   81,  178,   82,  179,  704,  194,  180,  181,
+      193,   82,  200,  197,   88,  859,   88,  249,  182,   89,
+       89,   89,   89,   89,  102,  183,   80,   82,   83,   83,
+       83,   83,   83,  100,   82,   84,   84,   84,   84,   84,
+      100,   82,   89,   89,   89,   89,   89,  204,   82,   89,
+       89,   89,   89,   89,  206,  197,  216,  222,  228,  229,
+      235,  250,  236,  238,   82,  217,  223,  224,  230,  218,
+      100,   82,  213,  204,  100,  204,  239,  244,  100,  237,
+      245,  269,  206,  214,  246,  254,  100,  259,  777,  778,
+      100,  284,  100,  100,  211,  285,  280,  860,  255,  281,
+
+      282,  267,  212,  212,  212,  212,  212,  274,  260,  287,
+      320,  212,  212,  212,  212,  212,  212,  297,  303,  320,
+      205,  298,  275,  276,  277,  299,  206,  270,  318,  325,
+      318,  386,  304,  320,  212,  212,  212,  212,  212,  212,
+      319,  319,  323,  327,  288,  289,  290,  308,  328,  330,
+      332,  334,  325,  325,  312,  291,  318,  292,  321,  293,
+      294,  346,  295,  435,  347,  436,  319,  322,  400,  861,
+      862,  327,  330,  332,  330,  328,  337,  457,  334,  335,
+      335,  335,  335,  335,  387,  404,  348,  388,  335,  335,
+      335,  335,  335,  335,  349,  405,  420,  395,  332,  421,
+
+      350,  450,  450,  455,  453,  457,  543,  553,  863,  527,
+      655,  335,  335,  335,  335,  335,  335,  476,  401,  528,
+      656,  332,  477,  482,  450,  451,  455,  498,  522,  483,
+      457,  620,  499,  461,  523,  444,  460,  460,  460,  460,
+      460,  864,  868,  869,  621,  460,  460,  460,  460,  460,
+      460,  515,  516,  517,  590,  547,  554,  518,  529,  548,
+      590,  557,  566,  725,  544,  558,  567,  870,  460,  460,
+      460,  460,  460,  460,  585,  594,  871,  595,  631,  586,
+      500,  611,  590,  632,  726,  501,  842,  872,  596,  612,
+      725,  613,  614,  615,  695,  616,  724,  747,  843,  696,
+
+      748,  727,  594,  728,  595,   45,   45,   45,   45,   45,
+      729,  854,  726,  873,   45,   45,   45,   45,   45,   45,
+      813,  853,  874,  865,  866,  814,  867,  875,  876,  877,
+      878,  879,  880,  881,  854,  882,  883,   45,   45,   45,
+       45,   45,   45,  884,  885,  886,  887,  890,  891,  853,
+      888,  892,  893,  894,  889,  895,  896,  897,  898,  899,
+      900,  901,  902,  903,  815,  904,  905,  906,  907,  908,
+      909,  910,  911,  912,  913,  914,  915,  916,  917,  919,
+      920,  918,  921,  922,  923,  924,  925,  926,  927,  928,
+      929,  930,  931,  932,  933,  934,  935,  936,  937,  938,
+
+      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
+      949,  950,  951,  952,  953,  954,  955,  956,  957,  958,
+      959,  960,  961,  963,  964,  967,  968,  969,  970,  962,
+      972,  965,  973,  974,  971,  966,  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, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+     1009, 1010, 1011, 1012, 1013,  986, 1014, 1015, 1016, 1017,
+     1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
+     1028, 1029, 1030, 1032, 1033, 1034, 1035, 1031, 1036, 1037,
+
+     1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
+     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1058,
+     1059, 1060, 1057, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
+     1088, 1089, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
+     1099, 1100, 1101, 1090, 1102, 1103, 1104, 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, 1130, 1131, 1132, 1133, 1111, 1134, 1135, 1110,
+
+     1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145,
+     1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155,
+     1156, 1157, 1160, 1161, 1162, 1163, 1158, 1164, 1165, 1166,
+     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
+     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1185, 1186, 1187,
+     1188, 1189, 1190, 1191, 1192, 1193, 1194, 1184, 1195, 1196,
+     1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
+     1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1159,
+     1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+     1226, 1227, 1228, 1229, 1231, 1230, 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, 1229, 1230, 1257, 1258, 1259, 1260, 1261, 1262, 1263,
+     1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273,
+     1274, 1275, 1277, 1279, 1280, 1281, 1276, 1282, 1283, 1284,
+     1285, 1286, 1287, 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, 1278, 1321, 1322, 1323,
+     1324, 1325, 1326, 1327, 1328, 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, 1343, 1366, 1367, 1368, 1369, 1370, 1344, 1371,
+     1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381,
+     1382, 1383, 1384, 1385, 1386, 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, 1416, 1417, 1418, 1419, 1420, 1421,
+     1422, 1423, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432,
+
+     1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442,
+     1443, 1444, 1445, 1446, 1447, 1448, 1450, 1451, 1452, 1453,
+     1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
+     1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1443, 1472,
+     1473, 1474, 1475, 1476, 1424, 1477, 1478, 1479, 1480, 1481,
+     1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1449,
+     1491, 1492, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1493,
+     1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510,
+     1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1521,
+     1522, 1524, 1523, 1520, 1525, 1526, 1527, 1528, 1529, 1530,
+
+     1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540,
+     1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550,
+     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1536, 1559,
+     1560, 1561, 1562, 1563, 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, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599,
+     1603, 1600, 1604, 1605, 1601, 1606, 1607, 1602, 1608, 1609,
+     1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
+     1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1629, 1630,
+
+     1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1628, 1639,
+     1640, 1641, 1642, 1616, 1643, 1644, 1645, 1646, 1647, 1648,
+     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, 1649, 1707, 1708,
+     1709, 1710, 1711, 1713, 1714, 1715, 1716, 1712, 1717, 1718,
+     1719, 1693, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727,
+
+     1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737,
+     1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747,
+     1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757,
+     1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767,
+     1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777,
+     1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787,
+     1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797,
+     1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807,
+     1808, 1809, 1810, 1811, 1812, 1813, 1815, 1816, 1817, 1818,
+     1814, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827,
+
+     1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837,
+     1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847,
+     1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857,
+     1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867,
+     1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877,
+     1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887,
+     1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+     1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907,
+     1908, 1909, 1910, 1911, 1912, 1913, 1915, 1916, 1914, 1917,
+     1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927,
+
+     1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937,
+     1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947,
+     1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957,
+     1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
+     1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
+     1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
+     1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+     1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+     2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
+     2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027,
+
+     2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
+     2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
+     2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057,
+     2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067,
+     2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077,
+     2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087,
+     2088, 2089, 2090, 2091, 2092, 2093, 2094, 2096, 2095, 2097,
+     2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
+     2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117,
+     2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127,
+
+     2128, 2129, 2130, 2131, 2132, 2133, 2134,   12,   12,   12,
+       36,   36,   36,   79,   98,   79,  100,  100,  100,  114,
+      114,  114,  188,  856,  188,  209,  209,  209,  855,  852,
+      851,  850,  849,  848,  847,  846,  845,  844,  841,  840,
+      839,  838,  837,  836,  835,  834,  833,  832,  831,  830,
+      829,  828,  827,  826,  825,  824,  823,  822,  821,  820,
+      819,  818,  817,  816,  812,  811,  810,  809,  808,  807,
+      806,  805,  804,  803,  800,  799,  798,  797,  796,  795,
+      794,  793,  792,  791,  790,  789,  788,  787,  786,  785,
+      784,  783,  782,  781,  780,  779,  776,  775,  774,  773,
+
+      772,  771,  770,  769,  768,  767,  766,  765,  764,  763,
+      762,  761,  760,  759,  758,  757,  756,  755,  754,  753,
+      752,  751,  750,  749,  746,  745,  744,  743,  742,  741,
+      740,  739,  738,  737,  736,  735,  734,  733,  732,  731,
+      730,  724,  723,  722,  721,  720,  719,  718,  717,  716,
+      715,  714,  713,  712,  711,  710,  709,  708,  707,  706,
+      705,  702,  701,  700,  699,  698,  697,  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,  667,  666,  665,  664,  663,  662,
+
+      661,  660,  659,  658,  657,  654,  653,  652,  651,  650,
+      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  636,  635,  634,  633,  630,  629,  628,
+      627,  626,  625,  624,  623,  622,  619,  618,  617,  610,
+      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
+      599,  598,  597,  593,  592,  591,  589,  588,  587,  584,
+      583,  582,  581,  580,  579,  578,  577,  576,  575,  574,
+      573,  572,  571,  570,  569,  568,  565,  564,  563,  562,
+      561,  560,  559,  556,  555,  552,  551,  550,  549,  546,
+      545,  542,  541,  540,  539,  538,  537,  536,  535,  534,
+
+      533,  532,  531,  530,  526,  525,  524,  521,  520,  519,
+      514,  513,  512,  511,  510,  509,  508,  507,  506,  505,
+      504,  503,  502,  497,  496,  495,  494,  493,  492,  491,
+      490,  489,  488,  487,  486,  485,  484,  481,  480,  479,
+      478,  475,  474,  473,  472,  471,  470,  469,  468,  467,
+      466,  465,  464,  463,  462,  459,  458,  456,  454,  452,
+      449,  448,  447,  446,  445,  443,  442,  441,  439,  438,
+      437,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  424,  423,  422,  419,  418,  417,  416,  415,  414,
+      413,  412,  411,  410,  409,  408,  407,  406,  403,  402,
+
+      399,  398,  397,  396,  394,  393,  392,  391,  390,  389,
+      385,  384,  383,  382,  381,  380,  379,  376,  375,  374,
+      373,  372,  371,  370,  369,  368,  367,  366,  365,  364,
+      363,  362,  361,  360,  359,  358,  357,  356,  355,  354,
+      353,  352,  351,  345,  344,  343,  342,  341,  340,  339,
+      338,  336,  210,  333,  331,  329,  326,  324,  317,  316,
+      315,  314,  313,  311,  310,  309,  307,  306,  305,  302,
+      301,  300,  296,  286,  283,  279,  278,  273,  272,  271,
+      268,  266,  265,  264,  263,  262,  261,  258,  257,  256,
+      253,  252,  251,  248,  247,  243,  242,  234,  233,  232,
+
+      231,  227,  226,  225,  221,  220,  219,  215,  210,  199,
+      198,  196,  195,  186,  166,  143,  108,  105,  104,   43,
+       99,   97,   96,   87,   43, 2135,   11, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135
+
     } ;
 
-static const flex_int16_t yy_chk[2559] =
+static const flex_int16_t yy_chk[2601] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-       21,  662,    3,    3,    3,   21,    1,    1,    3,   44,
-      726,    1,    4,    4,    4,   13,    1,   13,    4,   27,
-       28,    1,  106,    1,    5,    5,    5,   26,   32,    1,
+       21,  672,    3,    3,    3,   21,    1,    1,    3,   44,
+        0,    1,    4,    4,    4,   13,    1,   13,    4,   27,
+       28,    1,  107,    1,    5,    5,    5,   26,   32,    1,
         1,   33,    6,    6,    6,    7,    7,    7,    1,    7,
-      662,    8,    8,    8,    1,    8,   44,   27,   28,  106,
+      672,    8,    8,    8,    1,    8,   44,   27,   28,  107,
        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,   50,   37,    2,   42,
        51,   42,    9,    2,   53,    2,   55,   56,   31,   64,
-       10,    2,    2,   47,   64,  249,   25,   64,   25,   50,
+       10,    2,    2,   47,   64,  252,   25,   64,   25,   50,
         2,   25,   25,   25,   25,   25,    2,   53,   51,   55,
-      727,   56,  249,    2,    2,   15,   15,   15,   15,   15,
+      729,   56,  252,    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,
@@ -1761,264 +1778,269 @@ static const flex_int16_t yy_chk[2559] =
        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,   17,  109,
+       15,   15,   15,   15,   15,   15,   15,   15,   17,  110,
        17,   17,   17,   17,   17,   19,   58,   19,   19,   19,
-       19,   19,  320,   17,   20,   20,   20,   20,   20,   22,
-       19,   22,   22,   22,   22,   22,  109,   20,   89,   90,
+       19,   19,  325,   17,   20,   20,   20,   20,   20,   22,
+       19,   22,   22,   22,   22,   22,  110,   20,   90,   91,
        54,   59,   58,   61,   22,   59,   17,   62,   58,   59,
-       54,  320,   59,   19,   60,   59,   61,   60,   60,   59,
-       20,   60,   60,   54,   89,   90,   61,   22,   45,   69,
+       54,  325,   59,   19,   60,   59,   61,   60,   60,   59,
+       20,   60,   60,   54,   90,   91,   61,   22,   45,   69,
        62,   45,   45,   45,   60,   45,   45,   45,   54,   57,
-       63,   62,   45,   45,  347,   45,   57,   63,   69,  347,
+       63,   62,   45,   45,  308,   45,   57,   63,   69,  308,
 
        69,   45,   69,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   91,   65,   57,   73,   67,   67,
-       57,   73,   67,  147,   57,   65,   68,   65,   67,  728,
-       68,   92,   57,   70,   68,  111,   57,   99,   57,   57,
-       76,   70,   91,   70,  147,  132,   68,   94,   70,   70,
-       68,   71,   74,   93,   71,   71,   74,   92,  132,   74,
-       75,   75,  111,   76,  112,   71,   74,   74,   71,  102,
-       75,   74,   74,   76,   99,   94,  105,  108,   76,   93,
-       75,   79,   79,   79,   79,   79,   80,  112,   80,   80,
-
-       80,   80,   80,   75,   79,   75,  165,  102,   75,   75,
-      165,   80,  105,  729,   81,  108,   81,  101,   75,   81,
-       81,   81,   81,   81,  101,   75,   82,   79,   82,   82,
-       82,   82,   82,  110,   80,   83,   83,   83,   83,   83,
-      116,   82,   87,   87,   87,   87,   87,  107,   83,   88,
-       88,   88,   88,   88,  101,  730,  118,  116,  101,  133,
-      139,  110,  101,  122,   82,  118,  154,  143,  116,  118,
-      101,   83,  122,  122,  101,  133,  101,  101,  107,  115,
-      143,  156,  126,  126,  131,  188,  131,  115,  115,  115,
-      115,  115,  126,  167,  154,  160,  115,  115,  115,  115,
-
-      115,  115,  136,  131,  139,  136,  180,  186,  188,  136,
-      160,  160,  160,  163,  189,  191,  163,  163,  269,  115,
-      115,  115,  115,  115,  115,  187,  190,  156,  167,  167,
-      167,  173,  169,  194,  180,  186,  169,  197,  191,  167,
-      169,  167,  189,  167,  167,  173,  167,  198,  201,  203,
-      205,  187,  190,  211,  220,  221,  194,  220,  287,  731,
-      264,  287,  441,  221,  257,  197,  325,  441,  269,  221,
-      308,  201,  203,  313,  198,  272,  211,  205,  209,  209,
-      209,  209,  209,  264,  301,  272,  301,  209,  209,  209,
-      209,  209,  209,  308,  325,  316,  313,  352,  322,  332,
-
-      381,  381,  381,  352,  405,  606,  381,  308,  606,  389,
-      209,  209,  209,  209,  209,  209,  475,  257,  316,  389,
-      257,  322,  330,  330,  330,  330,  330,  732,  332,  475,
-      558,  330,  330,  330,  330,  330,  330,  367,  385,  390,
-      446,  408,  367,  416,  385,  408,  424,  416,  486,  452,
-      424,  452,  454,  486,  330,  330,  330,  330,  330,  330,
-      510,  471,  405,  733,  584,  585,  712,  390,  446,  471,
-      510,  471,  471,  471,  551,  471,  452,  588,  452,  551,
-      454,  586,  558,  734,  588,  735,  586,  637,  637,  702,
-      367,  584,  713,  585,  712,  367,  453,  453,  453,  453,
-
-      453,  702,  736,  737,  738,  453,  453,  453,  453,  453,
-      453,  674,  739,  740,  741,  713,  674,  724,  724,  742,
-      724,  743,  745,  746,  747,  748,  749,  750,  453,  453,
-      453,  453,  453,  453,  744,  751,  753,  754,  744,  755,
-      756,  757,  744,  758,  759,  760,  761,  762,  763,  764,
-      765,  766,  767,  768,  769,  674,  770,  771,  772,  773,
-      774,  775,  773,  776,  778,  779,  780,  781,  782,  783,
-      784,  785,  786,  787,  789,  790,  791,  792,  793,  794,
-      795,  796,  797,  798,  799,  801,  802,  803,  804,  805,
-      806,  807,  808,  809,  810,  811,  812,  813,  814,  815,
-
-      816,  817,  818,  819,  820,  821,  822,  823,  824,  818,
-      825,  820,  826,  827,  824,  820,  829,  830,  831,  832,
-      833,  834,  835,  836,  837,  838,  839,  840,  841,  842,
-      843,  844,  845,  846,  848,  849,  850,  851,  852,  853,
-      854,  855,  856,  857,  858,  859,  860,  861,  862,  863,
-      864,  865,  866,  838,  867,  868,  869,  870,  871,  872,
-      873,  874,  875,  876,  877,  879,  880,  881,  882,  883,
-      884,  885,  886,  887,  888,  884,  889,  890,  891,  892,
-      893,  894,  895,  898,  899,  900,  901,  902,  903,  904,
-      907,  908,  909,  910,  911,  913,  914,  915,  916,  917,
-
-      914,  918,  919,  920,  921,  923,  925,  926,  927,  928,
-      929,  930,  931,  932,  933,  934,  935,  936,  937,  938,
-      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
-      949,  950,  951,  952,  953,  954,  955,  956,  957,  959,
-      947,  960,  961,  962,  963,  964,  965,  966,  967,  968,
-      969,  970,  971,  973,  974,  975,  976,  977,  978,  979,
-      980,  981,  982,  983,  984,  985,  986,  987,  988,  989,
-      990,  967,  991,  992,  966,  993,  994,  995,  996,  998,
-      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
-     1009, 1010, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1020,
-
-     1021, 1016, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
-     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
-     1040, 1041, 1042, 1043, 1044, 1047, 1048, 1049, 1051, 1052,
-     1053, 1054, 1041, 1056, 1057, 1058, 1059, 1060, 1061, 1062,
-     1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072,
-     1073, 1075, 1076, 1077, 1016, 1078, 1079, 1080, 1081, 1082,
-     1083, 1084, 1085, 1086, 1087, 1088, 1090, 1089, 1091, 1092,
-     1093, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
-     1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113,
-     1114, 1116, 1117, 1088, 1089, 1118, 1119, 1120, 1121, 1122,
-
-     1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132,
-     1133, 1134, 1136, 1137, 1138, 1139, 1140, 1141, 1137, 1142,
-     1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152,
-     1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162,
-     1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1173,
-     1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1138, 1182,
-     1184, 1185, 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, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
-
-     1228, 1204, 1229, 1230, 1231, 1232, 1233, 1205, 1234, 1235,
-     1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
-     1246, 1249, 1251, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
-     1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1270,
-     1271, 1272, 1274, 1275, 1276, 1277, 1278, 1280, 1282, 1284,
-     1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
-     1296, 1297, 1298, 1299, 1301, 1302, 1303, 1304, 1305, 1306,
-     1307, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1318, 1319,
-     1320, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330,
-     1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
-
-     1341, 1342, 1343, 1344, 1315, 1346, 1347, 1348, 1349, 1350,
-     1351, 1352, 1295, 1353, 1354, 1355, 1356, 1357, 1358, 1359,
-     1360, 1361, 1362, 1363, 1365, 1322, 1366, 1367, 1368, 1369,
-     1370, 1371, 1372, 1373, 1374, 1367, 1375, 1378, 1379, 1380,
-     1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390,
-     1392, 1393, 1394, 1395, 1396, 1398, 1400, 1398, 1395, 1401,
-     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1414,
-     1415, 1416, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425,
-     1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435,
-     1437, 1412, 1438, 1440, 1441, 1442, 1443, 1444, 1445, 1446,
-
-     1447, 1448, 1449, 1450, 1452, 1454, 1456, 1457, 1459, 1460,
-     1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1470, 1471,
-     1472, 1473, 1474, 1475, 1476, 1477, 1480, 1481, 1483, 1484,
-     1485, 1486, 1488, 1489, 1488, 1490, 1491, 1488, 1492, 1493,
-     1488, 1494, 1495, 1496, 1497, 1499, 1501, 1502, 1504, 1505,
-     1506, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516,
-     1517, 1518, 1519, 1520, 1521, 1523, 1524, 1525, 1526, 1515,
-     1528, 1529, 1530, 1531, 1502, 1532, 1533, 1534, 1535, 1535,
-     1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545,
-     1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555,
-
-     1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565,
-     1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
-     1577, 1578, 1579, 1580, 1581, 1582, 1585, 1586, 1587, 1590,
-     1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1536, 1599,
-     1600, 1601, 1603, 1604, 1605, 1606, 1607, 1603, 1608, 1609,
-     1610, 1580, 1611, 1613, 1614, 1615, 1617, 1618, 1620, 1621,
-     1622, 1624, 1625, 1626, 1627, 1628, 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, 1656, 1658, 1659, 1660, 1662, 1663, 1664, 1665, 1666,
-
-     1667, 1668, 1669, 1670, 1671, 1672, 1673, 1675, 1676, 1677,
-     1678, 1679, 1681, 1682, 1683, 1685, 1686, 1687, 1688, 1689,
-     1690, 1691, 1692, 1693, 1694, 1696, 1697, 1698, 1699, 1700,
-     1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710,
-     1711, 1712, 1713, 1714, 1715, 1717, 1719, 1720, 1721, 1715,
-     1723, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733,
-     1734, 1735, 1736, 1737, 1738, 1739, 1740, 1742, 1743, 1744,
-     1745, 1746, 1747, 1748, 1749, 1750, 1752, 1753, 1754, 1755,
-     1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
-     1767, 1769, 1770, 1771, 1772, 1773, 1775, 1776, 1777, 1778,
-
-     1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1789, 1790,
-     1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800,
-     1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812,
-     1814, 1815, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824,
-     1825, 1826, 1827, 1828, 1829, 1830, 1828, 1831, 1832, 1833,
-     1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1843, 1844,
-     1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1855,
-     1857, 1859, 1861, 1863, 1864, 1865, 1866, 1867, 1868, 1869,
-     1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1880,
-     1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
-
-     1892, 1893, 1895, 1896, 1897, 1898, 1899, 1901, 1902, 1904,
-     1906, 1908, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917,
-     1919, 1920, 1921, 1922, 1923, 1924, 1925, 1927, 1928, 1929,
-     1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939,
-     1940, 1941, 1942, 1943, 1944, 1945, 1947, 1948, 1949, 1950,
-     1951, 1952, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961,
-     1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,
-     1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981,
-     1983, 1984, 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1994,
-     2000, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013,
-
-     2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023, 2024,
-     2025, 2026, 2027, 2029, 2031, 2033, 2034, 2035, 2036, 2037,
-     2038, 2040, 2041, 2042, 2043, 2044, 2043, 2045, 2046, 2048,
-     2049, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060,
-     2061, 2062, 2063, 2064, 2065, 2066, 2068, 2069, 2070, 2071,
-     2074, 2075, 2076, 2078, 2079, 2081, 2083, 2084, 2085, 2086,
-     2087, 2088, 2089, 2090, 2092, 2097, 2097, 2097, 2098, 2098,
-     2098, 2099, 2100, 2099, 2101, 2101, 2101, 2102, 2102, 2102,
-     2103,  725, 2103, 2104, 2104, 2104,  723,  722,  721,  720,
-      719,  718,  717,  716,  715,  714,  709,  708,  707,  706,
-
-      705,  704,  703,  701,  700,  699,  697,  696,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  673,  672,
-      670,  669,  668,  667,  666,  665,  664,  663,  661,  660,
-      659,  658,  656,  655,  653,  652,  651,  650,  649,  648,
-      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
-      636,  635,  634,  633,  632,  631,  629,  628,  627,  626,
-      625,  624,  623,  622,  620,  619,  618,  617,  616,  615,
-      614,  613,  612,  611,  610,  609,  608,  607,  605,  604,
-      603,  602,  601,  600,  599,  598,  597,  596,  595,  594,
-
-      593,  592,  591,  590,  589,  580,  579,  578,  577,  575,
-      573,  571,  569,  568,  567,  566,  565,  564,  563,  562,
-      561,  560,  559,  557,  556,  555,  554,  553,  552,  550,
-      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
-      539,  537,  535,  534,  533,  532,  531,  530,  529,  528,
-      527,  526,  525,  524,  523,  522,  521,  520,  518,  517,
-      516,  515,  514,  513,  512,  511,  509,  508,  507,  506,
-      505,  504,  503,  502,  501,  500,  499,  498,  497,  496,
-      495,  494,  493,  492,  490,  489,  488,  487,  485,  484,
-      483,  482,  481,  480,  479,  477,  476,  474,  473,  472,
-
-      470,  468,  467,  466,  465,  464,  463,  461,  460,  459,
-      458,  457,  456,  455,  450,  448,  447,  445,  442,  440,
-      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
-      429,  428,  427,  426,  425,  423,  422,  421,  420,  419,
-      418,  417,  415,  414,  413,  412,  411,  410,  409,  407,
-      406,  404,  403,  402,  401,  400,  399,  398,  397,  396,
-      395,  394,  393,  392,  388,  387,  386,  384,  383,  382,
-      380,  379,  378,  377,  376,  375,  374,  373,  372,  371,
-      370,  369,  368,  366,  365,  364,  363,  362,  361,  360,
-      359,  358,  357,  356,  355,  354,  353,  351,  350,  349,
-
-      348,  346,  345,  344,  343,  342,  341,  340,  339,  338,
-      337,  336,  335,  334,  333,  329,  327,  323,  321,  319,
-      312,  311,  310,  309,  307,  306,  305,  304,  303,  302,
-      300,  299,  298,  297,  296,  295,  294,  293,  292,  291,
-      290,  289,  288,  286,  285,  284,  283,  282,  281,  280,
-      279,  278,  277,  276,  275,  274,  273,  271,  270,  268,
-      267,  266,  265,  263,  262,  261,  260,  259,  258,  256,
-      255,  254,  253,  252,  251,  250,  248,  247,  245,  244,
-      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
-      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
-
-      223,  222,  219,  218,  217,  216,  215,  214,  213,  212,
-      210,  206,  204,  202,  200,  195,  192,  184,  183,  182,
-      181,  179,  178,  177,  176,  175,  174,  172,  171,  170,
-      168,  166,  164,  162,  161,  159,  158,  157,  155,  153,
-      152,  151,  150,  149,  148,  146,  145,  144,  142,  141,
-      140,  138,  137,  135,  134,  130,  129,  128,  127,  125,
-      124,  123,  121,  120,  119,  117,  113,  104,  103,   97,
-       96,   77,   72,   66,   52,   49,   48,   43,   41,   39,
-       38,   24,   14,   11, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
-     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096
+       45,   45,   45,   45,   92,   65,   57,   73,   67,   67,
+       57,   73,   67,   78,   57,   65,   68,   65,   67,  134,
+       68,  108,   57,   70,   68,  113,   57,  112,   57,   57,
+       76,   70,   92,   70,  566,  134,   68,   78,   70,   70,
+       68,   71,   74,   93,   71,   71,   74,   78,  113,   74,
+       75,   75,  108,   76,  112,   71,   74,   74,   71,   95,
+       75,   74,   74,   76,   94,  103,  106,  100,   76,   93,
+       75,   80,   80,   80,   80,   80,   81,  730,   81,   81,
+
+       81,   81,   81,   75,   80,   75,  566,   95,   75,   75,
+       94,   81,  106,  103,   82,  731,   82,  140,   75,   82,
+       82,   82,   82,   82,  100,   75,   83,   80,   83,   83,
+       83,   83,   83,  102,   81,   84,   84,   84,   84,   84,
+      102,   83,   88,   88,   88,   88,   88,  109,   84,   89,
+       89,   89,   89,   89,  111,  117,  119,  123,  127,  127,
+      132,  140,  132,  133,   83,  119,  123,  123,  127,  119,
+      102,   84,  117,  155,  102,  109,  133,  137,  102,  132,
+      137,  157,  111,  117,  137,  144,  102,  148,  647,  647,
+      102,  166,  102,  102,  116,  166,  164,  732,  144,  164,
+
+      164,  155,  116,  116,  116,  116,  116,  161,  148,  168,
+      191,  116,  116,  116,  116,  116,  116,  170,  174,  194,
+      178,  170,  161,  161,  161,  170,  182,  157,  189,  197,
+      192,  260,  174,  191,  116,  116,  116,  116,  116,  116,
+      190,  193,  194,  200,  168,  168,  168,  178,  201,  204,
+      206,  208,  197,  214,  182,  168,  189,  168,  192,  168,
+      168,  223,  168,  304,  223,  304,  190,  193,  272,  733,
+      734,  200,  204,  206,  267,  201,  214,  330,  208,  212,
+      212,  212,  212,  212,  260,  275,  224,  260,  212,  212,
+      212,  212,  212,  212,  224,  275,  290,  267,  312,  290,
+
+      224,  318,  321,  327,  337,  330,  410,  418,  735,  394,
+      517,  212,  212,  212,  212,  212,  212,  352,  272,  394,
+      517,  312,  352,  357,  318,  321,  327,  372,  390,  357,
+      395,  482,  372,  337,  390,  312,  335,  335,  335,  335,
+      335,  736,  738,  739,  482,  335,  335,  335,  335,  335,
+      335,  386,  386,  386,  453,  413,  418,  386,  395,  413,
+      461,  421,  429,  594,  410,  421,  429,  740,  335,  335,
+      335,  335,  335,  335,  447,  459,  741,  459,  493,  447,
+      372,  478,  453,  493,  595,  372,  713,  742,  461,  478,
+      594,  478,  478,  478,  559,  478,  596,  616,  713,  559,
+
+      616,  596,  459,  598,  459,  460,  460,  460,  460,  460,
+      598,  726,  595,  743,  460,  460,  460,  460,  460,  460,
+      684,  725,  744,  737,  737,  684,  737,  745,  746,  747,
+      748,  749,  750,  751,  726,  752,  753,  460,  460,  460,
+      460,  460,  460,  754,  755,  756,  757,  758,  759,  725,
+      757,  760,  761,  762,  757,  763,  764,  766,  767,  768,
+      769,  770,  771,  772,  684,  773,  774,  775,  776,  777,
+      778,  779,  780,  781,  782,  783,  784,  785,  786,  787,
+      788,  786,  789,  791,  792,  793,  794,  795,  796,  797,
+      798,  799,  800,  802,  803,  804,  805,  806,  807,  808,
+
+      809,  810,  811,  812,  814,  815,  816,  817,  818,  819,
+      820,  821,  822,  823,  824,  825,  826,  827,  828,  829,
+      830,  831,  832,  833,  834,  835,  836,  837,  838,  832,
+      839,  834,  840,  841,  838,  834,  843,  844,  845,  846,
+      847,  848,  849,  850,  851,  852,  853,  854,  855,  856,
+      857,  858,  859,  860,  861,  862,  864,  865,  866,  867,
+      868,  869,  870,  871,  872,  873,  874,  875,  876,  877,
+      878,  879,  880,  881,  882,  854,  883,  884,  885,  886,
+      887,  888,  889,  890,  891,  892,  893,  895,  896,  897,
+      898,  899,  900,  901,  902,  903,  904,  900,  905,  906,
+
+      907,  908,  909,  910,  911,  914,  915,  916,  917,  918,
+      919,  920,  923,  924,  925,  926,  927,  929,  930,  931,
+      932,  933,  930,  934,  935,  936,  937,  939,  941,  942,
+      943,  944,  945,  946,  947,  948,  949,  950,  951,  952,
+      953,  954,  955,  956,  957,  958,  959,  960,  961,  962,
+      963,  964,  965,  966,  967,  968,  969,  970,  971,  972,
+      973,  974,  976,  964,  977,  978,  979,  980,  981,  982,
+      983,  984,  985,  986,  987,  988,  989,  990,  992,  993,
+      994,  995,  996,  997,  998,  999, 1000, 1001, 1002, 1003,
+     1004, 1005, 1006, 1007, 1008, 1009,  986, 1010, 1011,  985,
+
+     1012, 1013, 1014, 1015, 1017, 1018, 1019, 1020, 1021, 1022,
+     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1031, 1032, 1033,
+     1034, 1035, 1036, 1037, 1039, 1040, 1035, 1041, 1042, 1043,
+     1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
+     1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063,
+     1066, 1067, 1068, 1070, 1071, 1072, 1073, 1060, 1074, 1076,
+     1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086,
+     1087, 1088, 1089, 1090, 1091, 1092, 1093, 1095, 1096, 1035,
+     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
+     1107, 1108, 1109, 1110, 1112, 1111, 1113, 1114, 1115, 1117,
+
+     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+     1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1138,
+     1139, 1110, 1111, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
+     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
+     1158, 1159, 1160, 1161, 1162, 1163, 1159, 1164, 1165, 1166,
+     1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176,
+     1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
+     1187, 1188, 1189, 1190, 1191, 1192, 1193, 1195, 1196, 1197,
+     1198, 1199, 1200, 1201, 1202, 1203, 1160, 1204, 1205, 1207,
+     1208, 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, 1239,
+     1240, 1241, 1242, 1244, 1245, 1246, 1247, 1248, 1249, 1250,
+     1251, 1253, 1229, 1254, 1255, 1256, 1257, 1258, 1230, 1259,
+     1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269,
+     1270, 1271, 1274, 1276, 1278, 1279, 1280, 1281, 1282, 1283,
+     1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+     1295, 1296, 1297, 1299, 1300, 1301, 1302, 1303, 1305, 1307,
+     1309, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
+     1320, 1321, 1322, 1323, 1324, 1325, 1327, 1328, 1329, 1330,
+
+     1331, 1332, 1333, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
+     1343, 1344, 1346, 1347, 1348, 1350, 1351, 1352, 1353, 1354,
+     1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364,
+     1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1343, 1374,
+     1375, 1376, 1377, 1378, 1321, 1379, 1380, 1381, 1382, 1383,
+     1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1350,
+     1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1395,
+     1403, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414,
+     1415, 1416, 1417, 1418, 1419, 1421, 1422, 1423, 1424, 1425,
+     1427, 1429, 1427, 1424, 1430, 1433, 1434, 1435, 1436, 1437,
+
+     1438, 1439, 1440, 1441, 1442, 1443, 1445, 1446, 1447, 1449,
+     1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459,
+     1460, 1461, 1462, 1463, 1464, 1465, 1466, 1468, 1443, 1469,
+     1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480,
+     1481, 1483, 1485, 1487, 1488, 1490, 1491, 1492, 1493, 1494,
+     1495, 1496, 1497, 1498, 1499, 1501, 1502, 1503, 1504, 1505,
+     1506, 1507, 1508, 1512, 1513, 1515, 1516, 1517, 1518, 1520,
+     1521, 1520, 1522, 1523, 1520, 1524, 1525, 1520, 1526, 1527,
+     1528, 1529, 1530, 1532, 1534, 1535, 1536, 1538, 1539, 1540,
+     1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551,
+
+     1552, 1553, 1554, 1555, 1557, 1558, 1559, 1560, 1549, 1562,
+     1563, 1564, 1565, 1536, 1566, 1567, 1568, 1569, 1569, 1570,
+     1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
+     1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590,
+     1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600,
+     1601, 1602, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611,
+     1612, 1613, 1614, 1616, 1617, 1618, 1621, 1622, 1623, 1626,
+     1627, 1628, 1629, 1630, 1631, 1632, 1633, 1570, 1634, 1635,
+     1636, 1637, 1639, 1640, 1641, 1642, 1643, 1639, 1644, 1645,
+     1646, 1616, 1647, 1649, 1650, 1651, 1653, 1654, 1656, 1657,
+
+     1658, 1660, 1661, 1662, 1663, 1664, 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, 1693, 1695, 1696, 1697, 1699, 1700, 1701, 1702,
+     1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1712, 1713,
+     1714, 1715, 1716, 1718, 1719, 1720, 1722, 1723, 1724, 1725,
+     1726, 1727, 1728, 1729, 1730, 1731, 1733, 1734, 1735, 1736,
+     1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
+     1747, 1748, 1749, 1750, 1751, 1752, 1754, 1756, 1757, 1758,
+     1752, 1759, 1761, 1763, 1764, 1765, 1766, 1767, 1768, 1769,
+
+     1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1780,
+     1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1790, 1791,
+     1792, 1793, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802,
+     1803, 1804, 1805, 1807, 1808, 1809, 1810, 1811, 1813, 1814,
+     1815, 1816, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826,
+     1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837,
+     1838, 1839, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849,
+     1850, 1851, 1853, 1854, 1856, 1857, 1858, 1859, 1860, 1861,
+     1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1867, 1870,
+     1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
+
+     1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891,
+     1892, 1894, 1896, 1898, 1900, 1902, 1903, 1904, 1905, 1906,
+     1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916,
+     1917, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927,
+     1928, 1929, 1931, 1932, 1934, 1935, 1936, 1937, 1938, 1940,
+     1941, 1943, 1945, 1947, 1949, 1950, 1951, 1952, 1953, 1954,
+     1955, 1956, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1966,
+     1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
+     1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1986, 1987,
+     1988, 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
+
+     1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+     2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,
+     2019, 2020, 2022, 2023, 2025, 2026, 2027, 2028, 2030, 2031,
+     2032, 2033, 2039, 2043, 2044, 2045, 2046, 2047, 2048, 2049,
+     2050, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2061,
+     2062, 2063, 2064, 2065, 2066, 2068, 2070, 2072, 2073, 2074,
+     2075, 2076, 2077, 2079, 2080, 2081, 2082, 2083, 2082, 2084,
+     2085, 2087, 2088, 2091, 2092, 2093, 2094, 2095, 2096, 2097,
+     2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2107, 2108,
+     2109, 2110, 2113, 2114, 2115, 2117, 2118, 2120, 2122, 2123,
+
+     2124, 2125, 2126, 2127, 2128, 2129, 2131, 2136, 2136, 2136,
+     2137, 2137, 2137, 2138, 2139, 2138, 2140, 2140, 2140, 2141,
+     2141, 2141, 2142,  728, 2142, 2143, 2143, 2143,  727,  722,
+      721,  720,  719,  718,  717,  716,  715,  714,  712,  711,
+      710,  708,  707,  706,  705,  704,  703,  702,  701,  700,
+      699,  698,  697,  696,  694,  693,  692,  691,  690,  689,
+      688,  687,  686,  685,  683,  682,  680,  679,  678,  677,
+      676,  675,  674,  673,  671,  670,  669,  668,  666,  665,
+      663,  662,  661,  660,  659,  658,  657,  656,  655,  654,
+      653,  652,  651,  650,  649,  648,  646,  645,  644,  643,
+
+      642,  641,  639,  638,  637,  636,  635,  634,  633,  632,
+      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
+      620,  619,  618,  617,  615,  614,  613,  612,  611,  610,
+      609,  608,  607,  606,  605,  604,  603,  602,  601,  600,
+      599,  590,  589,  588,  587,  586,  584,  582,  580,  578,
+      577,  576,  575,  574,  573,  572,  571,  570,  569,  568,
+      567,  565,  564,  563,  562,  561,  560,  558,  557,  556,
+      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
+      544,  542,  541,  540,  539,  538,  537,  536,  535,  534,
+      533,  532,  531,  530,  529,  528,  527,  525,  524,  523,
+
+      522,  521,  520,  519,  518,  516,  515,  514,  513,  512,
+      511,  510,  509,  508,  507,  506,  505,  504,  503,  502,
+      501,  500,  499,  497,  496,  495,  494,  492,  491,  490,
+      489,  488,  487,  486,  484,  483,  481,  480,  479,  477,
+      475,  474,  473,  472,  471,  470,  468,  467,  466,  465,
+      464,  463,  462,  457,  455,  454,  452,  449,  448,  446,
+      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
+      435,  434,  433,  432,  431,  430,  428,  427,  426,  425,
+      424,  423,  422,  420,  419,  417,  416,  415,  414,  412,
+      411,  409,  408,  407,  406,  405,  404,  403,  402,  401,
+
+      400,  399,  398,  397,  393,  392,  391,  389,  388,  387,
+      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
+      375,  374,  373,  371,  370,  369,  368,  367,  366,  365,
+      364,  363,  362,  361,  360,  359,  358,  356,  355,  354,
+      353,  351,  350,  349,  348,  347,  346,  345,  344,  343,
+      342,  341,  340,  339,  338,  334,  332,  328,  326,  324,
+      317,  316,  315,  314,  313,  311,  310,  309,  307,  306,
+      305,  303,  302,  301,  300,  299,  298,  297,  296,  295,
+      294,  293,  292,  291,  289,  288,  287,  286,  285,  284,
+      283,  282,  281,  280,  279,  278,  277,  276,  274,  273,
+
+      271,  270,  269,  268,  266,  265,  264,  263,  262,  261,
+      259,  258,  257,  256,  255,  254,  253,  251,  250,  248,
+      247,  246,  245,  244,  243,  242,  241,  240,  239,  238,
+      237,  236,  235,  234,  233,  232,  231,  230,  229,  228,
+      227,  226,  225,  222,  221,  220,  219,  218,  217,  216,
+      215,  213,  209,  207,  205,  203,  198,  195,  187,  186,
+      185,  184,  183,  181,  180,  179,  177,  176,  175,  173,
+      172,  171,  169,  167,  165,  163,  162,  160,  159,  158,
+      156,  154,  153,  152,  151,  150,  149,  147,  146,  145,
+      143,  142,  141,  139,  138,  136,  135,  131,  130,  129,
+
+      128,  126,  125,  124,  122,  121,  120,  118,  114,  105,
+      104,   98,   97,   77,   72,   66,   52,   49,   48,   43,
+       41,   39,   38,   24,   14,   11, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2027,7 +2049,7 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[221] =
+static const flex_int16_t yy_rule_linenum[224] =
     {   0,
       148,  150,  152,  157,  158,  163,  164,  165,  177,  180,
       185,  192,  201,  210,  219,  228,  237,  246,  255,  264,
@@ -2035,24 +2057,25 @@ static const flex_int16_t yy_rule_linenum[221] =
       373,  383,  392,  402,  412,  422,  432,  441,  450,  459,
       468,  477,  486,  495,  504,  513,  522,  531,  540,  549,
       558,  567,  576,  585,  598,  607,  616,  625,  636,  647,
-      658,  669,  681,  692,  703,  714,  725,  734,  743,  752,
-      763,  772,  783,  794,  805,  816,  828,  840,  852,  864,
-      876,  888,  899,  910,  919,  928,  937,  946,  955,  966,
-      977,  988,  999, 1010, 1021, 1032, 1044, 1054, 1065, 1074,
-
-     1083, 1098, 1114, 1123, 1132, 1141, 1150, 1159, 1168, 1177,
-     1186, 1195, 1204, 1228, 1252, 1261, 1271, 1281, 1290, 1300,
-     1311, 1320, 1329, 1338, 1347, 1356, 1367, 1378, 1389, 1399,
-     1408, 1417, 1426, 1437, 1448, 1459, 1470, 1481, 1490, 1499,
-     1508, 1517, 1526, 1535, 1544, 1553, 1562, 1572, 1584, 1597,
-     1606, 1615, 1625, 1635, 1644, 1655, 1665, 1674, 1684, 1694,
-     1703, 1712, 1721, 1730, 1740, 1749, 1758, 1767, 1776, 1785,
-     1794, 1803, 1812, 1821, 1830, 1839, 1848, 1857, 1866, 1875,
-     1884, 1893, 1902, 1911, 1920, 1929, 1938, 1947, 1956, 1965,
-     1974, 1983, 1992, 2001, 2010, 2019, 2028, 2037, 2046, 2055,
-
-     2064, 2073, 2174, 2190, 2239, 2247, 2262, 2263, 2264, 2265,
-     2266, 2267, 2269, 2287, 2300, 2305, 2309, 2311, 2313, 2315
+      658,  669,  681,  692,  703,  714,  725,  736,  747,  758,
+      767,  776,  785,  796,  805,  816,  827,  838,  849,  861,
+      873,  885,  897,  909,  921,  932,  943,  952,  961,  970,
+      979,  988,  999, 1010, 1021, 1032, 1043, 1054, 1065, 1077,
+
+     1087, 1098, 1107, 1116, 1131, 1147, 1156, 1165, 1174, 1183,
+     1192, 1201, 1210, 1219, 1228, 1237, 1261, 1285, 1294, 1304,
+     1314, 1323, 1333, 1344, 1353, 1362, 1371, 1380, 1389, 1400,
+     1411, 1422, 1432, 1441, 1450, 1459, 1470, 1481, 1492, 1503,
+     1514, 1523, 1532, 1541, 1550, 1559, 1568, 1577, 1586, 1595,
+     1605, 1617, 1630, 1639, 1648, 1658, 1668, 1677, 1688, 1698,
+     1707, 1717, 1727, 1736, 1745, 1754, 1763, 1773, 1782, 1791,
+     1800, 1809, 1818, 1827, 1836, 1845, 1854, 1863, 1872, 1881,
+     1890, 1899, 1908, 1917, 1926, 1935, 1944, 1953, 1962, 1971,
+     1980, 1989, 1998, 2007, 2016, 2025, 2034, 2043, 2052, 2061,
+
+     2070, 2079, 2088, 2097, 2106, 2207, 2223, 2272, 2280, 2295,
+     2296, 2297, 2298, 2299, 2300, 2302, 2320, 2333, 2338, 2342,
+     2344, 2346, 2348
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2106,7 +2129,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 2109 "dhcp6_lexer.cc"
+#line 2132 "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
@@ -2132,8 +2155,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 2135 "dhcp6_lexer.cc"
-#line 2136 "dhcp6_lexer.cc"
+#line 2158 "dhcp6_lexer.cc"
+#line 2159 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2463,7 +2486,7 @@ YY_DECL
     }
 
 
-#line 2466 "dhcp6_lexer.cc"
+#line 2489 "dhcp6_lexer.cc"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -2492,13 +2515,13 @@ YY_DECL
 			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 >= 2097 )
+				if ( yy_current_state >= 2136 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 2096 );
+		while ( yy_current_state != 2135 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -2517,13 +2540,13 @@ YY_DECL
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 221 )
+			else if ( yy_act < 224 )
 				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
 				         (long)yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 221 )
+			else if ( yy_act == 224 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         yytext );
-			else if ( yy_act == 222 )
+			else if ( yy_act == 225 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -3305,9 +3328,9 @@ YY_RULE_SETUP
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::CONFIG_DATABASE:
-        return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_READ_TIMEOUT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_STRING("read-timeout", driver.loc_);
     }
 }
 	YY_BREAK
@@ -3319,15 +3342,57 @@ YY_RULE_SETUP
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
     case isc::dhcp::Parser6Context::CONFIG_DATABASE:
-        return isc::dhcp::Dhcp6Parser::make_ON_FAIL(driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_WRITE_TIMEOUT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp6Parser::make_STRING("on-fail", driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_STRING("write-timeout", driver.loc_);
     }
 }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 725 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_TCP_USER_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("tcp-user-timeout", driver.loc_);
+    }
+}
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 736 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
+    }
+}
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 747 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_ON_FAIL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("on-fail", driver.loc_);
+    }
+}
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 758 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_ON_FAIL:
@@ -3337,9 +3402,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 68:
+case 71:
 YY_RULE_SETUP
-#line 734 "dhcp6_lexer.ll"
+#line 767 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_ON_FAIL:
@@ -3349,9 +3414,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 69:
+case 72:
 YY_RULE_SETUP
-#line 743 "dhcp6_lexer.ll"
+#line 776 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_ON_FAIL:
@@ -3361,9 +3426,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 70:
+case 73:
 YY_RULE_SETUP
-#line 752 "dhcp6_lexer.ll"
+#line 785 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3375,9 +3440,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 71:
+case 74:
 YY_RULE_SETUP
-#line 763 "dhcp6_lexer.ll"
+#line 796 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3387,9 +3452,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 72:
+case 75:
 YY_RULE_SETUP
-#line 772 "dhcp6_lexer.ll"
+#line 805 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3401,9 +3466,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 73:
+case 76:
 YY_RULE_SETUP
-#line 783 "dhcp6_lexer.ll"
+#line 816 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3415,9 +3480,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 74:
+case 77:
 YY_RULE_SETUP
-#line 794 "dhcp6_lexer.ll"
+#line 827 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3429,9 +3494,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 75:
+case 78:
 YY_RULE_SETUP
-#line 805 "dhcp6_lexer.ll"
+#line 838 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3443,9 +3508,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 76:
+case 79:
 YY_RULE_SETUP
-#line 816 "dhcp6_lexer.ll"
+#line 849 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3458,9 +3523,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 77:
+case 80:
 YY_RULE_SETUP
-#line 828 "dhcp6_lexer.ll"
+#line 861 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3473,9 +3538,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 78:
+case 81:
 YY_RULE_SETUP
-#line 840 "dhcp6_lexer.ll"
+#line 873 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3488,9 +3553,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 79:
+case 82:
 YY_RULE_SETUP
-#line 852 "dhcp6_lexer.ll"
+#line 885 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3503,9 +3568,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 80:
+case 83:
 YY_RULE_SETUP
-#line 864 "dhcp6_lexer.ll"
+#line 897 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3518,9 +3583,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 81:
+case 84:
 YY_RULE_SETUP
-#line 876 "dhcp6_lexer.ll"
+#line 909 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3533,9 +3598,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 82:
+case 85:
 YY_RULE_SETUP
-#line 888 "dhcp6_lexer.ll"
+#line 921 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3547,9 +3612,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 83:
+case 86:
 YY_RULE_SETUP
-#line 899 "dhcp6_lexer.ll"
+#line 932 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3561,9 +3626,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 84:
+case 87:
 YY_RULE_SETUP
-#line 910 "dhcp6_lexer.ll"
+#line 943 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3573,9 +3638,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 85:
+case 88:
 YY_RULE_SETUP
-#line 919 "dhcp6_lexer.ll"
+#line 952 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3585,9 +3650,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 86:
+case 89:
 YY_RULE_SETUP
-#line 928 "dhcp6_lexer.ll"
+#line 961 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3597,9 +3662,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 87:
+case 90:
 YY_RULE_SETUP
-#line 937 "dhcp6_lexer.ll"
+#line 970 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3609,9 +3674,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 88:
+case 91:
 YY_RULE_SETUP
-#line 946 "dhcp6_lexer.ll"
+#line 979 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3621,9 +3686,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 89:
+case 92:
 YY_RULE_SETUP
-#line 955 "dhcp6_lexer.ll"
+#line 988 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3635,9 +3700,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 90:
+case 93:
 YY_RULE_SETUP
-#line 966 "dhcp6_lexer.ll"
+#line 999 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3649,9 +3714,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 91:
+case 94:
 YY_RULE_SETUP
-#line 977 "dhcp6_lexer.ll"
+#line 1010 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3663,9 +3728,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 92:
+case 95:
 YY_RULE_SETUP
-#line 988 "dhcp6_lexer.ll"
+#line 1021 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3677,9 +3742,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 93:
+case 96:
 YY_RULE_SETUP
-#line 999 "dhcp6_lexer.ll"
+#line 1032 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3691,9 +3756,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 94:
+case 97:
 YY_RULE_SETUP
-#line 1010 "dhcp6_lexer.ll"
+#line 1043 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3705,9 +3770,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 95:
+case 98:
 YY_RULE_SETUP
-#line 1021 "dhcp6_lexer.ll"
+#line 1054 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3719,9 +3784,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 96:
+case 99:
 YY_RULE_SETUP
-#line 1032 "dhcp6_lexer.ll"
+#line 1065 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3733,9 +3798,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 97:
+case 100:
 YY_RULE_SETUP
-#line 1044 "dhcp6_lexer.ll"
+#line 1077 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3746,9 +3811,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 98:
+case 101:
 YY_RULE_SETUP
-#line 1054 "dhcp6_lexer.ll"
+#line 1087 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3760,9 +3825,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 99:
+case 102:
 YY_RULE_SETUP
-#line 1065 "dhcp6_lexer.ll"
+#line 1098 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3772,9 +3837,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 100:
+case 103:
 YY_RULE_SETUP
-#line 1074 "dhcp6_lexer.ll"
+#line 1107 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3784,9 +3849,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 101:
+case 104:
 YY_RULE_SETUP
-#line 1083 "dhcp6_lexer.ll"
+#line 1116 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3802,9 +3867,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 102:
+case 105:
 YY_RULE_SETUP
-#line 1098 "dhcp6_lexer.ll"
+#line 1131 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -3821,9 +3886,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 103:
+case 106:
 YY_RULE_SETUP
-#line 1114 "dhcp6_lexer.ll"
+#line 1147 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3833,9 +3898,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 104:
+case 107:
 YY_RULE_SETUP
-#line 1123 "dhcp6_lexer.ll"
+#line 1156 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3845,9 +3910,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 105:
+case 108:
 YY_RULE_SETUP
-#line 1132 "dhcp6_lexer.ll"
+#line 1165 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3857,9 +3922,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 106:
+case 109:
 YY_RULE_SETUP
-#line 1141 "dhcp6_lexer.ll"
+#line 1174 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3869,9 +3934,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 107:
+case 110:
 YY_RULE_SETUP
-#line 1150 "dhcp6_lexer.ll"
+#line 1183 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3881,9 +3946,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 108:
+case 111:
 YY_RULE_SETUP
-#line 1159 "dhcp6_lexer.ll"
+#line 1192 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3893,9 +3958,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 109:
+case 112:
 YY_RULE_SETUP
-#line 1168 "dhcp6_lexer.ll"
+#line 1201 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3905,9 +3970,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 110:
+case 113:
 YY_RULE_SETUP
-#line 1177 "dhcp6_lexer.ll"
+#line 1210 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3917,9 +3982,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 111:
+case 114:
 YY_RULE_SETUP
-#line 1186 "dhcp6_lexer.ll"
+#line 1219 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -3929,9 +3994,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 112:
+case 115:
 YY_RULE_SETUP
-#line 1195 "dhcp6_lexer.ll"
+#line 1228 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -3941,9 +4006,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 113:
+case 116:
 YY_RULE_SETUP
-#line 1204 "dhcp6_lexer.ll"
+#line 1237 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3968,9 +4033,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 114:
+case 117:
 YY_RULE_SETUP
-#line 1228 "dhcp6_lexer.ll"
+#line 1261 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3995,9 +4060,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 115:
+case 118:
 YY_RULE_SETUP
-#line 1252 "dhcp6_lexer.ll"
+#line 1285 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4007,9 +4072,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 116:
+case 119:
 YY_RULE_SETUP
-#line 1261 "dhcp6_lexer.ll"
+#line 1294 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4020,9 +4085,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 117:
+case 120:
 YY_RULE_SETUP
-#line 1271 "dhcp6_lexer.ll"
+#line 1304 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4033,9 +4098,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 118:
+case 121:
 YY_RULE_SETUP
-#line 1281 "dhcp6_lexer.ll"
+#line 1314 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4045,9 +4110,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 119:
+case 122:
 YY_RULE_SETUP
-#line 1290 "dhcp6_lexer.ll"
+#line 1323 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4058,9 +4123,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 120:
+case 123:
 YY_RULE_SETUP
-#line 1300 "dhcp6_lexer.ll"
+#line 1333 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4072,9 +4137,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 121:
+case 124:
 YY_RULE_SETUP
-#line 1311 "dhcp6_lexer.ll"
+#line 1344 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4084,9 +4149,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 122:
+case 125:
 YY_RULE_SETUP
-#line 1320 "dhcp6_lexer.ll"
+#line 1353 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4096,9 +4161,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 123:
+case 126:
 YY_RULE_SETUP
-#line 1329 "dhcp6_lexer.ll"
+#line 1362 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4108,9 +4173,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 124:
+case 127:
 YY_RULE_SETUP
-#line 1338 "dhcp6_lexer.ll"
+#line 1371 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4120,9 +4185,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 125:
+case 128:
 YY_RULE_SETUP
-#line 1347 "dhcp6_lexer.ll"
+#line 1380 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -4132,9 +4197,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 126:
+case 129:
 YY_RULE_SETUP
-#line 1356 "dhcp6_lexer.ll"
+#line 1389 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4146,9 +4211,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 127:
+case 130:
 YY_RULE_SETUP
-#line 1367 "dhcp6_lexer.ll"
+#line 1400 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4160,9 +4225,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 128:
+case 131:
 YY_RULE_SETUP
-#line 1378 "dhcp6_lexer.ll"
+#line 1411 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4174,9 +4239,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 129:
+case 132:
 YY_RULE_SETUP
-#line 1389 "dhcp6_lexer.ll"
+#line 1422 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4187,9 +4252,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 130:
+case 133:
 YY_RULE_SETUP
-#line 1399 "dhcp6_lexer.ll"
+#line 1432 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4199,9 +4264,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 131:
+case 134:
 YY_RULE_SETUP
-#line 1408 "dhcp6_lexer.ll"
+#line 1441 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4211,9 +4276,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 132:
+case 135:
 YY_RULE_SETUP
-#line 1417 "dhcp6_lexer.ll"
+#line 1450 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4223,9 +4288,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 133:
+case 136:
 YY_RULE_SETUP
-#line 1426 "dhcp6_lexer.ll"
+#line 1459 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4237,9 +4302,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 134:
+case 137:
 YY_RULE_SETUP
-#line 1437 "dhcp6_lexer.ll"
+#line 1470 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4251,9 +4316,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 135:
+case 138:
 YY_RULE_SETUP
-#line 1448 "dhcp6_lexer.ll"
+#line 1481 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4265,9 +4330,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 136:
+case 139:
 YY_RULE_SETUP
-#line 1459 "dhcp6_lexer.ll"
+#line 1492 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4279,9 +4344,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 137:
+case 140:
 YY_RULE_SETUP
-#line 1470 "dhcp6_lexer.ll"
+#line 1503 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4293,9 +4358,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 138:
+case 141:
 YY_RULE_SETUP
-#line 1481 "dhcp6_lexer.ll"
+#line 1514 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4305,9 +4370,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 139:
+case 142:
 YY_RULE_SETUP
-#line 1490 "dhcp6_lexer.ll"
+#line 1523 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -4317,9 +4382,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 140:
+case 143:
 YY_RULE_SETUP
-#line 1499 "dhcp6_lexer.ll"
+#line 1532 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4329,9 +4394,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 141:
+case 144:
 YY_RULE_SETUP
-#line 1508 "dhcp6_lexer.ll"
+#line 1541 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4341,9 +4406,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 142:
+case 145:
 YY_RULE_SETUP
-#line 1517 "dhcp6_lexer.ll"
+#line 1550 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4353,9 +4418,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 143:
+case 146:
 YY_RULE_SETUP
-#line 1526 "dhcp6_lexer.ll"
+#line 1559 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4365,9 +4430,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 144:
+case 147:
 YY_RULE_SETUP
-#line 1535 "dhcp6_lexer.ll"
+#line 1568 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -4377,9 +4442,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 145:
+case 148:
 YY_RULE_SETUP
-#line 1544 "dhcp6_lexer.ll"
+#line 1577 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -4389,9 +4454,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 146:
+case 149:
 YY_RULE_SETUP
-#line 1553 "dhcp6_lexer.ll"
+#line 1586 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -4401,9 +4466,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 147:
+case 150:
 YY_RULE_SETUP
-#line 1562 "dhcp6_lexer.ll"
+#line 1595 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4414,9 +4479,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 148:
+case 151:
 YY_RULE_SETUP
-#line 1572 "dhcp6_lexer.ll"
+#line 1605 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4429,9 +4494,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 149:
+case 152:
 YY_RULE_SETUP
-#line 1584 "dhcp6_lexer.ll"
+#line 1617 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4445,9 +4510,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 150:
+case 153:
 YY_RULE_SETUP
-#line 1597 "dhcp6_lexer.ll"
+#line 1630 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -4457,9 +4522,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 151:
+case 154:
 YY_RULE_SETUP
-#line 1606 "dhcp6_lexer.ll"
+#line 1639 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -4469,9 +4534,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 152:
+case 155:
 YY_RULE_SETUP
-#line 1615 "dhcp6_lexer.ll"
+#line 1648 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4482,9 +4547,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 153:
+case 156:
 YY_RULE_SETUP
-#line 1625 "dhcp6_lexer.ll"
+#line 1658 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4495,9 +4560,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 154:
+case 157:
 YY_RULE_SETUP
-#line 1635 "dhcp6_lexer.ll"
+#line 1668 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4507,9 +4572,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 155:
+case 158:
 YY_RULE_SETUP
-#line 1644 "dhcp6_lexer.ll"
+#line 1677 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -4521,9 +4586,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 156:
+case 159:
 YY_RULE_SETUP
-#line 1655 "dhcp6_lexer.ll"
+#line 1688 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4534,9 +4599,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 157:
+case 160:
 YY_RULE_SETUP
-#line 1665 "dhcp6_lexer.ll"
+#line 1698 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -4546,9 +4611,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 158:
+case 161:
 YY_RULE_SETUP
-#line 1674 "dhcp6_lexer.ll"
+#line 1707 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -4559,9 +4624,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 159:
+case 162:
 YY_RULE_SETUP
-#line 1684 "dhcp6_lexer.ll"
+#line 1717 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4572,9 +4637,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 160:
+case 163:
 YY_RULE_SETUP
-#line 1694 "dhcp6_lexer.ll"
+#line 1727 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -4584,9 +4649,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 161:
+case 164:
 YY_RULE_SETUP
-#line 1703 "dhcp6_lexer.ll"
+#line 1736 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4596,9 +4661,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 162:
+case 165:
 YY_RULE_SETUP
-#line 1712 "dhcp6_lexer.ll"
+#line 1745 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4608,9 +4673,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 163:
+case 166:
 YY_RULE_SETUP
-#line 1721 "dhcp6_lexer.ll"
+#line 1754 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -4620,9 +4685,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 164:
+case 167:
 YY_RULE_SETUP
-#line 1730 "dhcp6_lexer.ll"
+#line 1763 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -4633,9 +4698,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 165:
+case 168:
 YY_RULE_SETUP
-#line 1740 "dhcp6_lexer.ll"
+#line 1773 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -4645,9 +4710,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 166:
+case 169:
 YY_RULE_SETUP
-#line 1749 "dhcp6_lexer.ll"
+#line 1782 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4657,9 +4722,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 167:
+case 170:
 YY_RULE_SETUP
-#line 1758 "dhcp6_lexer.ll"
+#line 1791 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4669,9 +4734,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 168:
+case 171:
 YY_RULE_SETUP
-#line 1767 "dhcp6_lexer.ll"
+#line 1800 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -4681,9 +4746,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 169:
+case 172:
 YY_RULE_SETUP
-#line 1776 "dhcp6_lexer.ll"
+#line 1809 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4693,9 +4758,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 170:
+case 173:
 YY_RULE_SETUP
-#line 1785 "dhcp6_lexer.ll"
+#line 1818 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4705,9 +4770,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 171:
+case 174:
 YY_RULE_SETUP
-#line 1794 "dhcp6_lexer.ll"
+#line 1827 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4717,9 +4782,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 172:
+case 175:
 YY_RULE_SETUP
-#line 1803 "dhcp6_lexer.ll"
+#line 1836 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -4729,9 +4794,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 173:
+case 176:
 YY_RULE_SETUP
-#line 1812 "dhcp6_lexer.ll"
+#line 1845 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4741,9 +4806,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 174:
+case 177:
 YY_RULE_SETUP
-#line 1821 "dhcp6_lexer.ll"
+#line 1854 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4753,9 +4818,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 175:
+case 178:
 YY_RULE_SETUP
-#line 1830 "dhcp6_lexer.ll"
+#line 1863 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4765,9 +4830,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 176:
+case 179:
 YY_RULE_SETUP
-#line 1839 "dhcp6_lexer.ll"
+#line 1872 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -4777,9 +4842,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 177:
+case 180:
 YY_RULE_SETUP
-#line 1848 "dhcp6_lexer.ll"
+#line 1881 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4789,9 +4854,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 178:
+case 181:
 YY_RULE_SETUP
-#line 1857 "dhcp6_lexer.ll"
+#line 1890 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4801,9 +4866,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 179:
+case 182:
 YY_RULE_SETUP
-#line 1866 "dhcp6_lexer.ll"
+#line 1899 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4813,9 +4878,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 180:
+case 183:
 YY_RULE_SETUP
-#line 1875 "dhcp6_lexer.ll"
+#line 1908 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4825,9 +4890,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 181:
+case 184:
 YY_RULE_SETUP
-#line 1884 "dhcp6_lexer.ll"
+#line 1917 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4837,9 +4902,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 182:
+case 185:
 YY_RULE_SETUP
-#line 1893 "dhcp6_lexer.ll"
+#line 1926 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4849,9 +4914,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 183:
+case 186:
 YY_RULE_SETUP
-#line 1902 "dhcp6_lexer.ll"
+#line 1935 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -4861,9 +4926,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 184:
+case 187:
 YY_RULE_SETUP
-#line 1911 "dhcp6_lexer.ll"
+#line 1944 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4873,9 +4938,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 185:
+case 188:
 YY_RULE_SETUP
-#line 1920 "dhcp6_lexer.ll"
+#line 1953 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4885,9 +4950,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 186:
+case 189:
 YY_RULE_SETUP
-#line 1929 "dhcp6_lexer.ll"
+#line 1962 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4897,9 +4962,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 187:
+case 190:
 YY_RULE_SETUP
-#line 1938 "dhcp6_lexer.ll"
+#line 1971 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4909,9 +4974,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 188:
+case 191:
 YY_RULE_SETUP
-#line 1947 "dhcp6_lexer.ll"
+#line 1980 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING:
@@ -4921,9 +4986,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 189:
+case 192:
 YY_RULE_SETUP
-#line 1956 "dhcp6_lexer.ll"
+#line 1989 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4933,9 +4998,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 190:
+case 193:
 YY_RULE_SETUP
-#line 1965 "dhcp6_lexer.ll"
+#line 1998 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4945,9 +5010,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 191:
+case 194:
 YY_RULE_SETUP
-#line 1974 "dhcp6_lexer.ll"
+#line 2007 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -4957,9 +5022,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 192:
+case 195:
 YY_RULE_SETUP
-#line 1983 "dhcp6_lexer.ll"
+#line 2016 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -4969,9 +5034,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 193:
+case 196:
 YY_RULE_SETUP
-#line 1992 "dhcp6_lexer.ll"
+#line 2025 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -4981,9 +5046,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 194:
+case 197:
 YY_RULE_SETUP
-#line 2001 "dhcp6_lexer.ll"
+#line 2034 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -4993,9 +5058,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 195:
+case 198:
 YY_RULE_SETUP
-#line 2010 "dhcp6_lexer.ll"
+#line 2043 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL:
@@ -5005,9 +5070,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 196:
+case 199:
 YY_RULE_SETUP
-#line 2019 "dhcp6_lexer.ll"
+#line 2052 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -5017,9 +5082,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 197:
+case 200:
 YY_RULE_SETUP
-#line 2028 "dhcp6_lexer.ll"
+#line 2061 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -5029,9 +5094,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 198:
+case 201:
 YY_RULE_SETUP
-#line 2037 "dhcp6_lexer.ll"
+#line 2070 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -5041,9 +5106,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 199:
+case 202:
 YY_RULE_SETUP
-#line 2046 "dhcp6_lexer.ll"
+#line 2079 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -5053,9 +5118,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 200:
+case 203:
 YY_RULE_SETUP
-#line 2055 "dhcp6_lexer.ll"
+#line 2088 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -5065,9 +5130,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 201:
+case 204:
 YY_RULE_SETUP
-#line 2064 "dhcp6_lexer.ll"
+#line 2097 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::COMPATIBILITY:
@@ -5077,9 +5142,9 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 202:
+case 205:
 YY_RULE_SETUP
-#line 2073 "dhcp6_lexer.ll"
+#line 2106 "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.
@@ -5181,10 +5246,10 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
 	YY_BREAK
-case 203:
-/* rule 203 can match eol */
+case 206:
+/* rule 206 can match eol */
 YY_RULE_SETUP
-#line 2174 "dhcp6_lexer.ll"
+#line 2207 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     std::string raw(yytext+1);
@@ -5201,10 +5266,10 @@ YY_RULE_SETUP
                  pos + 1);
 }
 	YY_BREAK
-case 204:
-/* rule 204 can match eol */
+case 207:
+/* rule 207 can match eol */
 YY_RULE_SETUP
-#line 2190 "dhcp6_lexer.ll"
+#line 2223 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     std::string raw(yytext+1);
@@ -5254,9 +5319,9 @@ YY_RULE_SETUP
                  pos);
 }
 	YY_BREAK
-case 205:
+case 208:
 YY_RULE_SETUP
-#line 2239 "dhcp6_lexer.ll"
+#line 2272 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     std::string raw(yytext+1);
@@ -5265,9 +5330,9 @@ YY_RULE_SETUP
                  raw.size() + 1);
 }
 	YY_BREAK
-case 206:
+case 209:
 YY_RULE_SETUP
-#line 2247 "dhcp6_lexer.ll"
+#line 2280 "dhcp6_lexer.ll"
 {
     /* Bad string with an open unicode escape at the end */
     std::string raw(yytext+1);
@@ -5283,39 +5348,39 @@ YY_RULE_SETUP
                  pos + 1);
 }
 	YY_BREAK
-case 207:
+case 210:
 YY_RULE_SETUP
-#line 2262 "dhcp6_lexer.ll"
+#line 2295 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
 	YY_BREAK
-case 208:
+case 211:
 YY_RULE_SETUP
-#line 2263 "dhcp6_lexer.ll"
+#line 2296 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
 	YY_BREAK
-case 209:
+case 212:
 YY_RULE_SETUP
-#line 2264 "dhcp6_lexer.ll"
+#line 2297 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
 	YY_BREAK
-case 210:
+case 213:
 YY_RULE_SETUP
-#line 2265 "dhcp6_lexer.ll"
+#line 2298 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
 	YY_BREAK
-case 211:
+case 214:
 YY_RULE_SETUP
-#line 2266 "dhcp6_lexer.ll"
+#line 2299 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
 	YY_BREAK
-case 212:
+case 215:
 YY_RULE_SETUP
-#line 2267 "dhcp6_lexer.ll"
+#line 2300 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
 	YY_BREAK
-case 213:
+case 216:
 YY_RULE_SETUP
-#line 2269 "dhcp6_lexer.ll"
+#line 2302 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -5334,9 +5399,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
 	YY_BREAK
-case 214:
+case 217:
 YY_RULE_SETUP
-#line 2287 "dhcp6_lexer.ll"
+#line 2320 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -5350,43 +5415,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
 	YY_BREAK
-case 215:
+case 218:
 YY_RULE_SETUP
-#line 2300 "dhcp6_lexer.ll"
+#line 2333 "dhcp6_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
 	YY_BREAK
-case 216:
+case 219:
 YY_RULE_SETUP
-#line 2305 "dhcp6_lexer.ll"
+#line 2338 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
 	YY_BREAK
-case 217:
+case 220:
 YY_RULE_SETUP
-#line 2309 "dhcp6_lexer.ll"
+#line 2342 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
 	YY_BREAK
-case 218:
+case 221:
 YY_RULE_SETUP
-#line 2311 "dhcp6_lexer.ll"
+#line 2344 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
 	YY_BREAK
-case 219:
+case 222:
 YY_RULE_SETUP
-#line 2313 "dhcp6_lexer.ll"
+#line 2346 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
 	YY_BREAK
-case 220:
+case 223:
 YY_RULE_SETUP
-#line 2315 "dhcp6_lexer.ll"
+#line 2348 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 2317 "dhcp6_lexer.ll"
+#line 2350 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -5410,12 +5475,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
 	YY_BREAK
-case 221:
+case 224:
 YY_RULE_SETUP
-#line 2340 "dhcp6_lexer.ll"
+#line 2373 "dhcp6_lexer.ll"
 ECHO;
 	YY_BREAK
-#line 5418 "dhcp6_lexer.cc"
+#line 5483 "dhcp6_lexer.cc"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -5734,7 +5799,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 >= 2097 )
+			if ( yy_current_state >= 2136 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5767,11 +5832,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 >= 2097 )
+		if ( yy_current_state >= 2136 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 2096);
+	yy_is_jam = (yy_current_state == 2135);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -6520,7 +6585,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 2340 "dhcp6_lexer.ll"
+#line 2373 "dhcp6_lexer.ll"
 
 
 using namespace isc::dhcp;
diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll
index 48408aade1..dc100f08a2 100644
--- a/src/bin/dhcp6/dhcp6_lexer.ll
+++ b/src/bin/dhcp6/dhcp6_lexer.ll
@@ -699,6 +699,39 @@ ControlCharacterFill            [^"\\]|\\["\\/bfnrtu]
     }
 }
 
+\"read-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_READ_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("read-timeout", driver.loc_);
+    }
+}
+
+\"write-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_WRITE_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("write-timeout", driver.loc_);
+    }
+}
+
+\"tcp-user-timeout\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+    case isc::dhcp::Parser6Context::CONFIG_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_TCP_USER_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("tcp-user-timeout", driver.loc_);
+    }
+}
+
 \"reconnect-wait-time\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc
index 07b11ee67f..8e8b15543f 100644
--- a/src/bin/dhcp6/dhcp6_parser.cc
+++ b/src/bin/dhcp6/dhcp6_parser.cc
@@ -398,73 +398,73 @@ namespace isc { namespace dhcp {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 404 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
 #line 410 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
 #line 416 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
 #line 422 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 428 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 434 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 440 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_db_type: // db_type
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 446 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 452 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_hr_mode: // hr_mode
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 458 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_duid_type: // duid_type
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 464 "dhcp6_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 293 "dhcp6_parser.yy"
+#line 296 "dhcp6_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 470 "dhcp6_parser.cc"
         break;
@@ -744,133 +744,133 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 302 "dhcp6_parser.yy"
+#line 305 "dhcp6_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 750 "dhcp6_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 303 "dhcp6_parser.yy"
+#line 306 "dhcp6_parser.yy"
                       { ctx.ctx_ = ctx.CONFIG; }
 #line 756 "dhcp6_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 304 "dhcp6_parser.yy"
+#line 307 "dhcp6_parser.yy"
                  { ctx.ctx_ = ctx.DHCP6; }
 #line 762 "dhcp6_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 305 "dhcp6_parser.yy"
+#line 308 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 768 "dhcp6_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 306 "dhcp6_parser.yy"
+#line 309 "dhcp6_parser.yy"
                    { ctx.ctx_ = ctx.SUBNET6; }
 #line 774 "dhcp6_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 307 "dhcp6_parser.yy"
+#line 310 "dhcp6_parser.yy"
                  { ctx.ctx_ = ctx.POOLS; }
 #line 780 "dhcp6_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 308 "dhcp6_parser.yy"
+#line 311 "dhcp6_parser.yy"
                    { ctx.ctx_ = ctx.PD_POOLS; }
 #line 786 "dhcp6_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 309 "dhcp6_parser.yy"
+#line 312 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 792 "dhcp6_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 310 "dhcp6_parser.yy"
+#line 313 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.DHCP6; }
 #line 798 "dhcp6_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 311 "dhcp6_parser.yy"
+#line 314 "dhcp6_parser.yy"
                       { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 804 "dhcp6_parser.cc"
     break;
 
   case 22: // $@11: %empty
-#line 312 "dhcp6_parser.yy"
+#line 315 "dhcp6_parser.yy"
                        { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 810 "dhcp6_parser.cc"
     break;
 
   case 24: // $@12: %empty
-#line 313 "dhcp6_parser.yy"
+#line 316 "dhcp6_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 816 "dhcp6_parser.cc"
     break;
 
   case 26: // $@13: %empty
-#line 314 "dhcp6_parser.yy"
+#line 317 "dhcp6_parser.yy"
                      { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 822 "dhcp6_parser.cc"
     break;
 
   case 28: // $@14: %empty
-#line 315 "dhcp6_parser.yy"
+#line 318 "dhcp6_parser.yy"
                           { ctx.ctx_ = ctx.CONFIG_CONTROL; }
 #line 828 "dhcp6_parser.cc"
     break;
 
   case 30: // value: "integer"
-#line 323 "dhcp6_parser.yy"
+#line 326 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 834 "dhcp6_parser.cc"
     break;
 
   case 31: // value: "floating point"
-#line 324 "dhcp6_parser.yy"
+#line 327 "dhcp6_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 840 "dhcp6_parser.cc"
     break;
 
   case 32: // value: "boolean"
-#line 325 "dhcp6_parser.yy"
+#line 328 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 846 "dhcp6_parser.cc"
     break;
 
   case 33: // value: "constant string"
-#line 326 "dhcp6_parser.yy"
+#line 329 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 852 "dhcp6_parser.cc"
     break;
 
   case 34: // value: "null"
-#line 327 "dhcp6_parser.yy"
+#line 330 "dhcp6_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 858 "dhcp6_parser.cc"
     break;
 
   case 35: // value: map2
-#line 328 "dhcp6_parser.yy"
+#line 331 "dhcp6_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 864 "dhcp6_parser.cc"
     break;
 
   case 36: // value: list_generic
-#line 329 "dhcp6_parser.yy"
+#line 332 "dhcp6_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 870 "dhcp6_parser.cc"
     break;
 
   case 37: // sub_json: value
-#line 332 "dhcp6_parser.yy"
+#line 335 "dhcp6_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
@@ -879,7 +879,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 38: // $@15: %empty
-#line 337 "dhcp6_parser.yy"
+#line 340 "dhcp6_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -890,7 +890,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 39: // map2: "{" $@15 map_content "}"
-#line 342 "dhcp6_parser.yy"
+#line 345 "dhcp6_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -900,13 +900,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 40: // map_value: map2
-#line 348 "dhcp6_parser.yy"
+#line 351 "dhcp6_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 906 "dhcp6_parser.cc"
     break;
 
   case 43: // not_empty_map: "constant string" ":" value
-#line 355 "dhcp6_parser.yy"
+#line 358 "dhcp6_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
@@ -916,7 +916,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 360 "dhcp6_parser.yy"
+#line 363 "dhcp6_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -927,7 +927,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45: // not_empty_map: not_empty_map ","
-#line 366 "dhcp6_parser.yy"
+#line 369 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
@@ -935,7 +935,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 46: // $@16: %empty
-#line 371 "dhcp6_parser.yy"
+#line 374 "dhcp6_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -944,7 +944,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 47: // list_generic: "[" $@16 list_content "]"
-#line 374 "dhcp6_parser.yy"
+#line 377 "dhcp6_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
@@ -952,7 +952,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50: // not_empty_list: value
-#line 382 "dhcp6_parser.yy"
+#line 385 "dhcp6_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -961,7 +961,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51: // not_empty_list: not_empty_list "," value
-#line 386 "dhcp6_parser.yy"
+#line 389 "dhcp6_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -970,7 +970,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52: // not_empty_list: not_empty_list ","
-#line 390 "dhcp6_parser.yy"
+#line 393 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
@@ -978,7 +978,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 53: // $@17: %empty
-#line 396 "dhcp6_parser.yy"
+#line 399 "dhcp6_parser.yy"
                               {
     // List parsing about to start
 }
@@ -986,7 +986,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 54: // list_strings: "[" $@17 list_strings_content "]"
-#line 398 "dhcp6_parser.yy"
+#line 401 "dhcp6_parser.yy"
                                        {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -995,7 +995,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57: // not_empty_list_strings: "constant string"
-#line 407 "dhcp6_parser.yy"
+#line 410 "dhcp6_parser.yy"
                                {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1004,7 +1004,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 411 "dhcp6_parser.yy"
+#line 414 "dhcp6_parser.yy"
                                                             {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1013,7 +1013,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59: // not_empty_list_strings: not_empty_list_strings ","
-#line 415 "dhcp6_parser.yy"
+#line 418 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
@@ -1021,7 +1021,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 60: // unknown_map_entry: "constant string" ":"
-#line 425 "dhcp6_parser.yy"
+#line 428 "dhcp6_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
@@ -1032,7 +1032,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 61: // $@18: %empty
-#line 434 "dhcp6_parser.yy"
+#line 437 "dhcp6_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1043,7 +1043,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 62: // syntax_map: "{" $@18 global_object "}"
-#line 439 "dhcp6_parser.yy"
+#line 442 "dhcp6_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1056,7 +1056,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 63: // $@19: %empty
-#line 449 "dhcp6_parser.yy"
+#line 452 "dhcp6_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1071,7 +1071,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}"
-#line 458 "dhcp6_parser.yy"
+#line 461 "dhcp6_parser.yy"
                                                     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -1081,7 +1081,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 66: // global_object_comma: global_object ","
-#line 466 "dhcp6_parser.yy"
+#line 469 "dhcp6_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
@@ -1089,7 +1089,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 67: // $@20: %empty
-#line 472 "dhcp6_parser.yy"
+#line 475 "dhcp6_parser.yy"
                           {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1099,7 +1099,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 68: // sub_dhcp6: "{" $@20 global_params "}"
-#line 476 "dhcp6_parser.yy"
+#line 479 "dhcp6_parser.yy"
                                {
     // No global parameter is required
     // parsing completed
@@ -1108,7 +1108,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 71: // global_params: global_params ","
-#line 483 "dhcp6_parser.yy"
+#line 486 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
@@ -1116,7 +1116,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 137: // $@21: %empty
-#line 557 "dhcp6_parser.yy"
+#line 560 "dhcp6_parser.yy"
                                {
     ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1125,7 +1125,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 138: // data_directory: "data-directory" $@21 ":" "constant string"
-#line 560 "dhcp6_parser.yy"
+#line 563 "dhcp6_parser.yy"
                {
     ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data-directory", datadir);
@@ -1135,7 +1135,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 139: // preferred_lifetime: "preferred-lifetime" ":" "integer"
-#line 566 "dhcp6_parser.yy"
+#line 569 "dhcp6_parser.yy"
                                                      {
     ctx.unique("preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1145,7 +1145,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 140: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer"
-#line 572 "dhcp6_parser.yy"
+#line 575 "dhcp6_parser.yy"
                                                              {
     ctx.unique("min-preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1155,7 +1155,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 141: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer"
-#line 578 "dhcp6_parser.yy"
+#line 581 "dhcp6_parser.yy"
                                                              {
     ctx.unique("max-preferred-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1165,7 +1165,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 142: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 584 "dhcp6_parser.yy"
+#line 587 "dhcp6_parser.yy"
                                              {
     ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1175,7 +1175,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 143: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 590 "dhcp6_parser.yy"
+#line 593 "dhcp6_parser.yy"
                                                      {
     ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1185,7 +1185,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 144: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 596 "dhcp6_parser.yy"
+#line 599 "dhcp6_parser.yy"
                                                      {
     ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1195,7 +1195,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 145: // renew_timer: "renew-timer" ":" "integer"
-#line 602 "dhcp6_parser.yy"
+#line 605 "dhcp6_parser.yy"
                                        {
     ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1205,7 +1205,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 146: // rebind_timer: "rebind-timer" ":" "integer"
-#line 608 "dhcp6_parser.yy"
+#line 611 "dhcp6_parser.yy"
                                          {
     ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1215,7 +1215,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 147: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 614 "dhcp6_parser.yy"
+#line 617 "dhcp6_parser.yy"
                                                        {
     ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
     ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1225,7 +1225,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 148: // t1_percent: "t1-percent" ":" "floating point"
-#line 620 "dhcp6_parser.yy"
+#line 623 "dhcp6_parser.yy"
                                    {
     ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1235,7 +1235,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 149: // t2_percent: "t2-percent" ":" "floating point"
-#line 626 "dhcp6_parser.yy"
+#line 629 "dhcp6_parser.yy"
                                    {
     ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1245,7 +1245,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 150: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 632 "dhcp6_parser.yy"
+#line 635 "dhcp6_parser.yy"
                                              {
     ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
     ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1255,7 +1255,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 151: // cache_max_age: "cache-max-age" ":" "integer"
-#line 638 "dhcp6_parser.yy"
+#line 641 "dhcp6_parser.yy"
                                            {
     ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1265,7 +1265,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 152: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 644 "dhcp6_parser.yy"
+#line 647 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
     ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1275,7 +1275,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 153: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 650 "dhcp6_parser.yy"
+#line 653 "dhcp6_parser.yy"
                                                    {
     ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1285,7 +1285,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 154: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 656 "dhcp6_parser.yy"
+#line 659 "dhcp6_parser.yy"
                                                                {
     ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1295,7 +1295,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 155: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 662 "dhcp6_parser.yy"
+#line 665 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1305,7 +1305,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 156: // $@22: %empty
-#line 668 "dhcp6_parser.yy"
+#line 671 "dhcp6_parser.yy"
                                                    {
     ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
@@ -1314,7 +1314,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 157: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 671 "dhcp6_parser.yy"
+#line 674 "dhcp6_parser.yy"
                                        {
     ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1323,7 +1323,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 158: // ddns_replace_client_name_value: "when-present"
-#line 677 "dhcp6_parser.yy"
+#line 680 "dhcp6_parser.yy"
                  {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1331,7 +1331,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 159: // ddns_replace_client_name_value: "never"
-#line 680 "dhcp6_parser.yy"
+#line 683 "dhcp6_parser.yy"
           {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1339,7 +1339,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 160: // ddns_replace_client_name_value: "always"
-#line 683 "dhcp6_parser.yy"
+#line 686 "dhcp6_parser.yy"
            {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1347,7 +1347,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 161: // ddns_replace_client_name_value: "when-not-present"
-#line 686 "dhcp6_parser.yy"
+#line 689 "dhcp6_parser.yy"
                      {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
@@ -1355,7 +1355,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 162: // ddns_replace_client_name_value: "boolean"
-#line 689 "dhcp6_parser.yy"
+#line 692 "dhcp6_parser.yy"
             {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -1364,7 +1364,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 163: // $@23: %empty
-#line 695 "dhcp6_parser.yy"
+#line 698 "dhcp6_parser.yy"
                                              {
     ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1373,7 +1373,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 164: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 698 "dhcp6_parser.yy"
+#line 701 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-generated-prefix", s);
@@ -1383,7 +1383,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 165: // $@24: %empty
-#line 704 "dhcp6_parser.yy"
+#line 707 "dhcp6_parser.yy"
                                                {
     ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1392,7 +1392,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 166: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 707 "dhcp6_parser.yy"
+#line 710 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-qualifying-suffix", s);
@@ -1402,7 +1402,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 167: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 713 "dhcp6_parser.yy"
+#line 716 "dhcp6_parser.yy"
                                                          {
     ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1412,7 +1412,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 168: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 719 "dhcp6_parser.yy"
+#line 722 "dhcp6_parser.yy"
                                                                          {
     ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1422,7 +1422,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 169: // $@25: %empty
-#line 725 "dhcp6_parser.yy"
+#line 728 "dhcp6_parser.yy"
                                      {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1431,7 +1431,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 170: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 728 "dhcp6_parser.yy"
+#line 731 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
@@ -1441,7 +1441,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 171: // $@26: %empty
-#line 734 "dhcp6_parser.yy"
+#line 737 "dhcp6_parser.yy"
                                                      {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1450,7 +1450,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 172: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 737 "dhcp6_parser.yy"
+#line 740 "dhcp6_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
@@ -1460,7 +1460,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 173: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 743 "dhcp6_parser.yy"
+#line 746 "dhcp6_parser.yy"
                                                        {
     ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1470,7 +1470,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 174: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 749 "dhcp6_parser.yy"
+#line 752 "dhcp6_parser.yy"
                                                                              {
     ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
     ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1480,7 +1480,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 175: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 755 "dhcp6_parser.yy"
+#line 758 "dhcp6_parser.yy"
                                                                          {
     ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1490,7 +1490,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 176: // $@27: %empty
-#line 761 "dhcp6_parser.yy"
+#line 764 "dhcp6_parser.yy"
                        {
     ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1499,7 +1499,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 177: // server_tag: "server-tag" $@27 ":" "constant string"
-#line 764 "dhcp6_parser.yy"
+#line 767 "dhcp6_parser.yy"
                {
     ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
@@ -1509,7 +1509,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 178: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 770 "dhcp6_parser.yy"
+#line 773 "dhcp6_parser.yy"
                                                        {
     ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
     ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1519,7 +1519,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 179: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 776 "dhcp6_parser.yy"
+#line 779 "dhcp6_parser.yy"
                                                                                  {
     ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
     ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1529,7 +1529,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 180: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 782 "dhcp6_parser.yy"
+#line 785 "dhcp6_parser.yy"
                                                              {
     ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
     ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1539,7 +1539,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 181: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 788 "dhcp6_parser.yy"
+#line 791 "dhcp6_parser.yy"
                                                                    {
     ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
     ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1549,7 +1549,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 182: // $@28: %empty
-#line 794 "dhcp6_parser.yy"
+#line 797 "dhcp6_parser.yy"
                                      {
     ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1561,7 +1561,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 183: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}"
-#line 800 "dhcp6_parser.yy"
+#line 803 "dhcp6_parser.yy"
                                                                {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1571,7 +1571,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 184: // $@29: %empty
-#line 806 "dhcp6_parser.yy"
+#line 809 "dhcp6_parser.yy"
                                 {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1581,7 +1581,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 185: // sub_interfaces6: "{" $@29 interfaces_config_params "}"
-#line 810 "dhcp6_parser.yy"
+#line 813 "dhcp6_parser.yy"
                                           {
     // No interfaces config param is required
     // parsing completed
@@ -1590,7 +1590,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 188: // interfaces_config_params: interfaces_config_params ","
-#line 817 "dhcp6_parser.yy"
+#line 820 "dhcp6_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
@@ -1598,7 +1598,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 197: // $@30: %empty
-#line 832 "dhcp6_parser.yy"
+#line 835 "dhcp6_parser.yy"
                             {
     ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1610,7 +1610,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 198: // interfaces_list: "interfaces" $@30 ":" list_strings
-#line 838 "dhcp6_parser.yy"
+#line 841 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1619,7 +1619,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 199: // re_detect: "re-detect" ":" "boolean"
-#line 843 "dhcp6_parser.yy"
+#line 846 "dhcp6_parser.yy"
                                    {
     ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1629,7 +1629,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 200: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 849 "dhcp6_parser.yy"
+#line 852 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1639,7 +1639,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 201: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 855 "dhcp6_parser.yy"
+#line 858 "dhcp6_parser.yy"
                                                                                {
     ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1649,7 +1649,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 202: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 861 "dhcp6_parser.yy"
+#line 864 "dhcp6_parser.yy"
                                                                        {
     ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1659,7 +1659,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 203: // $@31: %empty
-#line 867 "dhcp6_parser.yy"
+#line 870 "dhcp6_parser.yy"
                                {
     ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1671,7 +1671,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 204: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}"
-#line 873 "dhcp6_parser.yy"
+#line 876 "dhcp6_parser.yy"
                                                           {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1682,7 +1682,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 205: // $@32: %empty
-#line 880 "dhcp6_parser.yy"
+#line 883 "dhcp6_parser.yy"
                                {
     ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1694,7 +1694,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 206: // hosts_database: "hosts-database" $@32 ":" "{" database_map_params "}"
-#line 886 "dhcp6_parser.yy"
+#line 889 "dhcp6_parser.yy"
                                                           {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1705,7 +1705,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 207: // $@33: %empty
-#line 893 "dhcp6_parser.yy"
+#line 896 "dhcp6_parser.yy"
                                  {
     ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1717,7 +1717,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 208: // hosts_databases: "hosts-databases" $@33 ":" "[" database_list "]"
-#line 899 "dhcp6_parser.yy"
+#line 902 "dhcp6_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1726,7 +1726,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 213: // not_empty_database_list: not_empty_database_list ","
-#line 910 "dhcp6_parser.yy"
+#line 913 "dhcp6_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
@@ -1734,7 +1734,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 214: // $@34: %empty
-#line 915 "dhcp6_parser.yy"
+#line 918 "dhcp6_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1744,7 +1744,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 215: // database: "{" $@34 database_map_params "}"
-#line 919 "dhcp6_parser.yy"
+#line 922 "dhcp6_parser.yy"
                                      {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1754,15 +1754,15 @@ namespace isc { namespace dhcp {
     break;
 
   case 218: // database_map_params: database_map_params ","
-#line 927 "dhcp6_parser.yy"
+#line 930 "dhcp6_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
 #line 1762 "dhcp6_parser.cc"
     break;
 
-  case 238: // $@35: %empty
-#line 953 "dhcp6_parser.yy"
+  case 241: // $@35: %empty
+#line 959 "dhcp6_parser.yy"
                     {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_TYPE);
@@ -1770,8 +1770,8 @@ namespace isc { namespace dhcp {
 #line 1771 "dhcp6_parser.cc"
     break;
 
-  case 239: // database_type: "type" $@35 ":" db_type
-#line 956 "dhcp6_parser.yy"
+  case 242: // database_type: "type" $@35 ":" db_type
+#line 962 "dhcp6_parser.yy"
                 {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1779,26 +1779,26 @@ namespace isc { namespace dhcp {
 #line 1780 "dhcp6_parser.cc"
     break;
 
-  case 240: // db_type: "memfile"
-#line 961 "dhcp6_parser.yy"
+  case 243: // db_type: "memfile"
+#line 967 "dhcp6_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1786 "dhcp6_parser.cc"
     break;
 
-  case 241: // db_type: "mysql"
-#line 962 "dhcp6_parser.yy"
+  case 244: // db_type: "mysql"
+#line 968 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1792 "dhcp6_parser.cc"
     break;
 
-  case 242: // db_type: "postgresql"
-#line 963 "dhcp6_parser.yy"
+  case 245: // db_type: "postgresql"
+#line 969 "dhcp6_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1798 "dhcp6_parser.cc"
     break;
 
-  case 243: // $@36: %empty
-#line 966 "dhcp6_parser.yy"
+  case 246: // $@36: %empty
+#line 972 "dhcp6_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1806,8 +1806,8 @@ namespace isc { namespace dhcp {
 #line 1807 "dhcp6_parser.cc"
     break;
 
-  case 244: // user: "user" $@36 ":" "constant string"
-#line 969 "dhcp6_parser.yy"
+  case 247: // user: "user" $@36 ":" "constant string"
+#line 975 "dhcp6_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1816,8 +1816,8 @@ namespace isc { namespace dhcp {
 #line 1817 "dhcp6_parser.cc"
     break;
 
-  case 245: // $@37: %empty
-#line 975 "dhcp6_parser.yy"
+  case 248: // $@37: %empty
+#line 981 "dhcp6_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1825,8 +1825,8 @@ namespace isc { namespace dhcp {
 #line 1826 "dhcp6_parser.cc"
     break;
 
-  case 246: // password: "password" $@37 ":" "constant string"
-#line 978 "dhcp6_parser.yy"
+  case 249: // password: "password" $@37 ":" "constant string"
+#line 984 "dhcp6_parser.yy"
                {
     ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1835,8 +1835,8 @@ namespace isc { namespace dhcp {
 #line 1836 "dhcp6_parser.cc"
     break;
 
-  case 247: // $@38: %empty
-#line 984 "dhcp6_parser.yy"
+  case 250: // $@38: %empty
+#line 990 "dhcp6_parser.yy"
            {
     ctx.unique("host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1844,8 +1844,8 @@ namespace isc { namespace dhcp {
 #line 1845 "dhcp6_parser.cc"
     break;
 
-  case 248: // host: "host" $@38 ":" "constant string"
-#line 987 "dhcp6_parser.yy"
+  case 251: // host: "host" $@38 ":" "constant string"
+#line 993 "dhcp6_parser.yy"
                {
     ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1854,8 +1854,8 @@ namespace isc { namespace dhcp {
 #line 1855 "dhcp6_parser.cc"
     break;
 
-  case 249: // port: "port" ":" "integer"
-#line 993 "dhcp6_parser.yy"
+  case 252: // port: "port" ":" "integer"
+#line 999 "dhcp6_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1864,8 +1864,8 @@ namespace isc { namespace dhcp {
 #line 1865 "dhcp6_parser.cc"
     break;
 
-  case 250: // $@39: %empty
-#line 999 "dhcp6_parser.yy"
+  case 253: // $@39: %empty
+#line 1005 "dhcp6_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1873,8 +1873,8 @@ namespace isc { namespace dhcp {
 #line 1874 "dhcp6_parser.cc"
     break;
 
-  case 251: // name: "name" $@39 ":" "constant string"
-#line 1002 "dhcp6_parser.yy"
+  case 254: // name: "name" $@39 ":" "constant string"
+#line 1008 "dhcp6_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1883,8 +1883,8 @@ namespace isc { namespace dhcp {
 #line 1884 "dhcp6_parser.cc"
     break;
 
-  case 252: // persist: "persist" ":" "boolean"
-#line 1008 "dhcp6_parser.yy"
+  case 255: // persist: "persist" ":" "boolean"
+#line 1014 "dhcp6_parser.yy"
                                {
     ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1893,8 +1893,8 @@ namespace isc { namespace dhcp {
 #line 1894 "dhcp6_parser.cc"
     break;
 
-  case 253: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1014 "dhcp6_parser.yy"
+  case 256: // lfc_interval: "lfc-interval" ":" "integer"
+#line 1020 "dhcp6_parser.yy"
                                          {
     ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1903,8 +1903,8 @@ namespace isc { namespace dhcp {
 #line 1904 "dhcp6_parser.cc"
     break;
 
-  case 254: // readonly: "readonly" ":" "boolean"
-#line 1020 "dhcp6_parser.yy"
+  case 257: // readonly: "readonly" ":" "boolean"
+#line 1026 "dhcp6_parser.yy"
                                  {
     ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1913,8 +1913,8 @@ namespace isc { namespace dhcp {
 #line 1914 "dhcp6_parser.cc"
     break;
 
-  case 255: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1026 "dhcp6_parser.yy"
+  case 258: // connect_timeout: "connect-timeout" ":" "integer"
+#line 1032 "dhcp6_parser.yy"
                                                {
     ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1923,150 +1923,180 @@ namespace isc { namespace dhcp {
 #line 1924 "dhcp6_parser.cc"
     break;
 
-  case 256: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1032 "dhcp6_parser.yy"
+  case 259: // read_timeout: "read-timeout" ":" "integer"
+#line 1038 "dhcp6_parser.yy"
+                                         {
+    ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("connect-timeout", n);
+}
+#line 1934 "dhcp6_parser.cc"
+    break;
+
+  case 260: // write_timeout: "write-timeout" ":" "integer"
+#line 1044 "dhcp6_parser.yy"
+                                           {
+    ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("write-timeout", n);
+}
+#line 1944 "dhcp6_parser.cc"
+    break;
+
+  case 261: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
+#line 1050 "dhcp6_parser.yy"
+                                                 {
+    ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
+    ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("tcp-user-timeout", n);
+}
+#line 1954 "dhcp6_parser.cc"
+    break;
+
+  case 262: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
+#line 1057 "dhcp6_parser.yy"
                                                        {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].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 1934 "dhcp6_parser.cc"
+#line 1964 "dhcp6_parser.cc"
     break;
 
-  case 257: // $@40: %empty
-#line 1038 "dhcp6_parser.yy"
+  case 263: // $@40: %empty
+#line 1063 "dhcp6_parser.yy"
                  {
     ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_ON_FAIL);
 }
-#line 1943 "dhcp6_parser.cc"
+#line 1973 "dhcp6_parser.cc"
     break;
 
-  case 258: // on_fail: "on-fail" $@40 ":" on_fail_mode
-#line 1041 "dhcp6_parser.yy"
+  case 264: // on_fail: "on-fail" $@40 ":" on_fail_mode
+#line 1066 "dhcp6_parser.yy"
                      {
     ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1952 "dhcp6_parser.cc"
+#line 1982 "dhcp6_parser.cc"
     break;
 
-  case 259: // on_fail_mode: "stop-retry-exit"
-#line 1046 "dhcp6_parser.yy"
+  case 265: // on_fail_mode: "stop-retry-exit"
+#line 1071 "dhcp6_parser.yy"
                               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 1958 "dhcp6_parser.cc"
+#line 1988 "dhcp6_parser.cc"
     break;
 
-  case 260: // on_fail_mode: "serve-retry-exit"
-#line 1047 "dhcp6_parser.yy"
+  case 266: // on_fail_mode: "serve-retry-exit"
+#line 1072 "dhcp6_parser.yy"
                                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 1964 "dhcp6_parser.cc"
+#line 1994 "dhcp6_parser.cc"
     break;
 
-  case 261: // on_fail_mode: "serve-retry-continue"
-#line 1048 "dhcp6_parser.yy"
+  case 267: // on_fail_mode: "serve-retry-continue"
+#line 1073 "dhcp6_parser.yy"
                                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 1970 "dhcp6_parser.cc"
+#line 2000 "dhcp6_parser.cc"
     break;
 
-  case 262: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1051 "dhcp6_parser.yy"
+  case 268: // max_row_errors: "max-row-errors" ":" "integer"
+#line 1076 "dhcp6_parser.yy"
                                              {
     ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].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 1980 "dhcp6_parser.cc"
+#line 2010 "dhcp6_parser.cc"
     break;
 
-  case 263: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1057 "dhcp6_parser.yy"
+  case 269: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
+#line 1082 "dhcp6_parser.yy"
                                                        {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].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 1990 "dhcp6_parser.cc"
+#line 2020 "dhcp6_parser.cc"
     break;
 
-  case 264: // $@41: %empty
-#line 1063 "dhcp6_parser.yy"
+  case 270: // $@41: %empty
+#line 1088 "dhcp6_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1999 "dhcp6_parser.cc"
+#line 2029 "dhcp6_parser.cc"
     break;
 
-  case 265: // trust_anchor: "trust-anchor" $@41 ":" "constant string"
-#line 1066 "dhcp6_parser.yy"
+  case 271: // trust_anchor: "trust-anchor" $@41 ":" "constant string"
+#line 1091 "dhcp6_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 2009 "dhcp6_parser.cc"
+#line 2039 "dhcp6_parser.cc"
     break;
 
-  case 266: // $@42: %empty
-#line 1072 "dhcp6_parser.yy"
+  case 272: // $@42: %empty
+#line 1097 "dhcp6_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2018 "dhcp6_parser.cc"
+#line 2048 "dhcp6_parser.cc"
     break;
 
-  case 267: // cert_file: "cert-file" $@42 ":" "constant string"
-#line 1075 "dhcp6_parser.yy"
+  case 273: // cert_file: "cert-file" $@42 ":" "constant string"
+#line 1100 "dhcp6_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 2028 "dhcp6_parser.cc"
+#line 2058 "dhcp6_parser.cc"
     break;
 
-  case 268: // $@43: %empty
-#line 1081 "dhcp6_parser.yy"
+  case 274: // $@43: %empty
+#line 1106 "dhcp6_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2037 "dhcp6_parser.cc"
+#line 2067 "dhcp6_parser.cc"
     break;
 
-  case 269: // key_file: "key-file" $@43 ":" "constant string"
-#line 1084 "dhcp6_parser.yy"
+  case 275: // key_file: "key-file" $@43 ":" "constant string"
+#line 1109 "dhcp6_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 2047 "dhcp6_parser.cc"
+#line 2077 "dhcp6_parser.cc"
     break;
 
-  case 270: // $@44: %empty
-#line 1090 "dhcp6_parser.yy"
+  case 276: // $@44: %empty
+#line 1115 "dhcp6_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2056 "dhcp6_parser.cc"
+#line 2086 "dhcp6_parser.cc"
     break;
 
-  case 271: // cipher_list: "cipher-list" $@44 ":" "constant string"
-#line 1093 "dhcp6_parser.yy"
+  case 277: // cipher_list: "cipher-list" $@44 ":" "constant string"
+#line 1118 "dhcp6_parser.yy"
                {
     ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cipher-list", cl);
     ctx.leave();
 }
-#line 2066 "dhcp6_parser.cc"
+#line 2096 "dhcp6_parser.cc"
     break;
 
-  case 272: // $@45: %empty
-#line 1099 "dhcp6_parser.yy"
+  case 278: // $@45: %empty
+#line 1124 "dhcp6_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2074,37 +2104,37 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 2078 "dhcp6_parser.cc"
+#line 2108 "dhcp6_parser.cc"
     break;
 
-  case 273: // sanity_checks: "sanity-checks" $@45 ":" "{" sanity_checks_params "}"
-#line 1105 "dhcp6_parser.yy"
+  case 279: // sanity_checks: "sanity-checks" $@45 ":" "{" sanity_checks_params "}"
+#line 1130 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2087 "dhcp6_parser.cc"
+#line 2117 "dhcp6_parser.cc"
     break;
 
-  case 276: // sanity_checks_params: sanity_checks_params ","
-#line 1112 "dhcp6_parser.yy"
+  case 282: // sanity_checks_params: sanity_checks_params ","
+#line 1137 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2095 "dhcp6_parser.cc"
+#line 2125 "dhcp6_parser.cc"
     break;
 
-  case 278: // $@46: %empty
-#line 1119 "dhcp6_parser.yy"
+  case 284: // $@46: %empty
+#line 1144 "dhcp6_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2104 "dhcp6_parser.cc"
+#line 2134 "dhcp6_parser.cc"
     break;
 
-  case 279: // lease_checks: "lease-checks" $@46 ":" "constant string"
-#line 1122 "dhcp6_parser.yy"
+  case 285: // lease_checks: "lease-checks" $@46 ":" "constant string"
+#line 1147 "dhcp6_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -2120,11 +2150,11 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 2124 "dhcp6_parser.cc"
+#line 2154 "dhcp6_parser.cc"
     break;
 
-  case 280: // $@47: %empty
-#line 1138 "dhcp6_parser.yy"
+  case 286: // $@47: %empty
+#line 1163 "dhcp6_parser.yy"
                          {
     ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2132,46 +2162,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 2136 "dhcp6_parser.cc"
+#line 2166 "dhcp6_parser.cc"
     break;
 
-  case 281: // mac_sources: "mac-sources" $@47 ":" "[" mac_sources_list "]"
-#line 1144 "dhcp6_parser.yy"
+  case 287: // mac_sources: "mac-sources" $@47 ":" "[" mac_sources_list "]"
+#line 1169 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2145 "dhcp6_parser.cc"
+#line 2175 "dhcp6_parser.cc"
     break;
 
-  case 284: // mac_sources_list: mac_sources_list ","
-#line 1151 "dhcp6_parser.yy"
+  case 290: // mac_sources_list: mac_sources_list ","
+#line 1176 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 2153 "dhcp6_parser.cc"
+#line 2183 "dhcp6_parser.cc"
     break;
 
-  case 287: // duid_id: "duid"
-#line 1160 "dhcp6_parser.yy"
+  case 293: // duid_id: "duid"
+#line 1185 "dhcp6_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2162 "dhcp6_parser.cc"
+#line 2192 "dhcp6_parser.cc"
     break;
 
-  case 288: // string_id: "constant string"
-#line 1165 "dhcp6_parser.yy"
+  case 294: // string_id: "constant string"
+#line 1190 "dhcp6_parser.yy"
                   {
     ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2171 "dhcp6_parser.cc"
+#line 2201 "dhcp6_parser.cc"
     break;
 
-  case 289: // $@48: %empty
-#line 1170 "dhcp6_parser.yy"
+  case 295: // $@48: %empty
+#line 1195 "dhcp6_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2179,46 +2209,46 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2183 "dhcp6_parser.cc"
+#line 2213 "dhcp6_parser.cc"
     break;
 
-  case 290: // host_reservation_identifiers: "host-reservation-identifiers" $@48 ":" "[" host_reservation_identifiers_list "]"
-#line 1176 "dhcp6_parser.yy"
+  case 296: // host_reservation_identifiers: "host-reservation-identifiers" $@48 ":" "[" host_reservation_identifiers_list "]"
+#line 1201 "dhcp6_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2192 "dhcp6_parser.cc"
+#line 2222 "dhcp6_parser.cc"
     break;
 
-  case 293: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1183 "dhcp6_parser.yy"
+  case 299: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
+#line 1208 "dhcp6_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2200 "dhcp6_parser.cc"
+#line 2230 "dhcp6_parser.cc"
     break;
 
-  case 297: // hw_address_id: "hw-address"
-#line 1193 "dhcp6_parser.yy"
+  case 303: // hw_address_id: "hw-address"
+#line 1218 "dhcp6_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2209 "dhcp6_parser.cc"
+#line 2239 "dhcp6_parser.cc"
     break;
 
-  case 298: // flex_id: "flex-id"
-#line 1198 "dhcp6_parser.yy"
+  case 304: // flex_id: "flex-id"
+#line 1223 "dhcp6_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2218 "dhcp6_parser.cc"
+#line 2248 "dhcp6_parser.cc"
     break;
 
-  case 299: // $@49: %empty
-#line 1205 "dhcp6_parser.yy"
+  case 305: // $@49: %empty
+#line 1230 "dhcp6_parser.yy"
                                                {
     ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2226,20 +2256,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2230 "dhcp6_parser.cc"
+#line 2260 "dhcp6_parser.cc"
     break;
 
-  case 300: // relay_supplied_options: "relay-supplied-options" $@49 ":" "[" list_content "]"
-#line 1211 "dhcp6_parser.yy"
+  case 306: // relay_supplied_options: "relay-supplied-options" $@49 ":" "[" list_content "]"
+#line 1236 "dhcp6_parser.yy"
                                                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2239 "dhcp6_parser.cc"
+#line 2269 "dhcp6_parser.cc"
     break;
 
-  case 301: // $@50: %empty
-#line 1218 "dhcp6_parser.yy"
+  case 307: // $@50: %empty
+#line 1243 "dhcp6_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2247,60 +2277,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2251 "dhcp6_parser.cc"
+#line 2281 "dhcp6_parser.cc"
     break;
 
-  case 302: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
-#line 1224 "dhcp6_parser.yy"
+  case 308: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
+#line 1249 "dhcp6_parser.yy"
                                                              {
     // The enable parameter is required.
     ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2262 "dhcp6_parser.cc"
+#line 2292 "dhcp6_parser.cc"
     break;
 
-  case 305: // multi_threading_params: multi_threading_params ","
-#line 1233 "dhcp6_parser.yy"
+  case 311: // multi_threading_params: multi_threading_params ","
+#line 1258 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2270 "dhcp6_parser.cc"
+#line 2300 "dhcp6_parser.cc"
     break;
 
-  case 312: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1246 "dhcp6_parser.yy"
+  case 318: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
+#line 1271 "dhcp6_parser.yy"
                                                              {
     ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-multi-threading", b);
 }
-#line 2280 "dhcp6_parser.cc"
+#line 2310 "dhcp6_parser.cc"
     break;
 
-  case 313: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1252 "dhcp6_parser.yy"
+  case 319: // thread_pool_size: "thread-pool-size" ":" "integer"
+#line 1277 "dhcp6_parser.yy"
                                                  {
     ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("thread-pool-size", prf);
 }
-#line 2290 "dhcp6_parser.cc"
+#line 2320 "dhcp6_parser.cc"
     break;
 
-  case 314: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1258 "dhcp6_parser.yy"
+  case 320: // packet_queue_size: "packet-queue-size" ":" "integer"
+#line 1283 "dhcp6_parser.yy"
                                                    {
     ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("packet-queue-size", prf);
 }
-#line 2300 "dhcp6_parser.cc"
+#line 2330 "dhcp6_parser.cc"
     break;
 
-  case 315: // $@51: %empty
-#line 1264 "dhcp6_parser.yy"
+  case 321: // $@51: %empty
+#line 1289 "dhcp6_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2308,113 +2338,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2312 "dhcp6_parser.cc"
+#line 2342 "dhcp6_parser.cc"
     break;
 
-  case 316: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
-#line 1270 "dhcp6_parser.yy"
+  case 322: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
+#line 1295 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2321 "dhcp6_parser.cc"
+#line 2351 "dhcp6_parser.cc"
     break;
 
-  case 321: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1281 "dhcp6_parser.yy"
+  case 327: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
+#line 1306 "dhcp6_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2329 "dhcp6_parser.cc"
+#line 2359 "dhcp6_parser.cc"
     break;
 
-  case 322: // $@52: %empty
-#line 1286 "dhcp6_parser.yy"
+  case 328: // $@52: %empty
+#line 1311 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2339 "dhcp6_parser.cc"
+#line 2369 "dhcp6_parser.cc"
     break;
 
-  case 323: // hooks_library: "{" $@52 hooks_params "}"
-#line 1290 "dhcp6_parser.yy"
+  case 329: // hooks_library: "{" $@52 hooks_params "}"
+#line 1315 "dhcp6_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2349 "dhcp6_parser.cc"
+#line 2379 "dhcp6_parser.cc"
     break;
 
-  case 324: // $@53: %empty
-#line 1296 "dhcp6_parser.yy"
+  case 330: // $@53: %empty
+#line 1321 "dhcp6_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2359 "dhcp6_parser.cc"
+#line 2389 "dhcp6_parser.cc"
     break;
 
-  case 325: // sub_hooks_library: "{" $@53 hooks_params "}"
-#line 1300 "dhcp6_parser.yy"
+  case 331: // sub_hooks_library: "{" $@53 hooks_params "}"
+#line 1325 "dhcp6_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2369 "dhcp6_parser.cc"
+#line 2399 "dhcp6_parser.cc"
     break;
 
-  case 328: // hooks_params: hooks_params ","
-#line 1308 "dhcp6_parser.yy"
+  case 334: // hooks_params: hooks_params ","
+#line 1333 "dhcp6_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2377 "dhcp6_parser.cc"
+#line 2407 "dhcp6_parser.cc"
     break;
 
-  case 332: // $@54: %empty
-#line 1318 "dhcp6_parser.yy"
+  case 338: // $@54: %empty
+#line 1343 "dhcp6_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2386 "dhcp6_parser.cc"
+#line 2416 "dhcp6_parser.cc"
     break;
 
-  case 333: // library: "library" $@54 ":" "constant string"
-#line 1321 "dhcp6_parser.yy"
+  case 339: // library: "library" $@54 ":" "constant string"
+#line 1346 "dhcp6_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 2396 "dhcp6_parser.cc"
+#line 2426 "dhcp6_parser.cc"
     break;
 
-  case 334: // $@55: %empty
-#line 1327 "dhcp6_parser.yy"
+  case 340: // $@55: %empty
+#line 1352 "dhcp6_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2405 "dhcp6_parser.cc"
+#line 2435 "dhcp6_parser.cc"
     break;
 
-  case 335: // parameters: "parameters" $@55 ":" map_value
-#line 1330 "dhcp6_parser.yy"
+  case 341: // parameters: "parameters" $@55 ":" map_value
+#line 1355 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2414 "dhcp6_parser.cc"
+#line 2444 "dhcp6_parser.cc"
     break;
 
-  case 336: // $@56: %empty
-#line 1336 "dhcp6_parser.yy"
+  case 342: // $@56: %empty
+#line 1361 "dhcp6_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2422,89 +2452,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2426 "dhcp6_parser.cc"
+#line 2456 "dhcp6_parser.cc"
     break;
 
-  case 337: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
-#line 1342 "dhcp6_parser.yy"
+  case 343: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
+#line 1367 "dhcp6_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2436 "dhcp6_parser.cc"
+#line 2466 "dhcp6_parser.cc"
     break;
 
-  case 340: // expired_leases_params: expired_leases_params ","
-#line 1350 "dhcp6_parser.yy"
+  case 346: // expired_leases_params: expired_leases_params ","
+#line 1375 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2444 "dhcp6_parser.cc"
+#line 2474 "dhcp6_parser.cc"
     break;
 
-  case 347: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1363 "dhcp6_parser.yy"
+  case 353: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
+#line 1388 "dhcp6_parser.yy"
                                                                {
     ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].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 2454 "dhcp6_parser.cc"
+#line 2484 "dhcp6_parser.cc"
     break;
 
-  case 348: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1369 "dhcp6_parser.yy"
+  case 354: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
+#line 1394 "dhcp6_parser.yy"
                                                                                {
     ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].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 2464 "dhcp6_parser.cc"
+#line 2494 "dhcp6_parser.cc"
     break;
 
-  case 349: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1375 "dhcp6_parser.yy"
+  case 355: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
+#line 1400 "dhcp6_parser.yy"
                                                        {
     ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].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 2474 "dhcp6_parser.cc"
+#line 2504 "dhcp6_parser.cc"
     break;
 
-  case 350: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1381 "dhcp6_parser.yy"
+  case 356: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
+#line 1406 "dhcp6_parser.yy"
                                                      {
     ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].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 2484 "dhcp6_parser.cc"
+#line 2514 "dhcp6_parser.cc"
     break;
 
-  case 351: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1387 "dhcp6_parser.yy"
+  case 357: // max_reclaim_time: "max-reclaim-time" ":" "integer"
+#line 1412 "dhcp6_parser.yy"
                                                  {
     ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].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 2494 "dhcp6_parser.cc"
+#line 2524 "dhcp6_parser.cc"
     break;
 
-  case 352: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1393 "dhcp6_parser.yy"
+  case 358: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
+#line 1418 "dhcp6_parser.yy"
                                                                {
     ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].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 2504 "dhcp6_parser.cc"
+#line 2534 "dhcp6_parser.cc"
     break;
 
-  case 353: // $@57: %empty
-#line 1402 "dhcp6_parser.yy"
+  case 359: // $@57: %empty
+#line 1427 "dhcp6_parser.yy"
                       {
     ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2512,38 +2542,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 2516 "dhcp6_parser.cc"
+#line 2546 "dhcp6_parser.cc"
     break;
 
-  case 354: // subnet6_list: "subnet6" $@57 ":" "[" subnet6_list_content "]"
-#line 1408 "dhcp6_parser.yy"
+  case 360: // subnet6_list: "subnet6" $@57 ":" "[" subnet6_list_content "]"
+#line 1433 "dhcp6_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2525 "dhcp6_parser.cc"
+#line 2555 "dhcp6_parser.cc"
     break;
 
-  case 359: // not_empty_subnet6_list: not_empty_subnet6_list ","
-#line 1422 "dhcp6_parser.yy"
+  case 365: // not_empty_subnet6_list: not_empty_subnet6_list ","
+#line 1447 "dhcp6_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2533 "dhcp6_parser.cc"
+#line 2563 "dhcp6_parser.cc"
     break;
 
-  case 360: // $@58: %empty
-#line 1431 "dhcp6_parser.yy"
+  case 366: // $@58: %empty
+#line 1456 "dhcp6_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2543 "dhcp6_parser.cc"
+#line 2573 "dhcp6_parser.cc"
     break;
 
-  case 361: // subnet6: "{" $@58 subnet6_params "}"
-#line 1435 "dhcp6_parser.yy"
+  case 367: // subnet6: "{" $@58 subnet6_params "}"
+#line 1460 "dhcp6_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2565,115 +2595,115 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2569 "dhcp6_parser.cc"
+#line 2599 "dhcp6_parser.cc"
     break;
 
-  case 362: // $@59: %empty
-#line 1457 "dhcp6_parser.yy"
+  case 368: // $@59: %empty
+#line 1482 "dhcp6_parser.yy"
                             {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2579 "dhcp6_parser.cc"
+#line 2609 "dhcp6_parser.cc"
     break;
 
-  case 363: // sub_subnet6: "{" $@59 subnet6_params "}"
-#line 1461 "dhcp6_parser.yy"
+  case 369: // sub_subnet6: "{" $@59 subnet6_params "}"
+#line 1486 "dhcp6_parser.yy"
                                 {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2589 "dhcp6_parser.cc"
+#line 2619 "dhcp6_parser.cc"
     break;
 
-  case 366: // subnet6_params: subnet6_params ","
-#line 1470 "dhcp6_parser.yy"
+  case 372: // subnet6_params: subnet6_params ","
+#line 1495 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2597 "dhcp6_parser.cc"
+#line 2627 "dhcp6_parser.cc"
     break;
 
-  case 410: // $@60: %empty
-#line 1521 "dhcp6_parser.yy"
+  case 416: // $@60: %empty
+#line 1546 "dhcp6_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2606 "dhcp6_parser.cc"
+#line 2636 "dhcp6_parser.cc"
     break;
 
-  case 411: // subnet: "subnet" $@60 ":" "constant string"
-#line 1524 "dhcp6_parser.yy"
+  case 417: // subnet: "subnet" $@60 ":" "constant string"
+#line 1549 "dhcp6_parser.yy"
                {
     ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2616 "dhcp6_parser.cc"
+#line 2646 "dhcp6_parser.cc"
     break;
 
-  case 412: // $@61: %empty
-#line 1530 "dhcp6_parser.yy"
+  case 418: // $@61: %empty
+#line 1555 "dhcp6_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2625 "dhcp6_parser.cc"
+#line 2655 "dhcp6_parser.cc"
     break;
 
-  case 413: // interface: "interface" $@61 ":" "constant string"
-#line 1533 "dhcp6_parser.yy"
+  case 419: // interface: "interface" $@61 ":" "constant string"
+#line 1558 "dhcp6_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2635 "dhcp6_parser.cc"
+#line 2665 "dhcp6_parser.cc"
     break;
 
-  case 414: // $@62: %empty
-#line 1539 "dhcp6_parser.yy"
+  case 420: // $@62: %empty
+#line 1564 "dhcp6_parser.yy"
                            {
     ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2644 "dhcp6_parser.cc"
+#line 2674 "dhcp6_parser.cc"
     break;
 
-  case 415: // interface_id: "interface-id" $@62 ":" "constant string"
-#line 1542 "dhcp6_parser.yy"
+  case 421: // interface_id: "interface-id" $@62 ":" "constant string"
+#line 1567 "dhcp6_parser.yy"
                {
     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 2654 "dhcp6_parser.cc"
+#line 2684 "dhcp6_parser.cc"
     break;
 
-  case 416: // $@63: %empty
-#line 1548 "dhcp6_parser.yy"
+  case 422: // $@63: %empty
+#line 1573 "dhcp6_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2663 "dhcp6_parser.cc"
+#line 2693 "dhcp6_parser.cc"
     break;
 
-  case 417: // client_class: "client-class" $@63 ":" "constant string"
-#line 1551 "dhcp6_parser.yy"
+  case 423: // client_class: "client-class" $@63 ":" "constant string"
+#line 1576 "dhcp6_parser.yy"
                {
     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 2673 "dhcp6_parser.cc"
+#line 2703 "dhcp6_parser.cc"
     break;
 
-  case 418: // $@64: %empty
-#line 1557 "dhcp6_parser.yy"
+  case 424: // $@64: %empty
+#line 1582 "dhcp6_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2681,112 +2711,112 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2685 "dhcp6_parser.cc"
+#line 2715 "dhcp6_parser.cc"
     break;
 
-  case 419: // require_client_classes: "require-client-classes" $@64 ":" list_strings
-#line 1563 "dhcp6_parser.yy"
+  case 425: // require_client_classes: "require-client-classes" $@64 ":" list_strings
+#line 1588 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2694 "dhcp6_parser.cc"
+#line 2724 "dhcp6_parser.cc"
     break;
 
-  case 420: // reservations_global: "reservations-global" ":" "boolean"
-#line 1568 "dhcp6_parser.yy"
+  case 426: // reservations_global: "reservations-global" ":" "boolean"
+#line 1593 "dhcp6_parser.yy"
                                                        {
     ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-global", b);
 }
-#line 2704 "dhcp6_parser.cc"
+#line 2734 "dhcp6_parser.cc"
     break;
 
-  case 421: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1574 "dhcp6_parser.yy"
+  case 427: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
+#line 1599 "dhcp6_parser.yy"
                                                              {
     ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-in-subnet", b);
 }
-#line 2714 "dhcp6_parser.cc"
+#line 2744 "dhcp6_parser.cc"
     break;
 
-  case 422: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1580 "dhcp6_parser.yy"
+  case 428: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
+#line 1605 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-out-of-pool", b);
 }
-#line 2724 "dhcp6_parser.cc"
+#line 2754 "dhcp6_parser.cc"
     break;
 
-  case 423: // $@65: %empty
-#line 1586 "dhcp6_parser.yy"
+  case 429: // $@65: %empty
+#line 1611 "dhcp6_parser.yy"
                                    {
     ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2733 "dhcp6_parser.cc"
+#line 2763 "dhcp6_parser.cc"
     break;
 
-  case 424: // reservation_mode: "reservation-mode" $@65 ":" hr_mode
-#line 1589 "dhcp6_parser.yy"
+  case 430: // reservation_mode: "reservation-mode" $@65 ":" hr_mode
+#line 1614 "dhcp6_parser.yy"
                 {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2742 "dhcp6_parser.cc"
+#line 2772 "dhcp6_parser.cc"
     break;
 
-  case 425: // hr_mode: "disabled"
-#line 1594 "dhcp6_parser.yy"
+  case 431: // hr_mode: "disabled"
+#line 1619 "dhcp6_parser.yy"
                   { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2748 "dhcp6_parser.cc"
+#line 2778 "dhcp6_parser.cc"
     break;
 
-  case 426: // hr_mode: "out-of-pool"
-#line 1595 "dhcp6_parser.yy"
+  case 432: // hr_mode: "out-of-pool"
+#line 1620 "dhcp6_parser.yy"
                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2754 "dhcp6_parser.cc"
+#line 2784 "dhcp6_parser.cc"
     break;
 
-  case 427: // hr_mode: "global"
-#line 1596 "dhcp6_parser.yy"
+  case 433: // hr_mode: "global"
+#line 1621 "dhcp6_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2760 "dhcp6_parser.cc"
+#line 2790 "dhcp6_parser.cc"
     break;
 
-  case 428: // hr_mode: "all"
-#line 1597 "dhcp6_parser.yy"
+  case 434: // hr_mode: "all"
+#line 1622 "dhcp6_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2766 "dhcp6_parser.cc"
+#line 2796 "dhcp6_parser.cc"
     break;
 
-  case 429: // id: "id" ":" "integer"
-#line 1600 "dhcp6_parser.yy"
+  case 435: // id: "id" ":" "integer"
+#line 1625 "dhcp6_parser.yy"
                      {
     ctx.unique("id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 2776 "dhcp6_parser.cc"
+#line 2806 "dhcp6_parser.cc"
     break;
 
-  case 430: // rapid_commit: "rapid-commit" ":" "boolean"
-#line 1606 "dhcp6_parser.yy"
+  case 436: // rapid_commit: "rapid-commit" ":" "boolean"
+#line 1631 "dhcp6_parser.yy"
                                          {
     ctx.unique("rapid-commit", ctx.loc2pos(yystack_[2].location));
     ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 2786 "dhcp6_parser.cc"
+#line 2816 "dhcp6_parser.cc"
     break;
 
-  case 431: // $@66: %empty
-#line 1614 "dhcp6_parser.yy"
+  case 437: // $@66: %empty
+#line 1639 "dhcp6_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2794,54 +2824,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2798 "dhcp6_parser.cc"
+#line 2828 "dhcp6_parser.cc"
     break;
 
-  case 432: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]"
-#line 1620 "dhcp6_parser.yy"
+  case 438: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]"
+#line 1645 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2807 "dhcp6_parser.cc"
+#line 2837 "dhcp6_parser.cc"
     break;
 
-  case 437: // shared_networks_list: shared_networks_list ","
-#line 1633 "dhcp6_parser.yy"
+  case 443: // shared_networks_list: shared_networks_list ","
+#line 1658 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2815 "dhcp6_parser.cc"
+#line 2845 "dhcp6_parser.cc"
     break;
 
-  case 438: // $@67: %empty
-#line 1638 "dhcp6_parser.yy"
+  case 444: // $@67: %empty
+#line 1663 "dhcp6_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2825 "dhcp6_parser.cc"
+#line 2855 "dhcp6_parser.cc"
     break;
 
-  case 439: // shared_network: "{" $@67 shared_network_params "}"
-#line 1642 "dhcp6_parser.yy"
+  case 445: // shared_network: "{" $@67 shared_network_params "}"
+#line 1667 "dhcp6_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 2833 "dhcp6_parser.cc"
+#line 2863 "dhcp6_parser.cc"
     break;
 
-  case 442: // shared_network_params: shared_network_params ","
-#line 1648 "dhcp6_parser.yy"
+  case 448: // shared_network_params: shared_network_params ","
+#line 1673 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2841 "dhcp6_parser.cc"
+#line 2871 "dhcp6_parser.cc"
     break;
 
-  case 483: // $@68: %empty
-#line 1699 "dhcp6_parser.yy"
+  case 489: // $@68: %empty
+#line 1724 "dhcp6_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2849,55 +2879,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2853 "dhcp6_parser.cc"
+#line 2883 "dhcp6_parser.cc"
     break;
 
-  case 484: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]"
-#line 1705 "dhcp6_parser.yy"
+  case 490: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]"
+#line 1730 "dhcp6_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2862 "dhcp6_parser.cc"
+#line 2892 "dhcp6_parser.cc"
     break;
 
-  case 485: // $@69: %empty
-#line 1713 "dhcp6_parser.yy"
+  case 491: // $@69: %empty
+#line 1738 "dhcp6_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2871 "dhcp6_parser.cc"
+#line 2901 "dhcp6_parser.cc"
     break;
 
-  case 486: // sub_option_def_list: "{" $@69 option_def_list "}"
-#line 1716 "dhcp6_parser.yy"
+  case 492: // sub_option_def_list: "{" $@69 option_def_list "}"
+#line 1741 "dhcp6_parser.yy"
                                  {
     // parsing completed
 }
-#line 2879 "dhcp6_parser.cc"
+#line 2909 "dhcp6_parser.cc"
     break;
 
-  case 491: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1728 "dhcp6_parser.yy"
+  case 497: // not_empty_option_def_list: not_empty_option_def_list ","
+#line 1753 "dhcp6_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 2887 "dhcp6_parser.cc"
+#line 2917 "dhcp6_parser.cc"
     break;
 
-  case 492: // $@70: %empty
-#line 1735 "dhcp6_parser.yy"
+  case 498: // $@70: %empty
+#line 1760 "dhcp6_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2897 "dhcp6_parser.cc"
+#line 2927 "dhcp6_parser.cc"
     break;
 
-  case 493: // option_def_entry: "{" $@70 option_def_params "}"
-#line 1739 "dhcp6_parser.yy"
+  case 499: // option_def_entry: "{" $@70 option_def_params "}"
+#line 1764 "dhcp6_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2905,21 +2935,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2909 "dhcp6_parser.cc"
+#line 2939 "dhcp6_parser.cc"
     break;
 
-  case 494: // $@71: %empty
-#line 1750 "dhcp6_parser.yy"
+  case 500: // $@71: %empty
+#line 1775 "dhcp6_parser.yy"
                                {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2919 "dhcp6_parser.cc"
+#line 2949 "dhcp6_parser.cc"
     break;
 
-  case 495: // sub_option_def: "{" $@71 option_def_params "}"
-#line 1754 "dhcp6_parser.yy"
+  case 501: // sub_option_def: "{" $@71 option_def_params "}"
+#line 1779 "dhcp6_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2927,115 +2957,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2931 "dhcp6_parser.cc"
+#line 2961 "dhcp6_parser.cc"
     break;
 
-  case 500: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1770 "dhcp6_parser.yy"
+  case 506: // not_empty_option_def_params: not_empty_option_def_params ","
+#line 1795 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 2939 "dhcp6_parser.cc"
+#line 2969 "dhcp6_parser.cc"
     break;
 
-  case 512: // code: "code" ":" "integer"
-#line 1789 "dhcp6_parser.yy"
+  case 518: // code: "code" ":" "integer"
+#line 1814 "dhcp6_parser.yy"
                          {
     ctx.unique("code", ctx.loc2pos(yystack_[2].location));
     ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 2949 "dhcp6_parser.cc"
+#line 2979 "dhcp6_parser.cc"
     break;
 
-  case 514: // $@72: %empty
-#line 1797 "dhcp6_parser.yy"
+  case 520: // $@72: %empty
+#line 1822 "dhcp6_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2958 "dhcp6_parser.cc"
+#line 2988 "dhcp6_parser.cc"
     break;
 
-  case 515: // option_def_type: "type" $@72 ":" "constant string"
-#line 1800 "dhcp6_parser.yy"
+  case 521: // option_def_type: "type" $@72 ":" "constant string"
+#line 1825 "dhcp6_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 2968 "dhcp6_parser.cc"
+#line 2998 "dhcp6_parser.cc"
     break;
 
-  case 516: // $@73: %empty
-#line 1806 "dhcp6_parser.yy"
+  case 522: // $@73: %empty
+#line 1831 "dhcp6_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2977 "dhcp6_parser.cc"
+#line 3007 "dhcp6_parser.cc"
     break;
 
-  case 517: // option_def_record_types: "record-types" $@73 ":" "constant string"
-#line 1809 "dhcp6_parser.yy"
+  case 523: // option_def_record_types: "record-types" $@73 ":" "constant string"
+#line 1834 "dhcp6_parser.yy"
                {
     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 2987 "dhcp6_parser.cc"
+#line 3017 "dhcp6_parser.cc"
     break;
 
-  case 518: // $@74: %empty
-#line 1815 "dhcp6_parser.yy"
+  case 524: // $@74: %empty
+#line 1840 "dhcp6_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2996 "dhcp6_parser.cc"
+#line 3026 "dhcp6_parser.cc"
     break;
 
-  case 519: // space: "space" $@74 ":" "constant string"
-#line 1818 "dhcp6_parser.yy"
+  case 525: // space: "space" $@74 ":" "constant string"
+#line 1843 "dhcp6_parser.yy"
                {
     ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 3006 "dhcp6_parser.cc"
+#line 3036 "dhcp6_parser.cc"
     break;
 
-  case 521: // $@75: %empty
-#line 1826 "dhcp6_parser.yy"
+  case 527: // $@75: %empty
+#line 1851 "dhcp6_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3015 "dhcp6_parser.cc"
+#line 3045 "dhcp6_parser.cc"
     break;
 
-  case 522: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string"
-#line 1829 "dhcp6_parser.yy"
+  case 528: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string"
+#line 1854 "dhcp6_parser.yy"
                {
     ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 3025 "dhcp6_parser.cc"
+#line 3055 "dhcp6_parser.cc"
     break;
 
-  case 523: // option_def_array: "array" ":" "boolean"
-#line 1835 "dhcp6_parser.yy"
+  case 529: // option_def_array: "array" ":" "boolean"
+#line 1860 "dhcp6_parser.yy"
                                       {
     ctx.unique("array", ctx.loc2pos(yystack_[2].location));
     ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 3035 "dhcp6_parser.cc"
+#line 3065 "dhcp6_parser.cc"
     break;
 
-  case 524: // $@76: %empty
-#line 1845 "dhcp6_parser.yy"
+  case 530: // $@76: %empty
+#line 1870 "dhcp6_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3043,113 +3073,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3047 "dhcp6_parser.cc"
+#line 3077 "dhcp6_parser.cc"
     break;
 
-  case 525: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]"
-#line 1851 "dhcp6_parser.yy"
+  case 531: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]"
+#line 1876 "dhcp6_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3056 "dhcp6_parser.cc"
+#line 3086 "dhcp6_parser.cc"
     break;
 
-  case 530: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1866 "dhcp6_parser.yy"
+  case 536: // not_empty_option_data_list: not_empty_option_data_list ","
+#line 1891 "dhcp6_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3064 "dhcp6_parser.cc"
+#line 3094 "dhcp6_parser.cc"
     break;
 
-  case 531: // $@77: %empty
-#line 1873 "dhcp6_parser.yy"
+  case 537: // $@77: %empty
+#line 1898 "dhcp6_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3074 "dhcp6_parser.cc"
+#line 3104 "dhcp6_parser.cc"
     break;
 
-  case 532: // option_data_entry: "{" $@77 option_data_params "}"
-#line 1877 "dhcp6_parser.yy"
+  case 538: // option_data_entry: "{" $@77 option_data_params "}"
+#line 1902 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3083 "dhcp6_parser.cc"
+#line 3113 "dhcp6_parser.cc"
     break;
 
-  case 533: // $@78: %empty
-#line 1885 "dhcp6_parser.yy"
+  case 539: // $@78: %empty
+#line 1910 "dhcp6_parser.yy"
                                 {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3093 "dhcp6_parser.cc"
+#line 3123 "dhcp6_parser.cc"
     break;
 
-  case 534: // sub_option_data: "{" $@78 option_data_params "}"
-#line 1889 "dhcp6_parser.yy"
+  case 540: // sub_option_data: "{" $@78 option_data_params "}"
+#line 1914 "dhcp6_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3102 "dhcp6_parser.cc"
+#line 3132 "dhcp6_parser.cc"
     break;
 
-  case 539: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1905 "dhcp6_parser.yy"
+  case 545: // not_empty_option_data_params: not_empty_option_data_params ","
+#line 1930 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3110 "dhcp6_parser.cc"
+#line 3140 "dhcp6_parser.cc"
     break;
 
-  case 550: // $@79: %empty
-#line 1925 "dhcp6_parser.yy"
+  case 556: // $@79: %empty
+#line 1950 "dhcp6_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3119 "dhcp6_parser.cc"
+#line 3149 "dhcp6_parser.cc"
     break;
 
-  case 551: // option_data_data: "data" $@79 ":" "constant string"
-#line 1928 "dhcp6_parser.yy"
+  case 557: // option_data_data: "data" $@79 ":" "constant string"
+#line 1953 "dhcp6_parser.yy"
                {
     ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 3129 "dhcp6_parser.cc"
+#line 3159 "dhcp6_parser.cc"
     break;
 
-  case 554: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 1938 "dhcp6_parser.yy"
+  case 560: // option_data_csv_format: "csv-format" ":" "boolean"
+#line 1963 "dhcp6_parser.yy"
                                                  {
     ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
     ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 3139 "dhcp6_parser.cc"
+#line 3169 "dhcp6_parser.cc"
     break;
 
-  case 555: // option_data_always_send: "always-send" ":" "boolean"
-#line 1944 "dhcp6_parser.yy"
+  case 561: // option_data_always_send: "always-send" ":" "boolean"
+#line 1969 "dhcp6_parser.yy"
                                                    {
     ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 3149 "dhcp6_parser.cc"
+#line 3179 "dhcp6_parser.cc"
     break;
 
-  case 556: // $@80: %empty
-#line 1953 "dhcp6_parser.yy"
+  case 562: // $@80: %empty
+#line 1978 "dhcp6_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3157,103 +3187,103 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3161 "dhcp6_parser.cc"
+#line 3191 "dhcp6_parser.cc"
     break;
 
-  case 557: // pools_list: "pools" $@80 ":" "[" pools_list_content "]"
-#line 1959 "dhcp6_parser.yy"
+  case 563: // pools_list: "pools" $@80 ":" "[" pools_list_content "]"
+#line 1984 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3170 "dhcp6_parser.cc"
+#line 3200 "dhcp6_parser.cc"
     break;
 
-  case 562: // not_empty_pools_list: not_empty_pools_list ","
-#line 1972 "dhcp6_parser.yy"
+  case 568: // not_empty_pools_list: not_empty_pools_list ","
+#line 1997 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3178 "dhcp6_parser.cc"
+#line 3208 "dhcp6_parser.cc"
     break;
 
-  case 563: // $@81: %empty
-#line 1977 "dhcp6_parser.yy"
+  case 569: // $@81: %empty
+#line 2002 "dhcp6_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3188 "dhcp6_parser.cc"
+#line 3218 "dhcp6_parser.cc"
     break;
 
-  case 564: // pool_list_entry: "{" $@81 pool_params "}"
-#line 1981 "dhcp6_parser.yy"
+  case 570: // pool_list_entry: "{" $@81 pool_params "}"
+#line 2006 "dhcp6_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3198 "dhcp6_parser.cc"
+#line 3228 "dhcp6_parser.cc"
     break;
 
-  case 565: // $@82: %empty
-#line 1987 "dhcp6_parser.yy"
+  case 571: // $@82: %empty
+#line 2012 "dhcp6_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3208 "dhcp6_parser.cc"
+#line 3238 "dhcp6_parser.cc"
     break;
 
-  case 566: // sub_pool6: "{" $@82 pool_params "}"
-#line 1991 "dhcp6_parser.yy"
+  case 572: // sub_pool6: "{" $@82 pool_params "}"
+#line 2016 "dhcp6_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3218 "dhcp6_parser.cc"
+#line 3248 "dhcp6_parser.cc"
     break;
 
-  case 569: // pool_params: pool_params ","
-#line 1999 "dhcp6_parser.yy"
+  case 575: // pool_params: pool_params ","
+#line 2024 "dhcp6_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3226 "dhcp6_parser.cc"
+#line 3256 "dhcp6_parser.cc"
     break;
 
-  case 577: // $@83: %empty
-#line 2013 "dhcp6_parser.yy"
+  case 583: // $@83: %empty
+#line 2038 "dhcp6_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3235 "dhcp6_parser.cc"
+#line 3265 "dhcp6_parser.cc"
     break;
 
-  case 578: // pool_entry: "pool" $@83 ":" "constant string"
-#line 2016 "dhcp6_parser.yy"
+  case 584: // pool_entry: "pool" $@83 ":" "constant string"
+#line 2041 "dhcp6_parser.yy"
                {
     ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 3245 "dhcp6_parser.cc"
+#line 3275 "dhcp6_parser.cc"
     break;
 
-  case 579: // $@84: %empty
-#line 2022 "dhcp6_parser.yy"
+  case 585: // $@84: %empty
+#line 2047 "dhcp6_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3253 "dhcp6_parser.cc"
+#line 3283 "dhcp6_parser.cc"
     break;
 
-  case 580: // user_context: "user-context" $@84 ":" map_value
-#line 2024 "dhcp6_parser.yy"
+  case 586: // user_context: "user-context" $@84 ":" map_value
+#line 2049 "dhcp6_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3276,19 +3306,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3280 "dhcp6_parser.cc"
+#line 3310 "dhcp6_parser.cc"
     break;
 
-  case 581: // $@85: %empty
-#line 2047 "dhcp6_parser.yy"
+  case 587: // $@85: %empty
+#line 2072 "dhcp6_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3288 "dhcp6_parser.cc"
+#line 3318 "dhcp6_parser.cc"
     break;
 
-  case 582: // comment: "comment" $@85 ":" "constant string"
-#line 2049 "dhcp6_parser.yy"
+  case 588: // comment: "comment" $@85 ":" "constant string"
+#line 2074 "dhcp6_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3313,11 +3343,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3317 "dhcp6_parser.cc"
+#line 3347 "dhcp6_parser.cc"
     break;
 
-  case 583: // $@86: %empty
-#line 2077 "dhcp6_parser.yy"
+  case 589: // $@86: %empty
+#line 2102 "dhcp6_parser.yy"
                         {
     ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3325,38 +3355,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 3329 "dhcp6_parser.cc"
+#line 3359 "dhcp6_parser.cc"
     break;
 
-  case 584: // pd_pools_list: "pd-pools" $@86 ":" "[" pd_pools_list_content "]"
-#line 2083 "dhcp6_parser.yy"
+  case 590: // pd_pools_list: "pd-pools" $@86 ":" "[" pd_pools_list_content "]"
+#line 2108 "dhcp6_parser.yy"
                                                               {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3338 "dhcp6_parser.cc"
+#line 3368 "dhcp6_parser.cc"
     break;
 
-  case 589: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
-#line 2096 "dhcp6_parser.yy"
+  case 595: // not_empty_pd_pools_list: not_empty_pd_pools_list ","
+#line 2121 "dhcp6_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 3346 "dhcp6_parser.cc"
+#line 3376 "dhcp6_parser.cc"
     break;
 
-  case 590: // $@87: %empty
-#line 2101 "dhcp6_parser.yy"
+  case 596: // $@87: %empty
+#line 2126 "dhcp6_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3356 "dhcp6_parser.cc"
+#line 3386 "dhcp6_parser.cc"
     break;
 
-  case 591: // pd_pool_entry: "{" $@87 pd_pool_params "}"
-#line 2105 "dhcp6_parser.yy"
+  case 597: // pd_pool_entry: "{" $@87 pd_pool_params "}"
+#line 2130 "dhcp6_parser.yy"
                                 {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3364,21 +3394,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3368 "dhcp6_parser.cc"
+#line 3398 "dhcp6_parser.cc"
     break;
 
-  case 592: // $@88: %empty
-#line 2113 "dhcp6_parser.yy"
+  case 598: // $@88: %empty
+#line 2138 "dhcp6_parser.yy"
                             {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3378 "dhcp6_parser.cc"
+#line 3408 "dhcp6_parser.cc"
     break;
 
-  case 593: // sub_pd_pool: "{" $@88 pd_pool_params "}"
-#line 2117 "dhcp6_parser.yy"
+  case 599: // sub_pd_pool: "{" $@88 pd_pool_params "}"
+#line 2142 "dhcp6_parser.yy"
                                 {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3386,87 +3416,87 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3390 "dhcp6_parser.cc"
+#line 3420 "dhcp6_parser.cc"
     break;
 
-  case 596: // pd_pool_params: pd_pool_params ","
-#line 2127 "dhcp6_parser.yy"
+  case 602: // pd_pool_params: pd_pool_params ","
+#line 2152 "dhcp6_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 3398 "dhcp6_parser.cc"
+#line 3428 "dhcp6_parser.cc"
     break;
 
-  case 608: // $@89: %empty
-#line 2145 "dhcp6_parser.yy"
+  case 614: // $@89: %empty
+#line 2170 "dhcp6_parser.yy"
                   {
     ctx.unique("prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3407 "dhcp6_parser.cc"
+#line 3437 "dhcp6_parser.cc"
     break;
 
-  case 609: // pd_prefix: "prefix" $@89 ":" "constant string"
-#line 2148 "dhcp6_parser.yy"
+  case 615: // pd_prefix: "prefix" $@89 ":" "constant string"
+#line 2173 "dhcp6_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 3417 "dhcp6_parser.cc"
+#line 3447 "dhcp6_parser.cc"
     break;
 
-  case 610: // pd_prefix_len: "prefix-len" ":" "integer"
-#line 2154 "dhcp6_parser.yy"
+  case 616: // pd_prefix_len: "prefix-len" ":" "integer"
+#line 2179 "dhcp6_parser.yy"
                                         {
     ctx.unique("prefix-len", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 3427 "dhcp6_parser.cc"
+#line 3457 "dhcp6_parser.cc"
     break;
 
-  case 611: // $@90: %empty
-#line 2160 "dhcp6_parser.yy"
+  case 617: // $@90: %empty
+#line 2185 "dhcp6_parser.yy"
                                  {
     ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3436 "dhcp6_parser.cc"
+#line 3466 "dhcp6_parser.cc"
     break;
 
-  case 612: // excluded_prefix: "excluded-prefix" $@90 ":" "constant string"
-#line 2163 "dhcp6_parser.yy"
+  case 618: // excluded_prefix: "excluded-prefix" $@90 ":" "constant string"
+#line 2188 "dhcp6_parser.yy"
                {
     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 3446 "dhcp6_parser.cc"
+#line 3476 "dhcp6_parser.cc"
     break;
 
-  case 613: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
-#line 2169 "dhcp6_parser.yy"
+  case 619: // excluded_prefix_len: "excluded-prefix-len" ":" "integer"
+#line 2194 "dhcp6_parser.yy"
                                                        {
     ctx.unique("excluded-prefix-len", ctx.loc2pos(yystack_[2].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 3456 "dhcp6_parser.cc"
+#line 3486 "dhcp6_parser.cc"
     break;
 
-  case 614: // pd_delegated_len: "delegated-len" ":" "integer"
-#line 2175 "dhcp6_parser.yy"
+  case 620: // pd_delegated_len: "delegated-len" ":" "integer"
+#line 2200 "dhcp6_parser.yy"
                                               {
     ctx.unique("delegated-len", ctx.loc2pos(yystack_[2].location));
     ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 3466 "dhcp6_parser.cc"
+#line 3496 "dhcp6_parser.cc"
     break;
 
-  case 615: // $@91: %empty
-#line 2184 "dhcp6_parser.yy"
+  case 621: // $@91: %empty
+#line 2209 "dhcp6_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3474,74 +3504,74 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3478 "dhcp6_parser.cc"
+#line 3508 "dhcp6_parser.cc"
     break;
 
-  case 616: // reservations: "reservations" $@91 ":" "[" reservations_list "]"
-#line 2190 "dhcp6_parser.yy"
+  case 622: // reservations: "reservations" $@91 ":" "[" reservations_list "]"
+#line 2215 "dhcp6_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3487 "dhcp6_parser.cc"
+#line 3517 "dhcp6_parser.cc"
     break;
 
-  case 621: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2201 "dhcp6_parser.yy"
+  case 627: // not_empty_reservations_list: not_empty_reservations_list ","
+#line 2226 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3495 "dhcp6_parser.cc"
+#line 3525 "dhcp6_parser.cc"
     break;
 
-  case 622: // $@92: %empty
-#line 2206 "dhcp6_parser.yy"
+  case 628: // $@92: %empty
+#line 2231 "dhcp6_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3505 "dhcp6_parser.cc"
+#line 3535 "dhcp6_parser.cc"
     break;
 
-  case 623: // reservation: "{" $@92 reservation_params "}"
-#line 2210 "dhcp6_parser.yy"
+  case 629: // reservation: "{" $@92 reservation_params "}"
+#line 2235 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3514 "dhcp6_parser.cc"
+#line 3544 "dhcp6_parser.cc"
     break;
 
-  case 624: // $@93: %empty
-#line 2215 "dhcp6_parser.yy"
+  case 630: // $@93: %empty
+#line 2240 "dhcp6_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3524 "dhcp6_parser.cc"
+#line 3554 "dhcp6_parser.cc"
     break;
 
-  case 625: // sub_reservation: "{" $@93 reservation_params "}"
-#line 2219 "dhcp6_parser.yy"
+  case 631: // sub_reservation: "{" $@93 reservation_params "}"
+#line 2244 "dhcp6_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3533 "dhcp6_parser.cc"
+#line 3563 "dhcp6_parser.cc"
     break;
 
-  case 630: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2230 "dhcp6_parser.yy"
+  case 636: // not_empty_reservation_params: not_empty_reservation_params ","
+#line 2255 "dhcp6_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3541 "dhcp6_parser.cc"
+#line 3571 "dhcp6_parser.cc"
     break;
 
-  case 642: // $@94: %empty
-#line 2249 "dhcp6_parser.yy"
+  case 648: // $@94: %empty
+#line 2274 "dhcp6_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3549,20 +3579,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3553 "dhcp6_parser.cc"
+#line 3583 "dhcp6_parser.cc"
     break;
 
-  case 643: // ip_addresses: "ip-addresses" $@94 ":" list_strings
-#line 2255 "dhcp6_parser.yy"
+  case 649: // ip_addresses: "ip-addresses" $@94 ":" list_strings
+#line 2280 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3562 "dhcp6_parser.cc"
+#line 3592 "dhcp6_parser.cc"
     break;
 
-  case 644: // $@95: %empty
-#line 2260 "dhcp6_parser.yy"
+  case 650: // $@95: %empty
+#line 2285 "dhcp6_parser.yy"
                    {
     ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3570,96 +3600,96 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3574 "dhcp6_parser.cc"
+#line 3604 "dhcp6_parser.cc"
     break;
 
-  case 645: // prefixes: "prefixes" $@95 ":" list_strings
-#line 2266 "dhcp6_parser.yy"
+  case 651: // prefixes: "prefixes" $@95 ":" list_strings
+#line 2291 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3583 "dhcp6_parser.cc"
+#line 3613 "dhcp6_parser.cc"
     break;
 
-  case 646: // $@96: %empty
-#line 2271 "dhcp6_parser.yy"
+  case 652: // $@96: %empty
+#line 2296 "dhcp6_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3592 "dhcp6_parser.cc"
+#line 3622 "dhcp6_parser.cc"
     break;
 
-  case 647: // duid: "duid" $@96 ":" "constant string"
-#line 2274 "dhcp6_parser.yy"
+  case 653: // duid: "duid" $@96 ":" "constant string"
+#line 2299 "dhcp6_parser.yy"
                {
     ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 3602 "dhcp6_parser.cc"
+#line 3632 "dhcp6_parser.cc"
     break;
 
-  case 648: // $@97: %empty
-#line 2280 "dhcp6_parser.yy"
+  case 654: // $@97: %empty
+#line 2305 "dhcp6_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3611 "dhcp6_parser.cc"
+#line 3641 "dhcp6_parser.cc"
     break;
 
-  case 649: // hw_address: "hw-address" $@97 ":" "constant string"
-#line 2283 "dhcp6_parser.yy"
+  case 655: // hw_address: "hw-address" $@97 ":" "constant string"
+#line 2308 "dhcp6_parser.yy"
                {
     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 3621 "dhcp6_parser.cc"
+#line 3651 "dhcp6_parser.cc"
     break;
 
-  case 650: // $@98: %empty
-#line 2289 "dhcp6_parser.yy"
+  case 656: // $@98: %empty
+#line 2314 "dhcp6_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3630 "dhcp6_parser.cc"
+#line 3660 "dhcp6_parser.cc"
     break;
 
-  case 651: // hostname: "hostname" $@98 ":" "constant string"
-#line 2292 "dhcp6_parser.yy"
+  case 657: // hostname: "hostname" $@98 ":" "constant string"
+#line 2317 "dhcp6_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 3640 "dhcp6_parser.cc"
+#line 3670 "dhcp6_parser.cc"
     break;
 
-  case 652: // $@99: %empty
-#line 2298 "dhcp6_parser.yy"
+  case 658: // $@99: %empty
+#line 2323 "dhcp6_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3649 "dhcp6_parser.cc"
+#line 3679 "dhcp6_parser.cc"
     break;
 
-  case 653: // flex_id_value: "flex-id" $@99 ":" "constant string"
-#line 2301 "dhcp6_parser.yy"
+  case 659: // flex_id_value: "flex-id" $@99 ":" "constant string"
+#line 2326 "dhcp6_parser.yy"
                {
     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 3659 "dhcp6_parser.cc"
+#line 3689 "dhcp6_parser.cc"
     break;
 
-  case 654: // $@100: %empty
-#line 2307 "dhcp6_parser.yy"
+  case 660: // $@100: %empty
+#line 2332 "dhcp6_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3667,20 +3697,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3671 "dhcp6_parser.cc"
+#line 3701 "dhcp6_parser.cc"
     break;
 
-  case 655: // reservation_client_classes: "client-classes" $@100 ":" list_strings
-#line 2313 "dhcp6_parser.yy"
+  case 661: // reservation_client_classes: "client-classes" $@100 ":" list_strings
+#line 2338 "dhcp6_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3680 "dhcp6_parser.cc"
+#line 3710 "dhcp6_parser.cc"
     break;
 
-  case 656: // $@101: %empty
-#line 2321 "dhcp6_parser.yy"
+  case 662: // $@101: %empty
+#line 2346 "dhcp6_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3688,39 +3718,39 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3692 "dhcp6_parser.cc"
+#line 3722 "dhcp6_parser.cc"
     break;
 
-  case 657: // relay: "relay" $@101 ":" "{" relay_map "}"
-#line 2327 "dhcp6_parser.yy"
+  case 663: // relay: "relay" $@101 ":" "{" relay_map "}"
+#line 2352 "dhcp6_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3701 "dhcp6_parser.cc"
+#line 3731 "dhcp6_parser.cc"
     break;
 
-  case 660: // $@102: %empty
-#line 2336 "dhcp6_parser.yy"
+  case 666: // $@102: %empty
+#line 2361 "dhcp6_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3710 "dhcp6_parser.cc"
+#line 3740 "dhcp6_parser.cc"
     break;
 
-  case 661: // ip_address: "ip-address" $@102 ":" "constant string"
-#line 2339 "dhcp6_parser.yy"
+  case 667: // ip_address: "ip-address" $@102 ":" "constant string"
+#line 2364 "dhcp6_parser.yy"
                {
     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 3720 "dhcp6_parser.cc"
+#line 3750 "dhcp6_parser.cc"
     break;
 
-  case 662: // $@103: %empty
-#line 2348 "dhcp6_parser.yy"
+  case 668: // $@103: %empty
+#line 2373 "dhcp6_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3728,85 +3758,85 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3732 "dhcp6_parser.cc"
+#line 3762 "dhcp6_parser.cc"
     break;
 
-  case 663: // client_classes: "client-classes" $@103 ":" "[" client_classes_list "]"
-#line 2354 "dhcp6_parser.yy"
+  case 669: // client_classes: "client-classes" $@103 ":" "[" client_classes_list "]"
+#line 2379 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3741 "dhcp6_parser.cc"
+#line 3771 "dhcp6_parser.cc"
     break;
 
-  case 666: // client_classes_list: client_classes_list ","
-#line 2361 "dhcp6_parser.yy"
+  case 672: // client_classes_list: client_classes_list ","
+#line 2386 "dhcp6_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 3749 "dhcp6_parser.cc"
+#line 3779 "dhcp6_parser.cc"
     break;
 
-  case 667: // $@104: %empty
-#line 2366 "dhcp6_parser.yy"
+  case 673: // $@104: %empty
+#line 2391 "dhcp6_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3759 "dhcp6_parser.cc"
+#line 3789 "dhcp6_parser.cc"
     break;
 
-  case 668: // client_class_entry: "{" $@104 client_class_params "}"
-#line 2370 "dhcp6_parser.yy"
+  case 674: // client_class_entry: "{" $@104 client_class_params "}"
+#line 2395 "dhcp6_parser.yy"
                                      {
     // 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 3769 "dhcp6_parser.cc"
+#line 3799 "dhcp6_parser.cc"
     break;
 
-  case 673: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2382 "dhcp6_parser.yy"
+  case 679: // not_empty_client_class_params: not_empty_client_class_params ","
+#line 2407 "dhcp6_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3777 "dhcp6_parser.cc"
+#line 3807 "dhcp6_parser.cc"
     break;
 
-  case 688: // $@105: %empty
-#line 2404 "dhcp6_parser.yy"
+  case 694: // $@105: %empty
+#line 2429 "dhcp6_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3786 "dhcp6_parser.cc"
+#line 3816 "dhcp6_parser.cc"
     break;
 
-  case 689: // client_class_test: "test" $@105 ":" "constant string"
-#line 2407 "dhcp6_parser.yy"
+  case 695: // client_class_test: "test" $@105 ":" "constant string"
+#line 2432 "dhcp6_parser.yy"
                {
     ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 3796 "dhcp6_parser.cc"
+#line 3826 "dhcp6_parser.cc"
     break;
 
-  case 690: // only_if_required: "only-if-required" ":" "boolean"
-#line 2413 "dhcp6_parser.yy"
+  case 696: // only_if_required: "only-if-required" ":" "boolean"
+#line 2438 "dhcp6_parser.yy"
                                                  {
     ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 3806 "dhcp6_parser.cc"
+#line 3836 "dhcp6_parser.cc"
     break;
 
-  case 691: // $@106: %empty
-#line 2422 "dhcp6_parser.yy"
+  case 697: // $@106: %empty
+#line 2447 "dhcp6_parser.yy"
                      {
     ctx.unique("server-id", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3814,125 +3844,125 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 3818 "dhcp6_parser.cc"
+#line 3848 "dhcp6_parser.cc"
     break;
 
-  case 692: // server_id: "server-id" $@106 ":" "{" server_id_params "}"
-#line 2428 "dhcp6_parser.yy"
+  case 698: // server_id: "server-id" $@106 ":" "{" server_id_params "}"
+#line 2453 "dhcp6_parser.yy"
                                                        {
     // 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 3829 "dhcp6_parser.cc"
+#line 3859 "dhcp6_parser.cc"
     break;
 
-  case 695: // server_id_params: server_id_params ","
-#line 2437 "dhcp6_parser.yy"
+  case 701: // server_id_params: server_id_params ","
+#line 2462 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 3837 "dhcp6_parser.cc"
+#line 3867 "dhcp6_parser.cc"
     break;
 
-  case 705: // $@107: %empty
-#line 2453 "dhcp6_parser.yy"
+  case 711: // $@107: %empty
+#line 2478 "dhcp6_parser.yy"
                      {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 3846 "dhcp6_parser.cc"
+#line 3876 "dhcp6_parser.cc"
     break;
 
-  case 706: // server_id_type: "type" $@107 ":" duid_type
-#line 2456 "dhcp6_parser.yy"
+  case 712: // server_id_type: "type" $@107 ":" duid_type
+#line 2481 "dhcp6_parser.yy"
                   {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 3855 "dhcp6_parser.cc"
+#line 3885 "dhcp6_parser.cc"
     break;
 
-  case 707: // duid_type: "LLT"
-#line 2461 "dhcp6_parser.yy"
+  case 713: // duid_type: "LLT"
+#line 2486 "dhcp6_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 3861 "dhcp6_parser.cc"
+#line 3891 "dhcp6_parser.cc"
     break;
 
-  case 708: // duid_type: "EN"
-#line 2462 "dhcp6_parser.yy"
+  case 714: // duid_type: "EN"
+#line 2487 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 3867 "dhcp6_parser.cc"
+#line 3897 "dhcp6_parser.cc"
     break;
 
-  case 709: // duid_type: "LL"
-#line 2463 "dhcp6_parser.yy"
+  case 715: // duid_type: "LL"
+#line 2488 "dhcp6_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 3873 "dhcp6_parser.cc"
+#line 3903 "dhcp6_parser.cc"
     break;
 
-  case 710: // htype: "htype" ":" "integer"
-#line 2466 "dhcp6_parser.yy"
+  case 716: // htype: "htype" ":" "integer"
+#line 2491 "dhcp6_parser.yy"
                            {
     ctx.unique("htype", ctx.loc2pos(yystack_[2].location));
     ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 3883 "dhcp6_parser.cc"
+#line 3913 "dhcp6_parser.cc"
     break;
 
-  case 711: // $@108: %empty
-#line 2472 "dhcp6_parser.yy"
+  case 717: // $@108: %empty
+#line 2497 "dhcp6_parser.yy"
                        {
     ctx.unique("identifier", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3892 "dhcp6_parser.cc"
+#line 3922 "dhcp6_parser.cc"
     break;
 
-  case 712: // identifier: "identifier" $@108 ":" "constant string"
-#line 2475 "dhcp6_parser.yy"
+  case 718: // identifier: "identifier" $@108 ":" "constant string"
+#line 2500 "dhcp6_parser.yy"
                {
     ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 3902 "dhcp6_parser.cc"
+#line 3932 "dhcp6_parser.cc"
     break;
 
-  case 713: // time: "time" ":" "integer"
-#line 2481 "dhcp6_parser.yy"
+  case 719: // time: "time" ":" "integer"
+#line 2506 "dhcp6_parser.yy"
                          {
     ctx.unique("time", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 3912 "dhcp6_parser.cc"
+#line 3942 "dhcp6_parser.cc"
     break;
 
-  case 714: // enterprise_id: "enterprise-id" ":" "integer"
-#line 2487 "dhcp6_parser.yy"
+  case 720: // enterprise_id: "enterprise-id" ":" "integer"
+#line 2512 "dhcp6_parser.yy"
                                            {
     ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 3922 "dhcp6_parser.cc"
+#line 3952 "dhcp6_parser.cc"
     break;
 
-  case 715: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2495 "dhcp6_parser.yy"
+  case 721: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2520 "dhcp6_parser.yy"
                                          {
     ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 3932 "dhcp6_parser.cc"
+#line 3962 "dhcp6_parser.cc"
     break;
 
-  case 716: // $@109: %empty
-#line 2503 "dhcp6_parser.yy"
+  case 722: // $@109: %empty
+#line 2528 "dhcp6_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3940,66 +3970,66 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 3944 "dhcp6_parser.cc"
+#line 3974 "dhcp6_parser.cc"
     break;
 
-  case 717: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}"
-#line 2509 "dhcp6_parser.yy"
+  case 723: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}"
+#line 2534 "dhcp6_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3953 "dhcp6_parser.cc"
+#line 3983 "dhcp6_parser.cc"
     break;
 
-  case 720: // control_socket_params: control_socket_params ","
-#line 2516 "dhcp6_parser.yy"
+  case 726: // control_socket_params: control_socket_params ","
+#line 2541 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 3961 "dhcp6_parser.cc"
+#line 3991 "dhcp6_parser.cc"
     break;
 
-  case 726: // $@110: %empty
-#line 2528 "dhcp6_parser.yy"
+  case 732: // $@110: %empty
+#line 2553 "dhcp6_parser.yy"
                          {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3970 "dhcp6_parser.cc"
+#line 4000 "dhcp6_parser.cc"
     break;
 
-  case 727: // socket_type: "socket-type" $@110 ":" "constant string"
-#line 2531 "dhcp6_parser.yy"
+  case 733: // socket_type: "socket-type" $@110 ":" "constant string"
+#line 2556 "dhcp6_parser.yy"
                {
     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 3980 "dhcp6_parser.cc"
+#line 4010 "dhcp6_parser.cc"
     break;
 
-  case 728: // $@111: %empty
-#line 2537 "dhcp6_parser.yy"
+  case 734: // $@111: %empty
+#line 2562 "dhcp6_parser.yy"
                          {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3989 "dhcp6_parser.cc"
+#line 4019 "dhcp6_parser.cc"
     break;
 
-  case 729: // socket_name: "socket-name" $@111 ":" "constant string"
-#line 2540 "dhcp6_parser.yy"
+  case 735: // socket_name: "socket-name" $@111 ":" "constant string"
+#line 2565 "dhcp6_parser.yy"
                {
     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 3999 "dhcp6_parser.cc"
+#line 4029 "dhcp6_parser.cc"
     break;
 
-  case 730: // $@112: %empty
-#line 2549 "dhcp6_parser.yy"
+  case 736: // $@112: %empty
+#line 2574 "dhcp6_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4007,87 +4037,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 4011 "dhcp6_parser.cc"
+#line 4041 "dhcp6_parser.cc"
     break;
 
-  case 731: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}"
-#line 2555 "dhcp6_parser.yy"
+  case 737: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}"
+#line 2580 "dhcp6_parser.yy"
                                                            {
     // The enable queue parameter is required.
     ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4022 "dhcp6_parser.cc"
+#line 4052 "dhcp6_parser.cc"
     break;
 
-  case 734: // queue_control_params: queue_control_params ","
-#line 2564 "dhcp6_parser.yy"
+  case 740: // queue_control_params: queue_control_params ","
+#line 2589 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4030 "dhcp6_parser.cc"
+#line 4060 "dhcp6_parser.cc"
     break;
 
-  case 741: // enable_queue: "enable-queue" ":" "boolean"
-#line 2577 "dhcp6_parser.yy"
+  case 747: // enable_queue: "enable-queue" ":" "boolean"
+#line 2602 "dhcp6_parser.yy"
                                          {
     ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-queue", b);
 }
-#line 4040 "dhcp6_parser.cc"
+#line 4070 "dhcp6_parser.cc"
     break;
 
-  case 742: // $@113: %empty
-#line 2583 "dhcp6_parser.yy"
+  case 748: // $@113: %empty
+#line 2608 "dhcp6_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4049 "dhcp6_parser.cc"
+#line 4079 "dhcp6_parser.cc"
     break;
 
-  case 743: // queue_type: "queue-type" $@113 ":" "constant string"
-#line 2586 "dhcp6_parser.yy"
+  case 749: // queue_type: "queue-type" $@113 ":" "constant string"
+#line 2611 "dhcp6_parser.yy"
                {
     ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("queue-type", qt);
     ctx.leave();
 }
-#line 4059 "dhcp6_parser.cc"
+#line 4089 "dhcp6_parser.cc"
     break;
 
-  case 744: // capacity: "capacity" ":" "integer"
-#line 2592 "dhcp6_parser.yy"
+  case 750: // capacity: "capacity" ":" "integer"
+#line 2617 "dhcp6_parser.yy"
                                  {
     ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
     ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("capacity", c);
 }
-#line 4069 "dhcp6_parser.cc"
+#line 4099 "dhcp6_parser.cc"
     break;
 
-  case 745: // $@114: %empty
-#line 2598 "dhcp6_parser.yy"
+  case 751: // $@114: %empty
+#line 2623 "dhcp6_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4078 "dhcp6_parser.cc"
+#line 4108 "dhcp6_parser.cc"
     break;
 
-  case 746: // arbitrary_map_entry: "constant string" $@114 ":" value
-#line 2601 "dhcp6_parser.yy"
+  case 752: // arbitrary_map_entry: "constant string" $@114 ":" value
+#line 2626 "dhcp6_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4087 "dhcp6_parser.cc"
+#line 4117 "dhcp6_parser.cc"
     break;
 
-  case 747: // $@115: %empty
-#line 2608 "dhcp6_parser.yy"
+  case 753: // $@115: %empty
+#line 2633 "dhcp6_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4095,291 +4125,291 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4099 "dhcp6_parser.cc"
+#line 4129 "dhcp6_parser.cc"
     break;
 
-  case 748: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}"
-#line 2614 "dhcp6_parser.yy"
+  case 754: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}"
+#line 2639 "dhcp6_parser.yy"
                                                        {
     // 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 4110 "dhcp6_parser.cc"
+#line 4140 "dhcp6_parser.cc"
     break;
 
-  case 749: // $@116: %empty
-#line 2621 "dhcp6_parser.yy"
+  case 755: // $@116: %empty
+#line 2646 "dhcp6_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4120 "dhcp6_parser.cc"
+#line 4150 "dhcp6_parser.cc"
     break;
 
-  case 750: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}"
-#line 2625 "dhcp6_parser.yy"
+  case 756: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}"
+#line 2650 "dhcp6_parser.yy"
                                   {
     // 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 4130 "dhcp6_parser.cc"
+#line 4160 "dhcp6_parser.cc"
     break;
 
-  case 753: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2633 "dhcp6_parser.yy"
+  case 759: // dhcp_ddns_params: dhcp_ddns_params ","
+#line 2658 "dhcp6_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4138 "dhcp6_parser.cc"
+#line 4168 "dhcp6_parser.cc"
     break;
 
-  case 772: // enable_updates: "enable-updates" ":" "boolean"
-#line 2658 "dhcp6_parser.yy"
+  case 778: // enable_updates: "enable-updates" ":" "boolean"
+#line 2683 "dhcp6_parser.yy"
                                              {
     ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 4148 "dhcp6_parser.cc"
+#line 4178 "dhcp6_parser.cc"
     break;
 
-  case 773: // $@117: %empty
-#line 2665 "dhcp6_parser.yy"
+  case 779: // $@117: %empty
+#line 2690 "dhcp6_parser.yy"
                                          {
     ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4157 "dhcp6_parser.cc"
+#line 4187 "dhcp6_parser.cc"
     break;
 
-  case 774: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
-#line 2668 "dhcp6_parser.yy"
+  case 780: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
+#line 2693 "dhcp6_parser.yy"
                {
     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 4167 "dhcp6_parser.cc"
+#line 4197 "dhcp6_parser.cc"
     break;
 
-  case 775: // $@118: %empty
-#line 2674 "dhcp6_parser.yy"
+  case 781: // $@118: %empty
+#line 2699 "dhcp6_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4176 "dhcp6_parser.cc"
+#line 4206 "dhcp6_parser.cc"
     break;
 
-  case 776: // server_ip: "server-ip" $@118 ":" "constant string"
-#line 2677 "dhcp6_parser.yy"
+  case 782: // server_ip: "server-ip" $@118 ":" "constant string"
+#line 2702 "dhcp6_parser.yy"
                {
     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 4186 "dhcp6_parser.cc"
+#line 4216 "dhcp6_parser.cc"
     break;
 
-  case 777: // server_port: "server-port" ":" "integer"
-#line 2683 "dhcp6_parser.yy"
+  case 783: // server_port: "server-port" ":" "integer"
+#line 2708 "dhcp6_parser.yy"
                                        {
     ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 4196 "dhcp6_parser.cc"
+#line 4226 "dhcp6_parser.cc"
     break;
 
-  case 778: // $@119: %empty
-#line 2689 "dhcp6_parser.yy"
+  case 784: // $@119: %empty
+#line 2714 "dhcp6_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4205 "dhcp6_parser.cc"
+#line 4235 "dhcp6_parser.cc"
     break;
 
-  case 779: // sender_ip: "sender-ip" $@119 ":" "constant string"
-#line 2692 "dhcp6_parser.yy"
+  case 785: // sender_ip: "sender-ip" $@119 ":" "constant string"
+#line 2717 "dhcp6_parser.yy"
                {
     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 4215 "dhcp6_parser.cc"
+#line 4245 "dhcp6_parser.cc"
     break;
 
-  case 780: // sender_port: "sender-port" ":" "integer"
-#line 2698 "dhcp6_parser.yy"
+  case 786: // sender_port: "sender-port" ":" "integer"
+#line 2723 "dhcp6_parser.yy"
                                        {
     ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 4225 "dhcp6_parser.cc"
+#line 4255 "dhcp6_parser.cc"
     break;
 
-  case 781: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2704 "dhcp6_parser.yy"
+  case 787: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2729 "dhcp6_parser.yy"
                                              {
     ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].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 4235 "dhcp6_parser.cc"
+#line 4265 "dhcp6_parser.cc"
     break;
 
-  case 782: // $@120: %empty
-#line 2710 "dhcp6_parser.yy"
+  case 788: // $@120: %empty
+#line 2735 "dhcp6_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4244 "dhcp6_parser.cc"
+#line 4274 "dhcp6_parser.cc"
     break;
 
-  case 783: // ncr_protocol: "ncr-protocol" $@120 ":" ncr_protocol_value
-#line 2713 "dhcp6_parser.yy"
+  case 789: // ncr_protocol: "ncr-protocol" $@120 ":" ncr_protocol_value
+#line 2738 "dhcp6_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4253 "dhcp6_parser.cc"
+#line 4283 "dhcp6_parser.cc"
     break;
 
-  case 784: // ncr_protocol_value: "UDP"
-#line 2719 "dhcp6_parser.yy"
+  case 790: // ncr_protocol_value: "UDP"
+#line 2744 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4259 "dhcp6_parser.cc"
+#line 4289 "dhcp6_parser.cc"
     break;
 
-  case 785: // ncr_protocol_value: "TCP"
-#line 2720 "dhcp6_parser.yy"
+  case 791: // ncr_protocol_value: "TCP"
+#line 2745 "dhcp6_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4265 "dhcp6_parser.cc"
+#line 4295 "dhcp6_parser.cc"
     break;
 
-  case 786: // $@121: %empty
-#line 2723 "dhcp6_parser.yy"
+  case 792: // $@121: %empty
+#line 2748 "dhcp6_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4274 "dhcp6_parser.cc"
+#line 4304 "dhcp6_parser.cc"
     break;
 
-  case 787: // ncr_format: "ncr-format" $@121 ":" "JSON"
-#line 2726 "dhcp6_parser.yy"
+  case 793: // ncr_format: "ncr-format" $@121 ":" "JSON"
+#line 2751 "dhcp6_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4284 "dhcp6_parser.cc"
+#line 4314 "dhcp6_parser.cc"
     break;
 
-  case 788: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2733 "dhcp6_parser.yy"
+  case 794: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2758 "dhcp6_parser.yy"
                                                          {
     ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 4294 "dhcp6_parser.cc"
+#line 4324 "dhcp6_parser.cc"
     break;
 
-  case 789: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2740 "dhcp6_parser.yy"
+  case 795: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2765 "dhcp6_parser.yy"
                                                                  {
     ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 4304 "dhcp6_parser.cc"
+#line 4334 "dhcp6_parser.cc"
     break;
 
-  case 790: // $@122: %empty
-#line 2747 "dhcp6_parser.yy"
+  case 796: // $@122: %empty
+#line 2772 "dhcp6_parser.yy"
                                              {
     ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 4313 "dhcp6_parser.cc"
+#line 4343 "dhcp6_parser.cc"
     break;
 
-  case 791: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value
-#line 2750 "dhcp6_parser.yy"
+  case 797: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value
+#line 2775 "dhcp6_parser.yy"
                                        {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4322 "dhcp6_parser.cc"
+#line 4352 "dhcp6_parser.cc"
     break;
 
-  case 792: // $@123: %empty
-#line 2756 "dhcp6_parser.yy"
+  case 798: // $@123: %empty
+#line 2781 "dhcp6_parser.yy"
                                        {
     ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4331 "dhcp6_parser.cc"
+#line 4361 "dhcp6_parser.cc"
     break;
 
-  case 793: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string"
-#line 2759 "dhcp6_parser.yy"
+  case 799: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string"
+#line 2784 "dhcp6_parser.yy"
                {
     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 4341 "dhcp6_parser.cc"
+#line 4371 "dhcp6_parser.cc"
     break;
 
-  case 794: // $@124: %empty
-#line 2766 "dhcp6_parser.yy"
+  case 800: // $@124: %empty
+#line 2791 "dhcp6_parser.yy"
                                          {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4350 "dhcp6_parser.cc"
+#line 4380 "dhcp6_parser.cc"
     break;
 
-  case 795: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string"
-#line 2769 "dhcp6_parser.yy"
+  case 801: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string"
+#line 2794 "dhcp6_parser.yy"
                {
     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 4360 "dhcp6_parser.cc"
+#line 4390 "dhcp6_parser.cc"
     break;
 
-  case 796: // $@125: %empty
-#line 2776 "dhcp6_parser.yy"
+  case 802: // $@125: %empty
+#line 2801 "dhcp6_parser.yy"
                                                          {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4369 "dhcp6_parser.cc"
+#line 4399 "dhcp6_parser.cc"
     break;
 
-  case 797: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string"
-#line 2779 "dhcp6_parser.yy"
+  case 803: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string"
+#line 2804 "dhcp6_parser.yy"
                {
     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 4379 "dhcp6_parser.cc"
+#line 4409 "dhcp6_parser.cc"
     break;
 
-  case 798: // $@126: %empty
-#line 2788 "dhcp6_parser.yy"
+  case 804: // $@126: %empty
+#line 2813 "dhcp6_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4387,48 +4417,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4391 "dhcp6_parser.cc"
+#line 4421 "dhcp6_parser.cc"
     break;
 
-  case 799: // config_control: "config-control" $@126 ":" "{" config_control_params "}"
-#line 2794 "dhcp6_parser.yy"
+  case 805: // config_control: "config-control" $@126 ":" "{" config_control_params "}"
+#line 2819 "dhcp6_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4401 "dhcp6_parser.cc"
+#line 4431 "dhcp6_parser.cc"
     break;
 
-  case 800: // $@127: %empty
-#line 2800 "dhcp6_parser.yy"
+  case 806: // $@127: %empty
+#line 2825 "dhcp6_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4411 "dhcp6_parser.cc"
+#line 4441 "dhcp6_parser.cc"
     break;
 
-  case 801: // sub_config_control: "{" $@127 config_control_params "}"
-#line 2804 "dhcp6_parser.yy"
+  case 807: // sub_config_control: "{" $@127 config_control_params "}"
+#line 2829 "dhcp6_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4420 "dhcp6_parser.cc"
+#line 4450 "dhcp6_parser.cc"
     break;
 
-  case 804: // config_control_params: config_control_params ","
-#line 2812 "dhcp6_parser.yy"
+  case 810: // config_control_params: config_control_params ","
+#line 2837 "dhcp6_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4428 "dhcp6_parser.cc"
+#line 4458 "dhcp6_parser.cc"
     break;
 
-  case 807: // $@128: %empty
-#line 2822 "dhcp6_parser.yy"
+  case 813: // $@128: %empty
+#line 2847 "dhcp6_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4436,30 +4466,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4440 "dhcp6_parser.cc"
+#line 4470 "dhcp6_parser.cc"
     break;
 
-  case 808: // config_databases: "config-databases" $@128 ":" "[" database_list "]"
-#line 2828 "dhcp6_parser.yy"
+  case 814: // config_databases: "config-databases" $@128 ":" "[" database_list "]"
+#line 2853 "dhcp6_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4449 "dhcp6_parser.cc"
+#line 4479 "dhcp6_parser.cc"
     break;
 
-  case 809: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2833 "dhcp6_parser.yy"
+  case 815: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2858 "dhcp6_parser.yy"
                                                              {
     ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].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 4459 "dhcp6_parser.cc"
+#line 4489 "dhcp6_parser.cc"
     break;
 
-  case 810: // $@129: %empty
-#line 2841 "dhcp6_parser.yy"
+  case 816: // $@129: %empty
+#line 2866 "dhcp6_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4467,83 +4497,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4471 "dhcp6_parser.cc"
+#line 4501 "dhcp6_parser.cc"
     break;
 
-  case 811: // loggers: "loggers" $@129 ":" "[" loggers_entries "]"
-#line 2847 "dhcp6_parser.yy"
+  case 817: // loggers: "loggers" $@129 ":" "[" loggers_entries "]"
+#line 2872 "dhcp6_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4480 "dhcp6_parser.cc"
+#line 4510 "dhcp6_parser.cc"
     break;
 
-  case 814: // loggers_entries: loggers_entries ","
-#line 2856 "dhcp6_parser.yy"
+  case 820: // loggers_entries: loggers_entries ","
+#line 2881 "dhcp6_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4488 "dhcp6_parser.cc"
+#line 4518 "dhcp6_parser.cc"
     break;
 
-  case 815: // $@130: %empty
-#line 2862 "dhcp6_parser.yy"
+  case 821: // $@130: %empty
+#line 2887 "dhcp6_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4498 "dhcp6_parser.cc"
+#line 4528 "dhcp6_parser.cc"
     break;
 
-  case 816: // logger_entry: "{" $@130 logger_params "}"
-#line 2866 "dhcp6_parser.yy"
+  case 822: // logger_entry: "{" $@130 logger_params "}"
+#line 2891 "dhcp6_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4506 "dhcp6_parser.cc"
+#line 4536 "dhcp6_parser.cc"
     break;
 
-  case 819: // logger_params: logger_params ","
-#line 2872 "dhcp6_parser.yy"
+  case 825: // logger_params: logger_params ","
+#line 2897 "dhcp6_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4514 "dhcp6_parser.cc"
+#line 4544 "dhcp6_parser.cc"
     break;
 
-  case 827: // debuglevel: "debuglevel" ":" "integer"
-#line 2886 "dhcp6_parser.yy"
+  case 833: // debuglevel: "debuglevel" ":" "integer"
+#line 2911 "dhcp6_parser.yy"
                                      {
     ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
     ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 4524 "dhcp6_parser.cc"
+#line 4554 "dhcp6_parser.cc"
     break;
 
-  case 828: // $@131: %empty
-#line 2892 "dhcp6_parser.yy"
+  case 834: // $@131: %empty
+#line 2917 "dhcp6_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4533 "dhcp6_parser.cc"
+#line 4563 "dhcp6_parser.cc"
     break;
 
-  case 829: // severity: "severity" $@131 ":" "constant string"
-#line 2895 "dhcp6_parser.yy"
+  case 835: // severity: "severity" $@131 ":" "constant string"
+#line 2920 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 4543 "dhcp6_parser.cc"
+#line 4573 "dhcp6_parser.cc"
     break;
 
-  case 830: // $@132: %empty
-#line 2901 "dhcp6_parser.yy"
+  case 836: // $@132: %empty
+#line 2926 "dhcp6_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4551,122 +4581,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4555 "dhcp6_parser.cc"
+#line 4585 "dhcp6_parser.cc"
     break;
 
-  case 831: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]"
-#line 2907 "dhcp6_parser.yy"
+  case 837: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]"
+#line 2932 "dhcp6_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4564 "dhcp6_parser.cc"
+#line 4594 "dhcp6_parser.cc"
     break;
 
-  case 834: // output_options_list_content: output_options_list_content ","
-#line 2914 "dhcp6_parser.yy"
+  case 840: // output_options_list_content: output_options_list_content ","
+#line 2939 "dhcp6_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 4572 "dhcp6_parser.cc"
+#line 4602 "dhcp6_parser.cc"
     break;
 
-  case 835: // $@133: %empty
-#line 2919 "dhcp6_parser.yy"
+  case 841: // $@133: %empty
+#line 2944 "dhcp6_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4582 "dhcp6_parser.cc"
+#line 4612 "dhcp6_parser.cc"
     break;
 
-  case 836: // output_entry: "{" $@133 output_params_list "}"
-#line 2923 "dhcp6_parser.yy"
+  case 842: // output_entry: "{" $@133 output_params_list "}"
+#line 2948 "dhcp6_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4590 "dhcp6_parser.cc"
+#line 4620 "dhcp6_parser.cc"
     break;
 
-  case 839: // output_params_list: output_params_list ","
-#line 2929 "dhcp6_parser.yy"
+  case 845: // output_params_list: output_params_list ","
+#line 2954 "dhcp6_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4598 "dhcp6_parser.cc"
+#line 4628 "dhcp6_parser.cc"
     break;
 
-  case 845: // $@134: %empty
-#line 2941 "dhcp6_parser.yy"
+  case 851: // $@134: %empty
+#line 2966 "dhcp6_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4607 "dhcp6_parser.cc"
+#line 4637 "dhcp6_parser.cc"
     break;
 
-  case 846: // output: "output" $@134 ":" "constant string"
-#line 2944 "dhcp6_parser.yy"
+  case 852: // output: "output" $@134 ":" "constant string"
+#line 2969 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 4617 "dhcp6_parser.cc"
+#line 4647 "dhcp6_parser.cc"
     break;
 
-  case 847: // flush: "flush" ":" "boolean"
-#line 2950 "dhcp6_parser.yy"
+  case 853: // flush: "flush" ":" "boolean"
+#line 2975 "dhcp6_parser.yy"
                            {
     ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
     ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 4627 "dhcp6_parser.cc"
+#line 4657 "dhcp6_parser.cc"
     break;
 
-  case 848: // maxsize: "maxsize" ":" "integer"
-#line 2956 "dhcp6_parser.yy"
+  case 854: // maxsize: "maxsize" ":" "integer"
+#line 2981 "dhcp6_parser.yy"
                                {
     ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 4637 "dhcp6_parser.cc"
+#line 4667 "dhcp6_parser.cc"
     break;
 
-  case 849: // maxver: "maxver" ":" "integer"
-#line 2962 "dhcp6_parser.yy"
+  case 855: // maxver: "maxver" ":" "integer"
+#line 2987 "dhcp6_parser.yy"
                              {
     ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 4647 "dhcp6_parser.cc"
+#line 4677 "dhcp6_parser.cc"
     break;
 
-  case 850: // $@135: %empty
-#line 2968 "dhcp6_parser.yy"
+  case 856: // $@135: %empty
+#line 2993 "dhcp6_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4656 "dhcp6_parser.cc"
+#line 4686 "dhcp6_parser.cc"
     break;
 
-  case 851: // pattern: "pattern" $@135 ":" "constant string"
-#line 2971 "dhcp6_parser.yy"
+  case 857: // pattern: "pattern" $@135 ":" "constant string"
+#line 2996 "dhcp6_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 4666 "dhcp6_parser.cc"
+#line 4696 "dhcp6_parser.cc"
     break;
 
-  case 852: // $@136: %empty
-#line 2977 "dhcp6_parser.yy"
+  case 858: // $@136: %empty
+#line 3002 "dhcp6_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4674,38 +4704,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 4678 "dhcp6_parser.cc"
+#line 4708 "dhcp6_parser.cc"
     break;
 
-  case 853: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}"
-#line 2983 "dhcp6_parser.yy"
+  case 859: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}"
+#line 3008 "dhcp6_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4687 "dhcp6_parser.cc"
+#line 4717 "dhcp6_parser.cc"
     break;
 
-  case 856: // compatibility_params: compatibility_params ","
-#line 2990 "dhcp6_parser.yy"
+  case 862: // compatibility_params: compatibility_params ","
+#line 3015 "dhcp6_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4695 "dhcp6_parser.cc"
+#line 4725 "dhcp6_parser.cc"
     break;
 
-  case 859: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2999 "dhcp6_parser.yy"
+  case 865: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 3024 "dhcp6_parser.yy"
                                                              {
     ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lenient-option-parsing", b);
 }
-#line 4705 "dhcp6_parser.cc"
+#line 4735 "dhcp6_parser.cc"
     break;
 
 
-#line 4709 "dhcp6_parser.cc"
+#line 4739 "dhcp6_parser.cc"
 
             default:
               break;
@@ -5057,146 +5087,147 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short Dhcp6Parser::yypact_ninf_ = -996;
+  const short Dhcp6Parser::yypact_ninf_ = -1005;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short
   Dhcp6Parser::yypact_[] =
   {
-     437,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,    36,    30,    93,    94,   106,
-     108,   137,   155,   171,   173,   180,   182,   192,   193,   199,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,    30,  -166,
-     130,   160,    78,   668,    42,   296,    71,    -2,    81,   -25,
-     -90,   451,    35,  -996,   244,   248,   260,   257,   297,  -996,
-      65,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   306,   328,
-     329,   335,   349,   359,   362,   369,   370,   377,   379,   389,
-     397,   398,  -996,   399,   416,   434,   436,   439,  -996,  -996,
-    -996,   440,   441,   442,  -996,  -996,  -996,   443,  -996,  -996,
-    -996,  -996,   444,   445,   446,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,   447,  -996,  -996,  -996,  -996,  -996,
-    -996,   448,   449,   452,  -996,  -996,   455,  -996,    96,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,   456,   457,   459,   463,  -996,
-     100,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,   464,   465,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,   113,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   123,
-    -996,  -996,  -996,  -996,  -996,   467,  -996,   468,   471,  -996,
-    -996,  -996,  -996,  -996,  -996,   133,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,   323,   438,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,   357,  -996,  -996,   472,  -996,  -996,  -996,
-     473,  -996,  -996,   470,   476,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   477,   479,
-    -996,  -996,  -996,  -996,   478,   482,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   176,  -996,
-    -996,  -996,   483,  -996,  -996,   484,  -996,   487,   488,  -996,
-    -996,   499,   500,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     236,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   503,   246,
-    -996,  -996,  -996,  -996,    30,    30,  -996,   245,   504,  -996,
-    -996,   508,   510,   513,   514,   516,   517,   315,   316,   317,
-     319,   320,   324,   325,   331,   321,   312,   326,   338,   340,
-     341,   518,   342,   344,   348,   351,   352,   536,   550,   552,
-     354,   356,   358,   553,   556,   566,   365,   568,   569,   571,
-     574,   373,   375,   376,   578,   579,   581,   586,   588,   589,
-     592,   594,   595,   393,   596,   598,   601,   602,   603,   605,
-     412,   415,   417,   620,   622,  -996,   160,  -996,   623,   435,
-     450,   418,   453,    78,  -996,   643,   645,   646,   647,   649,
-     454,   460,   650,   652,   653,   668,  -996,   654,    42,  -996,
-     655,   458,   656,   461,   466,   296,  -996,   658,   662,   663,
-     664,   666,   670,   671,  -996,    71,  -996,   672,   674,   469,
-     675,   677,   678,   474,  -996,    81,   679,   480,   481,  -996,
-     -25,   680,   681,   -73,  -996,   485,   682,   687,   486,   691,
-     489,   490,   695,   698,   496,   497,   699,   707,   709,   724,
-     451,  -996,   725,   519,    35,  -996,  -996,  -996,   727,   734,
-     532,   737,   738,   739,   745,   748,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     544,  -996,  -996,  -996,  -996,  -996,   -95,   546,   548,  -996,
-    -996,  -996,   754,   755,   756,  -996,   766,   765,   563,   327,
-    -996,  -996,  -996,   769,   773,   774,   775,   776,   778,   780,
-     779,   782,  -996,   783,   784,   785,   786,   570,   584,  -996,
-    -996,  -996,   791,   790,  -996,   793,  -996,  -996,  -996,  -996,
-    -996,   794,   795,   591,   593,   607,  -996,  -996,   793,   608,
-     812,  -996,   610,  -996,   621,  -996,   624,  -996,  -996,  -996,
-     793,   793,   793,   625,   626,   627,   628,  -996,   629,   630,
-    -996,   631,   632,   633,  -996,  -996,   634,  -996,  -996,  -996,
-     635,   765,  -996,  -996,   636,   637,  -996,   640,  -996,  -996,
-     -50,   587,  -996,  -996,   -95,   641,   644,   651,  -996,   797,
-    -996,  -996,    30,   160,  -996,    35,    78,   292,   292,   850,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   853,
-     855,   856,   860,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,   -91,    30,   313,   758,   861,   862,   863,   273,   252,
-     152,   -20,    -5,   451,  -996,  -996,   864,  -145,  -996,  -996,
-     867,   868,  -996,  -996,  -996,  -996,  -996,   -19,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,   850,  -996,   250,
-     271,   274,  -996,  -996,  -996,  -996,   873,   875,   876,   877,
-     878,   879,   881,  -996,   882,  -996,  -996,  -996,  -996,  -996,
-     275,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     290,  -996,   883,   884,  -996,  -996,   885,   887,  -996,  -996,
-     886,   890,  -996,  -996,   888,   892,  -996,  -996,   891,   893,
-    -996,  -996,  -996,   185,  -996,  -996,  -996,   894,  -996,  -996,
-    -996,   284,  -996,  -996,  -996,  -996,   301,  -996,  -996,  -996,
-     291,  -996,  -996,   895,   896,  -996,  -996,   897,   899,  -996,
-     900,   901,   902,   903,   904,   905,   303,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   906,   907,   908,  -996,
-    -996,  -996,  -996,   310,  -996,  -996,  -996,  -996,  -996,  -996,
-     909,   910,   911,  -996,   343,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   347,  -996,  -996,  -996,
-     912,  -996,   913,  -996,  -996,  -996,   361,  -996,  -996,  -996,
-    -996,  -996,   364,  -996,   311,  -996,   914,  -996,   372,  -996,
-    -996,   688,  -996,   915,   916,  -996,  -996,   917,   919,  -996,
-    -996,  -996,   880,  -996,   918,  -996,  -996,  -996,   921,   922,
-     923,   924,   718,   717,   720,   719,   722,   723,   728,   931,
-     730,   932,   938,   940,   941,   292,  -996,  -996,   292,  -996,
-     850,   668,  -996,   853,    81,  -996,   855,   -25,  -996,   856,
-     757,  -996,   860,   -91,  -996,  -996,   313,  -996,   943,   758,
-    -996,   309,   861,  -996,    71,  -996,   862,   -90,  -996,   863,
-     743,   744,   746,   747,   753,   759,   273,  -996,   944,   967,
-     762,   763,   767,   252,  -996,   788,   799,   800,   152,  -996,
-     991,   992,   -20,  -996,   801,  1014,   809,  1017,    -5,  -996,
-    -996,   190,   864,  -996,   816,  -145,  -996,  -996,  1027,  1031,
-      42,  -996,   867,   296,  -996,   868,  1033,  -996,  -996,   129,
-     710,   832,   845,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     197,  -996,   852,   889,   898,   920,  -996,   374,  -996,   391,
-    -996,  1070,  -996,  1077,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,   410,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     925,  -996,  -996,  1084,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  1083,  1091,  -996,  -996,  -996,
-    -996,  -996,  1088,  -996,   411,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,    28,   926,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,   927,   928,  -996,  -996,   929,  -996,    30,
-    -996,  -996,  1093,  -996,  -996,  -996,  -996,  -996,   413,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,   930,   414,  -996,
-     420,  -996,   933,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,   757,  -996,  -996,  1094,   934,  -996,   309,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    1096,   935,  1097,   190,  -996,  -996,  -996,  -996,  -996,  -996,
-     939,  -996,  -996,  1098,  -996,   942,  -996,  -996,  1095,  -996,
-    -996,   346,  -996,    11,  1095,  -996,  -996,  1100,  1101,  1102,
-    -996,   426,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  1103,
-     937,   946,   948,  1105,    11,  -996,   950,  -996,  -996,  -996,
-     951,  -996,  -996,  -996
+     434, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005,    68,    30,    74,    81,    92,
+     102,   110,   126,   137,   147,   163,   167,   173,   177,   187,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,    30,  -137,
+     130,   160,    78,   665,   311,   230,   238,    13,    80,   108,
+     -82,   448,    43, -1005,   158,   153,   205,   249,   247, -1005,
+      67, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   257,   286,
+     336,   338,   346,   364,   368,   386,   387,   393,   403,   416,
+     417,   427, -1005,   428,   436,   437,   440,   441, -1005, -1005,
+   -1005,   442,   444,   445, -1005, -1005, -1005,   446, -1005, -1005,
+   -1005, -1005,   449,   451,   452, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005,   455, -1005, -1005, -1005, -1005, -1005,
+   -1005,   456,   457,   458, -1005, -1005,   459, -1005,    79, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005,   463,   464,   465,   467, -1005,
+      83, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005,   468,   471, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005,    97, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   112,
+   -1005, -1005, -1005, -1005, -1005,   472, -1005,   473,   474, -1005,
+   -1005, -1005, -1005, -1005, -1005,   113, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,   289,   304, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,   323, -1005, -1005,   475, -1005, -1005, -1005,
+     477, -1005, -1005,   343,   367, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   479,   481,
+   -1005, -1005, -1005, -1005,   411,   483, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   133, -1005,
+   -1005, -1005,   484, -1005, -1005,   487, -1005,   488,   498, -1005,
+   -1005,   499,   500, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+     143, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   502,   149,
+   -1005, -1005, -1005, -1005,    30,    30, -1005,   294,   504, -1005,
+   -1005,   508,   510,   513,   515,   518,   522,   273,   313,   316,
+     317,   320,   321,   322,   324,   236,   325,   337,   339,   341,
+     342,   524,   351,   353,   334,   345,   348,   547,   549,   553,
+     354,   355,   356,   565,   569,   571,   362,   574,   578,   579,
+     581,   370,   372,   373,   586,   588,   589,   592,   594,   595,
+     596,   598,   600,   391,   602,   603,   605,   620,   621,   622,
+     412,   413,   431,   623,   626, -1005,   160, -1005,   644,   433,
+     435,   439,   443,    78, -1005,   646,   650,   652,   654,   655,
+     450,   447,   656,   658,   661,   665, -1005,   662,   311, -1005,
+     663,   454,   666,   460,   461,   230, -1005,   668,   669,   672,
+     673,   674,   675,   676, -1005,   238, -1005,   677,   678,   469,
+     680,   681,   682,   453, -1005,    80,   683,   478,   482, -1005,
+     108,   687,   689,   -50, -1005,   485,   691,   693,   486,   695,
+     489,   495,   698,   706,   497,   512,   707,   725,   726,   727,
+     448, -1005,   737,   528,    43, -1005, -1005, -1005,   740,   738,
+     533,   745,   746,   747,   749,   754, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+     545, -1005, -1005, -1005, -1005, -1005,  -108,   548,   558, -1005,
+   -1005, -1005,   755,   757,   767, -1005,   768,   771,   561,   330,
+   -1005, -1005, -1005,   774,   775,   776,   778,   777,   781,   784,
+     783,   785, -1005,   786,   787,   789,   790,   570,   585, -1005,
+   -1005, -1005,   794,   793, -1005,   796, -1005, -1005, -1005, -1005,
+   -1005,   797,   811,   604,   606,   617, -1005, -1005,   796,   624,
+     826, -1005,   625, -1005,   627, -1005,   628, -1005, -1005, -1005,
+     796,   796,   796,   629,   630,   631,   632, -1005,   633,   634,
+   -1005,   637,   640,   643, -1005, -1005,   647, -1005, -1005, -1005,
+     648,   771, -1005, -1005,   649,   653, -1005,   657, -1005, -1005,
+      25,   613, -1005, -1005,  -108,   660,   664,   667, -1005,   813,
+   -1005, -1005,    30,   160, -1005,    43,    78,   347,   347,   827,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   828,
+     829,   832,   852, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005,   -94,    30,    -3,   750,   861,   862,   864,   275,   106,
+      87,   -44,   -58,   448, -1005, -1005,   867,  -160, -1005, -1005,
+     869,   872, -1005, -1005, -1005, -1005, -1005,   -66, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005,   827, -1005,   150,
+     165,   192, -1005, -1005, -1005, -1005,   877,   878,   880,   881,
+     882,   883,   884,   885,   886,   887, -1005,   888, -1005, -1005,
+   -1005, -1005, -1005,   200, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005,   239, -1005,   889,   890,
+   -1005, -1005,   891,   893, -1005, -1005,   892,   896, -1005, -1005,
+     894,   898, -1005, -1005,   897,   899, -1005, -1005, -1005,   131,
+   -1005, -1005, -1005,   900, -1005, -1005, -1005,   157, -1005, -1005,
+   -1005, -1005,   248, -1005, -1005, -1005,   303, -1005, -1005,   901,
+     902, -1005, -1005,   903,   905, -1005,   906,   907,   908,   909,
+     910,   911,   274, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,   912,   913,   914, -1005, -1005, -1005, -1005,   291,
+   -1005, -1005, -1005, -1005, -1005, -1005,   915,   916,   917, -1005,
+     293, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,   295, -1005, -1005, -1005,   918, -1005,   919, -1005,
+   -1005, -1005,   327, -1005, -1005, -1005, -1005, -1005,   331, -1005,
+     314, -1005,   920, -1005,   350, -1005, -1005,   712, -1005,   921,
+     923, -1005, -1005,   922,   926, -1005, -1005, -1005,   924, -1005,
+     925, -1005, -1005, -1005,   929,   930,   931,   934,   690,   714,
+     728,   723,   729,   730,   731,   732,   733,   734,   936,   736,
+     937,   947,   949,   950,   347, -1005, -1005,   347, -1005,   827,
+     665, -1005,   828,    80, -1005,   829,   108, -1005,   832,   753,
+   -1005,   852,   -94, -1005, -1005,    -3, -1005,   952,   750, -1005,
+     234,   861, -1005,   238, -1005,   862,   -82, -1005,   864,   743,
+     759,   762,   765,   766,   769,   275, -1005,   959,   960,   773,
+     791,   805,   106, -1005,   751,   806,   809,    87, -1005,   978,
+    1000,   -44, -1005,   814,  1006,   815,  1023,   -58, -1005, -1005,
+     329,   867, -1005,   822,  -160, -1005, -1005,  1036,  1040,   311,
+   -1005,   869,   230, -1005,   872,  1042, -1005, -1005,   242,   838,
+     851,   858, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,   237, -1005,   874,   895,   904,   927, -1005,   366,
+   -1005,   395, -1005,  1086, -1005,  1089, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,   396, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,   928, -1005, -1005,  1096, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005,  1095,  1102, -1005,
+   -1005, -1005, -1005, -1005,  1098, -1005,   397, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005,   216,   932, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005,   933,   935, -1005, -1005,   938,
+   -1005,    30, -1005, -1005,  1103, -1005, -1005, -1005, -1005, -1005,
+     398, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   939,
+     414, -1005,   415, -1005,   940, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005,   753, -1005, -1005,  1105,   941, -1005,
+     234, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,  1106,   942,  1107,   329, -1005, -1005, -1005, -1005,
+   -1005, -1005,   945, -1005, -1005,  1108, -1005,   946, -1005, -1005,
+    1109, -1005, -1005,   335, -1005,     3,  1109, -1005, -1005,  1110,
+    1111,  1114, -1005,   426, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005,  1115,   944,   954,   955,  1116,     3, -1005,   948, -1005,
+   -1005, -1005,   953, -1005, -1005, -1005
   };
 
   const short
@@ -5206,18 +5237,18 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,    28,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        1,    46,    38,    34,    33,    30,    31,    32,    37,     3,
-      35,    36,    61,     5,    67,     7,   184,     9,   362,    11,
-     565,    13,   592,    15,   624,    17,   485,    19,   494,    21,
-     533,    23,   324,    25,   749,    27,   800,    29,    48,    41,
-       0,     0,     0,     0,     0,     0,   626,     0,   496,   535,
+      35,    36,    61,     5,    67,     7,   184,     9,   368,    11,
+     571,    13,   598,    15,   630,    17,   491,    19,   500,    21,
+     539,    23,   330,    25,   755,    27,   806,    29,    48,    41,
+       0,     0,     0,     0,     0,     0,   632,     0,   502,   541,
        0,     0,     0,    50,     0,    49,     0,     0,    42,    63,
-       0,    65,   137,   798,   182,   203,   205,   207,     0,     0,
+       0,    65,   137,   804,   182,   203,   205,   207,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   176,     0,     0,     0,     0,     0,   156,   163,
-     165,     0,     0,     0,   353,   483,   524,     0,   431,   579,
-     581,   423,     0,     0,     0,   280,   299,   289,   272,   662,
-     615,   315,   336,   691,     0,   301,   716,   730,   747,   169,
-     171,     0,     0,     0,   810,   852,     0,   136,     0,    69,
+     165,     0,     0,     0,   359,   489,   530,     0,   437,   585,
+     587,   429,     0,     0,     0,   286,   305,   295,   278,   668,
+     621,   321,   342,   697,     0,   307,   722,   736,   753,   169,
+     171,     0,     0,     0,   816,   858,     0,   136,     0,    69,
       72,    73,    74,    75,    76,    77,    78,    79,    80,   111,
      112,   113,   114,   115,    81,   119,   120,   121,   122,   123,
      124,   125,   126,   117,   118,   127,   128,   129,   106,   135,
@@ -5225,27 +5256,27 @@ namespace isc { namespace dhcp {
       89,   130,    94,    95,    82,   108,   109,   110,   107,    83,
       92,    93,   101,   102,   104,    91,    96,    97,    98,    99,
      100,   105,   116,   134,   197,     0,     0,     0,     0,   196,
-       0,   186,   189,   190,   191,   192,   193,   194,   195,   556,
-     583,   410,   412,   414,     0,     0,   418,   416,   656,   409,
-     367,   368,   369,   370,   371,   372,   373,   374,   393,   394,
-     395,   396,   397,   400,   401,   402,   403,   404,   405,   406,
-     407,   398,   399,   408,     0,   364,   378,   379,   380,   383,
-     384,   387,   388,   389,   386,   381,   382,   375,   376,   391,
-     392,   377,   385,   390,   577,   576,   572,   573,   571,     0,
-     567,   570,   574,   575,   608,     0,   611,     0,     0,   607,
-     601,   602,   600,   605,   606,     0,   594,   597,   598,   603,
-     604,   599,   654,   642,   644,   646,   648,   650,   652,   641,
-     638,   639,   640,     0,   627,   628,   633,   634,   631,   635,
-     636,   637,   632,     0,   514,   250,     0,   518,   516,   521,
-       0,   510,   511,     0,   497,   498,   501,   513,   502,   503,
-     504,   520,   505,   506,   507,   508,   509,   550,     0,     0,
-     548,   549,   552,   553,     0,   536,   537,   540,   541,   542,
-     543,   544,   545,   546,   547,   332,   334,   329,     0,   326,
-     330,   331,     0,   773,   775,     0,   778,     0,     0,   782,
-     786,     0,     0,   790,   792,   794,   796,   771,   769,   770,
-       0,   751,   754,   766,   755,   756,   757,   758,   759,   760,
-     761,   762,   763,   764,   765,   767,   768,   807,     0,     0,
-     802,   805,   806,    47,    52,     0,    39,    45,     0,    66,
+       0,   186,   189,   190,   191,   192,   193,   194,   195,   562,
+     589,   416,   418,   420,     0,     0,   424,   422,   662,   415,
+     373,   374,   375,   376,   377,   378,   379,   380,   399,   400,
+     401,   402,   403,   406,   407,   408,   409,   410,   411,   412,
+     413,   404,   405,   414,     0,   370,   384,   385,   386,   389,
+     390,   393,   394,   395,   392,   387,   388,   381,   382,   397,
+     398,   383,   391,   396,   583,   582,   578,   579,   577,     0,
+     573,   576,   580,   581,   614,     0,   617,     0,     0,   613,
+     607,   608,   606,   611,   612,     0,   600,   603,   604,   609,
+     610,   605,   660,   648,   650,   652,   654,   656,   658,   647,
+     644,   645,   646,     0,   633,   634,   639,   640,   637,   641,
+     642,   643,   638,     0,   520,   253,     0,   524,   522,   527,
+       0,   516,   517,     0,   503,   504,   507,   519,   508,   509,
+     510,   526,   511,   512,   513,   514,   515,   556,     0,     0,
+     554,   555,   558,   559,     0,   542,   543,   546,   547,   548,
+     549,   550,   551,   552,   553,   338,   340,   335,     0,   332,
+     336,   337,     0,   779,   781,     0,   784,     0,     0,   788,
+     792,     0,     0,   796,   798,   800,   802,   777,   775,   776,
+       0,   757,   760,   772,   761,   762,   763,   764,   765,   766,
+     767,   768,   769,   770,   771,   773,   774,   813,     0,     0,
+     808,   811,   812,    47,    52,     0,    39,    45,     0,    66,
       62,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -5254,137 +5285,138 @@ namespace isc { namespace dhcp {
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    60,    71,    68,     0,     0,
        0,     0,     0,   188,   185,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   366,   363,     0,   569,   566,
-       0,     0,     0,     0,     0,   596,   593,     0,     0,     0,
-       0,     0,     0,     0,   625,   630,   486,     0,     0,     0,
-       0,     0,     0,     0,   495,   500,     0,     0,     0,   534,
-     539,     0,     0,   328,   325,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   372,   369,     0,   575,   572,
+       0,     0,     0,     0,     0,   602,   599,     0,     0,     0,
+       0,     0,     0,     0,   631,   636,   492,     0,     0,     0,
+       0,     0,     0,     0,   501,   506,     0,     0,     0,   540,
+     545,     0,     0,   334,   331,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     753,   750,     0,     0,   804,   801,    51,    43,     0,     0,
+     759,   756,     0,     0,   810,   807,    51,    43,     0,     0,
        0,     0,     0,     0,     0,     0,   139,   140,   141,   142,
      143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
        0,   174,   175,   153,   154,   155,     0,     0,     0,   167,
      168,   173,     0,     0,     0,   178,     0,     0,     0,     0,
-     420,   421,   422,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   715,     0,     0,     0,     0,     0,     0,   179,
+     426,   427,   428,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   721,     0,     0,     0,     0,     0,     0,   179,
      180,   181,     0,     0,    70,     0,   199,   200,   201,   202,
-     187,     0,     0,     0,     0,     0,   429,   430,     0,     0,
-       0,   365,     0,   568,     0,   610,     0,   613,   614,   595,
-       0,     0,     0,     0,     0,     0,     0,   629,     0,     0,
-     512,     0,     0,     0,   523,   499,     0,   554,   555,   538,
-       0,     0,   327,   772,     0,     0,   777,     0,   780,   781,
-       0,     0,   788,   789,     0,     0,     0,     0,   752,     0,
-     809,   803,     0,     0,   138,     0,     0,     0,     0,   209,
-     177,   158,   159,   160,   161,   162,   157,   164,   166,   355,
-     487,   526,   433,    40,   580,   582,   425,   426,   427,   428,
-     424,     0,    48,     0,     0,     0,   617,   317,     0,     0,
+     187,     0,     0,     0,     0,     0,   435,   436,     0,     0,
+       0,   371,     0,   574,     0,   616,     0,   619,   620,   601,
+       0,     0,     0,     0,     0,     0,     0,   635,     0,     0,
+     518,     0,     0,     0,   529,   505,     0,   560,   561,   544,
+       0,     0,   333,   778,     0,     0,   783,     0,   786,   787,
+       0,     0,   794,   795,     0,     0,     0,     0,   758,     0,
+     815,   809,     0,     0,   138,     0,     0,     0,     0,   209,
+     177,   158,   159,   160,   161,   162,   157,   164,   166,   361,
+     493,   532,   439,    40,   586,   588,   431,   432,   433,   434,
+     430,     0,    48,     0,     0,     0,   623,   323,     0,     0,
        0,     0,     0,     0,   170,   172,     0,     0,    53,   198,
-     558,   585,   411,   413,   415,   419,   417,     0,   578,   609,
-     612,   655,   643,   645,   647,   649,   651,   653,   515,   251,
-     519,   517,   522,   551,   333,   335,   774,   776,   779,   784,
-     785,   783,   787,   791,   793,   795,   797,   209,    44,     0,
-       0,     0,   238,   243,   245,   247,     0,     0,     0,     0,
-       0,     0,     0,   257,     0,   264,   266,   268,   270,   237,
-       0,   216,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   230,   231,   232,   229,   233,   234,   235,   236,
-       0,   214,     0,   210,   211,   360,     0,   356,   357,   492,
-       0,   488,   489,   531,     0,   527,   528,   438,     0,   434,
-     435,   287,   288,     0,   282,   285,   286,     0,   297,   298,
-     294,     0,   291,   295,   296,   278,     0,   274,   277,   667,
-       0,   664,   622,     0,   618,   619,   322,     0,   318,   319,
-       0,     0,     0,     0,     0,     0,     0,   338,   341,   342,
-     343,   344,   345,   346,   705,   711,     0,     0,     0,   704,
-     701,   702,   703,     0,   693,   696,   699,   697,   698,   700,
-       0,     0,     0,   311,     0,   303,   306,   307,   308,   309,
-     310,   726,   728,   725,   723,   724,     0,   718,   721,   722,
-       0,   742,     0,   745,   738,   739,     0,   732,   735,   736,
-     737,   740,     0,   815,     0,   812,     0,   858,     0,   854,
-     857,    55,   563,     0,   559,   560,   590,     0,   586,   587,
-     660,   659,     0,   658,     0,    64,   799,   183,     0,     0,
+     564,   591,   417,   419,   421,   425,   423,     0,   584,   615,
+     618,   661,   649,   651,   653,   655,   657,   659,   521,   254,
+     525,   523,   528,   557,   339,   341,   780,   782,   785,   790,
+     791,   789,   793,   797,   799,   801,   803,   209,    44,     0,
+       0,     0,   241,   246,   248,   250,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   263,     0,   270,   272,
+     274,   276,   240,     0,   216,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   233,   234,
+     235,   232,   236,   237,   238,   239,     0,   214,     0,   210,
+     211,   366,     0,   362,   363,   498,     0,   494,   495,   537,
+       0,   533,   534,   444,     0,   440,   441,   293,   294,     0,
+     288,   291,   292,     0,   303,   304,   300,     0,   297,   301,
+     302,   284,     0,   280,   283,   673,     0,   670,   628,     0,
+     624,   625,   328,     0,   324,   325,     0,     0,     0,     0,
+       0,     0,     0,   344,   347,   348,   349,   350,   351,   352,
+     711,   717,     0,     0,     0,   710,   707,   708,   709,     0,
+     699,   702,   705,   703,   704,   706,     0,     0,     0,   317,
+       0,   309,   312,   313,   314,   315,   316,   732,   734,   731,
+     729,   730,     0,   724,   727,   728,     0,   748,     0,   751,
+     744,   745,     0,   738,   741,   742,   743,   746,     0,   821,
+       0,   818,     0,   864,     0,   860,   863,    55,   569,     0,
+     565,   566,   596,     0,   592,   593,   666,   665,     0,   664,
+       0,    64,   805,   183,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   218,   204,   206,     0,   208,
-     213,     0,   354,   359,   496,   484,   491,   535,   525,   530,
-       0,   432,   437,   284,   281,   300,   293,   290,     0,   276,
-     273,   669,   666,   663,   626,   616,   621,     0,   316,   321,
-       0,     0,     0,     0,     0,     0,   340,   337,     0,     0,
-       0,     0,     0,   695,   692,     0,     0,     0,   305,   302,
-       0,     0,   720,   717,     0,     0,     0,     0,   734,   731,
-     748,     0,   814,   811,     0,   856,   853,    57,     0,    56,
-       0,   557,   562,     0,   584,   589,     0,   657,   808,     0,
-       0,     0,     0,   249,   252,   253,   254,   255,   263,   256,
-       0,   262,     0,     0,     0,     0,   217,     0,   212,     0,
-     358,     0,   490,     0,   529,   482,   457,   458,   459,   461,
-     462,   463,   447,   448,   466,   467,   468,   469,   470,   473,
-     474,   475,   476,   477,   478,   479,   480,   471,   472,   481,
-     443,   444,   445,   446,   455,   456,   452,   453,   454,   451,
-     460,     0,   440,   449,   464,   465,   450,   436,   283,   292,
-       0,   275,   688,     0,   686,   680,   681,   682,   683,   684,
-     685,   687,   677,   678,   679,     0,   670,   671,   674,   675,
-     676,   665,     0,   620,     0,   320,   347,   348,   349,   350,
-     351,   352,   339,     0,     0,   710,   713,   714,   694,   312,
-     313,   314,   304,     0,     0,   719,   741,     0,   744,     0,
-     733,   830,     0,   828,   826,   820,   824,   825,     0,   817,
-     822,   823,   821,   813,   859,   855,    54,    59,     0,   561,
-       0,   588,     0,   240,   241,   242,   239,   244,   246,   248,
-     259,   260,   261,   258,   265,   267,   269,   271,   215,   361,
-     493,   532,   442,   439,   279,     0,     0,   668,   673,   623,
-     323,   707,   708,   709,   706,   712,   727,   729,   743,   746,
-       0,     0,     0,   819,   816,    58,   564,   591,   661,   441,
-       0,   690,   672,     0,   827,     0,   818,   689,     0,   829,
-     835,     0,   832,     0,   834,   831,   845,     0,     0,     0,
-     850,     0,   837,   840,   841,   842,   843,   844,   833,     0,
-       0,     0,     0,     0,   839,   836,     0,   847,   848,   849,
-       0,   838,   846,   851
+       0,     0,     0,     0,   218,   204,   206,     0,   208,   213,
+       0,   360,   365,   502,   490,   497,   541,   531,   536,     0,
+     438,   443,   290,   287,   306,   299,   296,     0,   282,   279,
+     675,   672,   669,   632,   622,   627,     0,   322,   327,     0,
+       0,     0,     0,     0,     0,   346,   343,     0,     0,     0,
+       0,     0,   701,   698,     0,     0,     0,   311,   308,     0,
+       0,   726,   723,     0,     0,     0,     0,   740,   737,   754,
+       0,   820,   817,     0,   862,   859,    57,     0,    56,     0,
+     563,   568,     0,   590,   595,     0,   663,   814,     0,     0,
+       0,     0,   252,   255,   256,   257,   258,   259,   260,   261,
+     269,   262,     0,   268,     0,     0,     0,     0,   217,     0,
+     212,     0,   364,     0,   496,     0,   535,   488,   463,   464,
+     465,   467,   468,   469,   453,   454,   472,   473,   474,   475,
+     476,   479,   480,   481,   482,   483,   484,   485,   486,   477,
+     478,   487,   449,   450,   451,   452,   461,   462,   458,   459,
+     460,   457,   466,     0,   446,   455,   470,   471,   456,   442,
+     289,   298,     0,   281,   694,     0,   692,   686,   687,   688,
+     689,   690,   691,   693,   683,   684,   685,     0,   676,   677,
+     680,   681,   682,   671,     0,   626,     0,   326,   353,   354,
+     355,   356,   357,   358,   345,     0,     0,   716,   719,   720,
+     700,   318,   319,   320,   310,     0,     0,   725,   747,     0,
+     750,     0,   739,   836,     0,   834,   832,   826,   830,   831,
+       0,   823,   828,   829,   827,   819,   865,   861,    54,    59,
+       0,   567,     0,   594,     0,   243,   244,   245,   242,   247,
+     249,   251,   265,   266,   267,   264,   271,   273,   275,   277,
+     215,   367,   499,   538,   448,   445,   285,     0,     0,   674,
+     679,   629,   329,   713,   714,   715,   712,   718,   733,   735,
+     749,   752,     0,     0,     0,   825,   822,    58,   570,   597,
+     667,   447,     0,   696,   678,     0,   833,     0,   824,   695,
+       0,   835,   841,     0,   838,     0,   840,   837,   851,     0,
+       0,     0,   856,     0,   843,   846,   847,   848,   849,   850,
+     839,     0,     0,     0,     0,     0,   845,   842,     0,   853,
+     854,   855,     0,   844,   852,   857
   };
 
   const short
   Dhcp6Parser::yypgoto_[] =
   {
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   -10,  -996,  -589,  -996,
-     409,  -996,  -996,  -996,  -996,   360,  -996,  -594,  -996,  -996,
-    -996,   -71,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   388,
-     609,  -996,  -996,   -43,   -14,    12,    16,    20,    33,   -59,
-     -31,   -30,   -28,   -27,   -26,    19,  -996,    34,    37,    38,
-      41,  -996,   400,    49,  -996,    52,  -996,    54,    55,    56,
-    -996,    59,  -996,    62,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   387,   604,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     314,  -996,   109,  -996,  -712,   111,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   -45,  -996,  -748,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,    89,
-    -996,  -996,  -996,  -996,  -996,    97,  -731,  -996,  -996,  -996,
-    -996,    98,  -996,  -996,  -996,  -996,  -996,  -996,  -996,    64,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,    84,  -996,  -996,
-    -996,    88,   564,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-      80,  -996,  -996,  -996,  -996,  -996,  -996,  -995,  -996,  -996,
-    -996,   115,  -996,  -996,  -996,   118,   606,  -996,  -996,  -993,
-    -996,  -992,  -996,    73,  -996,    75,  -996,    66,    69,    70,
-      72,  -996,  -996,  -996,  -991,  -996,  -996,  -996,  -996,   110,
-    -996,  -996,  -119,  1057,  -996,  -996,  -996,  -996,  -996,   125,
-    -996,  -996,  -996,   128,  -996,   590,  -996,   -67,  -996,  -996,
-    -996,  -996,  -996,   -64,  -996,  -996,  -996,  -996,  -996,     4,
-    -996,  -996,  -996,   132,  -996,  -996,  -996,   127,  -996,   611,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,    82,  -996,  -996,  -996,    68,   638,  -996,  -996,   -55,
-    -996,   -12,  -996,  -996,  -996,  -996,  -996,    77,  -996,  -996,
-    -996,    85,   619,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     -60,  -996,  -996,  -996,   131,  -996,  -996,  -996,   135,  -996,
-     618,   395,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -989,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,   138,  -996,  -996,  -996,   -93,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,   120,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   112,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,   107,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,   419,   597,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,   475,   599,
-    -996,  -996,  -996,  -996,  -996,  -996,   104,  -996,  -996,   -94,
-    -996,  -996,  -996,  -996,  -996,  -996,  -116,  -996,  -996,  -134,
-    -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,  -996,
-     114,  -996
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005,   -10, -1005,  -583, -1005,
+     193, -1005, -1005, -1005, -1005,   360, -1005,  -632, -1005, -1005,
+   -1005,   -71, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   399,
+     615, -1005, -1005,   -43,   -14,    12,    16,    20,    33,   -59,
+     -31,   -30,   -28,   -27,   -26,    19, -1005,    34,    37,    38,
+      41, -1005,   409,    49, -1005,    52, -1005,    54,    55,    56,
+   -1005,    59, -1005,    62, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005,   400,   611, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+     318, -1005,   109, -1005,  -712,   115, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005,   -45, -1005,  -748, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,    89, -1005, -1005, -1005, -1005, -1005,    98,  -731,
+   -1005, -1005, -1005, -1005,    96, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005,    65, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+      85, -1005, -1005, -1005,    88,   572, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,    82, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1004, -1005, -1005, -1005,   114, -1005, -1005, -1005,   118,   614,
+   -1005, -1005, -1002, -1005, -1001, -1005,    73, -1005,    75, -1005,
+      66,    69,    70,    72, -1005, -1005, -1005, -1000, -1005, -1005,
+   -1005, -1005,   111, -1005, -1005,  -121,  1067, -1005, -1005, -1005,
+   -1005, -1005,   122, -1005, -1005, -1005,   127, -1005,   599, -1005,
+     -67, -1005, -1005, -1005, -1005, -1005,   -64, -1005, -1005, -1005,
+   -1005, -1005,     4, -1005, -1005, -1005,   121, -1005, -1005, -1005,
+     129, -1005,   610, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005,    84, -1005, -1005, -1005,    90,   635,
+   -1005, -1005,   -55, -1005,   -12, -1005, -1005, -1005, -1005, -1005,
+      77, -1005, -1005, -1005,    86,   638, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,   -60, -1005, -1005, -1005,   132, -1005, -1005,
+   -1005,   138, -1005,   639,   405, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,  -998, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005,   135, -1005, -1005, -1005,
+     -98, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   123, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005,   103, -1005, -1005, -1005, -1005, -1005, -1005, -1005,   117,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+     420,   607, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005,   466,   608, -1005, -1005, -1005, -1005, -1005, -1005,    99,
+   -1005, -1005,   -99, -1005, -1005, -1005, -1005, -1005, -1005,  -118,
+   -1005, -1005,  -136, -1005, -1005, -1005, -1005, -1005, -1005, -1005,
+   -1005, -1005, -1005,   105, -1005
   };
 
   const short
@@ -5392,187 +5424,188 @@ namespace isc { namespace dhcp {
   {
        0,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    83,    39,    40,    69,
-     744,    87,    88,    41,    68,    84,    85,   769,   971,  1078,
-    1079,   829,    43,    70,    90,   438,    91,    45,    71,   158,
+     744,    87,    88,    41,    68,    84,    85,   769,   977,  1087,
+    1088,   832,    43,    70,    90,   438,    91,    45,    71,   158,
      159,   160,   441,   161,   162,   163,   164,   165,   166,   167,
      168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
      178,   467,   736,   179,   468,   180,   469,   181,   182,   183,
      498,   184,   499,   185,   186,   187,   188,   461,   189,   190,
      191,   192,   193,   443,    47,    72,   230,   231,   232,   508,
      233,   234,   235,   236,   194,   444,   195,   445,   196,   446,
-     852,   853,   854,  1008,   830,   831,   832,   988,  1236,   833,
-     989,   834,   990,   835,   991,   836,   837,   548,   838,   839,
-     840,   841,   842,   843,   999,  1243,   844,   845,   846,  1001,
-     847,  1002,   848,  1003,   849,  1004,   197,   487,   886,   887,
-     888,  1028,   198,   484,   873,   874,   875,   876,   199,   486,
-     881,   882,   883,   884,   200,   485,   201,   494,   934,   935,
-     936,   937,   938,   202,   490,   897,   898,   899,  1037,    63,
-      80,   388,   389,   390,   561,   391,   562,   203,   491,   906,
-     907,   908,   909,   910,   911,   912,   913,   204,   473,   856,
-     857,   858,  1011,    49,    73,   274,   275,   276,   517,   277,
-     518,   278,   519,   279,   523,   280,   522,   205,   206,   207,
-     208,   480,   750,   285,   286,   209,   477,   868,   869,   870,
-    1020,  1151,  1152,   210,   474,    57,    77,   860,   861,   862,
-    1014,    59,    78,   353,   354,   355,   356,   357,   358,   359,
-     547,   360,   551,   361,   550,   362,   363,   552,   364,   211,
-     475,   864,   865,   866,  1017,    61,    79,   374,   375,   376,
-     377,   378,   556,   379,   380,   381,   382,   288,   515,   973,
-     974,   975,  1080,    51,    74,   299,   300,   301,   527,   212,
-     478,   213,   479,   291,   516,   977,   978,   979,  1083,    53,
-      75,   315,   316,   317,   530,   318,   319,   532,   320,   321,
-     214,   489,   893,   894,   895,  1034,    55,    76,   333,   334,
-     335,   336,   538,   337,   539,   338,   540,   339,   541,   340,
-     542,   341,   543,   342,   537,   293,   524,   982,   983,  1086,
-     215,   488,   890,   891,  1031,  1175,  1176,  1177,  1178,  1179,
-    1255,  1180,   216,   492,   923,   924,   925,  1048,  1264,   926,
-     927,  1049,   928,   929,   217,   218,   495,   946,   947,   948,
-    1060,   949,  1061,   219,   496,   956,   957,   958,   959,  1065,
-     960,   961,  1067,   220,   497,    65,    81,   410,   411,   412,
-     413,   566,   414,   567,   415,   416,   569,   417,   418,   419,
-     572,   801,   420,   573,   421,   422,   423,   576,   424,   577,
-     425,   578,   426,   579,   221,   442,    67,    82,   429,   430,
-     431,   582,   432,   222,   503,   964,   965,  1071,  1218,  1219,
-    1220,  1221,  1272,  1222,  1270,  1291,  1292,  1293,  1301,  1302,
-    1303,  1309,  1304,  1305,  1306,  1307,  1313,   223,   504,   968,
-     969,   970
+     858,   859,   860,  1017,   833,   834,   835,   994,  1248,   836,
+     995,   837,   996,   838,   997,   839,   840,   548,   841,   842,
+     843,   844,   845,   846,   847,   848,   849,  1008,  1255,   850,
+     851,   852,  1010,   853,  1011,   854,  1012,   855,  1013,   197,
+     487,   892,   893,   894,  1037,   198,   484,   879,   880,   881,
+     882,   199,   486,   887,   888,   889,   890,   200,   485,   201,
+     494,   940,   941,   942,   943,   944,   202,   490,   903,   904,
+     905,  1046,    63,    80,   388,   389,   390,   561,   391,   562,
+     203,   491,   912,   913,   914,   915,   916,   917,   918,   919,
+     204,   473,   862,   863,   864,  1020,    49,    73,   274,   275,
+     276,   517,   277,   518,   278,   519,   279,   523,   280,   522,
+     205,   206,   207,   208,   480,   750,   285,   286,   209,   477,
+     874,   875,   876,  1029,  1163,  1164,   210,   474,    57,    77,
+     866,   867,   868,  1023,    59,    78,   353,   354,   355,   356,
+     357,   358,   359,   547,   360,   551,   361,   550,   362,   363,
+     552,   364,   211,   475,   870,   871,   872,  1026,    61,    79,
+     374,   375,   376,   377,   378,   556,   379,   380,   381,   382,
+     288,   515,   979,   980,   981,  1089,    51,    74,   299,   300,
+     301,   527,   212,   478,   213,   479,   291,   516,   983,   984,
+     985,  1092,    53,    75,   315,   316,   317,   530,   318,   319,
+     532,   320,   321,   214,   489,   899,   900,   901,  1043,    55,
+      76,   333,   334,   335,   336,   538,   337,   539,   338,   540,
+     339,   541,   340,   542,   341,   543,   342,   537,   293,   524,
+     988,   989,  1095,   215,   488,   896,   897,  1040,  1187,  1188,
+    1189,  1190,  1191,  1267,  1192,   216,   492,   929,   930,   931,
+    1057,  1276,   932,   933,  1058,   934,   935,   217,   218,   495,
+     952,   953,   954,  1069,   955,  1070,   219,   496,   962,   963,
+     964,   965,  1074,   966,   967,  1076,   220,   497,    65,    81,
+     410,   411,   412,   413,   566,   414,   567,   415,   416,   569,
+     417,   418,   419,   572,   801,   420,   573,   421,   422,   423,
+     576,   424,   577,   425,   578,   426,   579,   221,   442,    67,
+      82,   429,   430,   431,   582,   432,   222,   503,   970,   971,
+    1080,  1230,  1231,  1232,  1233,  1284,  1234,  1282,  1303,  1304,
+    1305,  1313,  1314,  1315,  1321,  1316,  1317,  1318,  1319,  1325,
+     223,   504,   974,   975,   976
   };
 
   const short
   Dhcp6Parser::yytable_[] =
   {
      157,   229,   249,   295,   309,   329,    38,   351,   370,   387,
-     407,   920,   372,   292,   256,   373,   850,   237,   289,   302,
-     313,   331,   880,   365,   383,  1141,   408,  1142,  1143,  1150,
-     250,  1156,   871,   352,   371,    31,    30,    32,   743,    33,
-     385,   386,   257,   258,    86,   259,   260,   261,   427,   428,
-     966,   345,   367,   346,   347,   368,   369,   385,   386,   251,
-     238,   290,   303,   314,   332,   156,   366,   384,   439,   409,
-     129,   130,   125,   440,   775,   129,   130,   287,   298,   312,
-     330,   731,   732,   733,   734,   252,   781,   782,   783,   253,
-     129,   130,   262,   254,   224,   225,   226,   227,   228,   506,
-      42,    44,   323,   513,   507,   344,   255,   263,   514,   980,
-     264,   265,   743,    46,   266,    48,   525,   126,   735,   872,
-     156,   526,   267,   799,   800,   268,   528,   269,   270,   271,
-     294,   529,   272,   941,   942,   273,   535,   129,   130,   281,
-      89,   536,   282,   283,    50,   284,   126,   296,   310,   297,
-     311,   950,   951,   952,  1233,  1234,  1235,   345,   246,   346,
-     347,   247,    52,   348,   349,   350,   129,   130,  1261,  1262,
-    1263,    92,    93,   129,   130,    94,   129,   130,    54,   563,
-      56,    95,    96,    97,   564,   156,   322,    58,  1023,    60,
-     156,  1024,   323,   324,   325,   326,   327,   328,  1296,    62,
-      64,  1297,  1298,  1299,  1300,   953,    66,    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,  1240,  1241,  1242,   580,
-      34,    35,    36,    37,   581,   127,   128,   129,   130,   584,
-     433,   434,   156,   506,   585,   129,   130,  1141,   985,  1142,
-    1143,  1150,   131,  1156,   435,   436,   345,   132,   133,   134,
-     135,   136,   137,   138,   584,   139,   914,   513,  1005,   986,
-     140,   156,   987,  1006,   817,   129,   130,  1026,   156,   141,
-    1027,   156,   142,  1005,  1032,   880,  1107,  1033,  1007,   143,
-     437,   930,   931,   932,  1029,   920,  1046,   144,   145,  1030,
-     447,  1047,   146,  1053,  1072,   147,   812,  1073,  1054,   148,
-     813,   814,   815,   816,   817,   818,   819,   820,   821,   822,
-     823,   544,   448,   449,   824,   825,   826,   827,   828,   450,
-     149,   150,   151,   152,   153,   154,  1058,   129,   130,  1294,
-    1062,  1059,  1295,   451,   155,  1063,    98,    99,   100,   101,
-     102,   103,   156,   452,  1068,   546,   453,   580,   345,  1069,
-     156,   126,  1070,   454,   455,  1075,  1211,  1005,  1212,  1213,
-    1076,   456,  1248,   457,   126,   345,   304,   305,   306,   307,
-     308,   129,   130,   458,   525,   915,   916,   917,   918,  1249,
-     156,   459,   460,   462,   129,   130,   900,   901,   902,   903,
-     904,   905,   246,  1252,   563,   247,  1273,   528,  1253,  1260,
-     463,  1274,  1276,   535,   586,   587,  1162,  1163,  1277,  1314,
-     746,   747,   748,   749,  1315,   157,   871,   878,   464,   879,
-     465,   545,   229,   466,   470,   471,   472,   476,   481,   482,
-     483,   493,   500,   501,   249,   588,   502,   295,   237,   505,
-     509,   510,   156,   511,   309,   292,   256,   512,   520,   521,
-     289,   531,   533,   302,   329,   534,   549,   553,   554,   555,
-     313,   557,   250,   558,   351,   560,   559,   565,   568,   370,
-     331,   570,   571,   372,   257,   258,   373,   259,   260,   261,
-     365,   238,   156,   574,   575,   383,   156,   583,   589,   407,
-     352,   251,   590,   290,   591,   371,   303,   592,   593,   156,
-     594,   595,   610,   314,   605,   408,   596,   597,   598,   287,
-     599,   600,   298,   332,   604,   601,   602,   252,   606,   312,
-     616,   253,   603,   366,   262,   254,   129,   130,   384,   330,
-     607,   608,   609,   611,   617,   612,   618,   622,   255,   263,
-     623,   613,   264,   265,   614,   615,   266,   619,   409,   620,
-     624,   621,   626,   627,   267,   628,   625,   268,   629,   269,
-     270,   271,   633,   634,   272,   635,   630,   273,   631,   632,
-     636,   281,   637,   638,   282,   283,   639,   284,   640,   641,
-     643,   296,   644,   297,   642,   645,   646,   647,   310,   648,
+     407,   926,   372,   292,   256,   373,   856,   237,   289,   302,
+     313,   331,   886,   365,   383,  1153,   408,  1154,  1155,  1162,
+     250,  1168,   877,   352,   371,    31,   775,    32,   972,    33,
+     129,   130,   257,   258,   743,   259,   260,   261,   781,   782,
+     783,   385,   386,   156,   129,   130,   427,   428,   323,   251,
+     238,   290,   303,   314,   332,   986,   366,   384,    30,   409,
+     439,   731,   732,   733,   734,   440,    86,   287,   298,   312,
+     330,    42,   506,   385,   386,   252,   513,   507,    44,   253,
+     125,   514,   262,   254,   224,   225,   226,   227,   228,    46,
+     525,   956,   957,   958,   344,   526,   255,   263,   735,    48,
+     264,   265,   947,   948,   266,   528,   535,    50,   743,   878,
+     529,   536,   267,   877,   884,   268,   885,   269,   270,   271,
+     920,   156,   272,    52,  1032,   273,   563,  1033,   817,   281,
+      89,   564,   282,   283,    54,   284,   580,   296,   310,   297,
+     311,   581,   584,   506,    56,   959,   434,   585,   991,   345,
+    1035,   346,   347,  1036,   433,   348,   349,   350,   584,   156,
+      58,    92,    93,   992,    60,    94,   129,   130,   129,   130,
+      62,    95,    96,    97,    64,   129,   130,   345,   367,   346,
+     347,   368,   369,  1308,    66,   513,  1309,  1310,  1311,  1312,
+     993,   799,   800,  1014,   129,   130,   129,   130,  1015,   435,
+      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,   936,
+     937,   938,  1014,    34,    35,    36,    37,  1016,   127,   128,
+     437,  1038,   921,   922,   923,   924,  1039,   436,   129,   130,
+    1153,   447,  1154,  1155,  1162,   131,  1168,  1245,  1246,  1247,
+     132,   133,   134,   135,   136,   137,   138,  1055,   139,  1252,
+    1253,  1254,  1056,   140,    98,    99,   100,   101,   102,   103,
+     448,   156,   141,   156,  1062,   142,  1067,   544,  1071,  1063,
+     156,  1068,   143,  1072,   886,  1119,  1041,   545,   126,  1042,
+     144,   145,   126,   345,   926,   146,   126,  1081,   147,   156,
+    1082,   156,   148,   304,   305,   306,   307,   308,   129,   130,
+    1077,   546,   129,   130,   580,  1078,   129,   130,  1306,  1079,
+     449,  1307,   450,   149,   150,   151,   152,   153,   154,   246,
+     451,   554,   247,  1084,  1174,  1175,   322,   155,  1085,  1273,
+    1274,  1275,   323,   324,   325,   326,   327,   328,   452,  1014,
+     555,   812,   453,   156,  1260,   813,   814,   815,   816,   817,
+     818,   819,   820,   821,   822,   823,   824,   825,   826,   126,
+     454,   455,   827,   828,   829,   830,   831,   456,   525,  1264,
+     563,  1285,   294,  1261,  1265,  1272,  1286,   457,   345,   129,
+     130,   906,   907,   908,   909,   910,   911,   528,   535,   559,
+     458,   459,  1288,  1289,   586,   587,   345,   129,   130,  1326,
+     246,   460,   462,   247,  1327,   157,   746,   747,   748,   749,
+     463,   464,   229,   156,   465,   466,   470,   156,   471,   472,
+     476,   156,   604,   481,   249,   482,   483,   295,   237,   493,
+     500,   501,   502,   505,   309,   292,   256,   509,   510,   511,
+     289,   512,   520,   302,   329,   521,   531,   533,   534,   549,
+     313,   553,   250,   557,   351,   558,   560,   596,   565,   370,
+     331,   568,   570,   372,   257,   258,   373,   259,   260,   261,
+     365,   238,   571,   574,   575,   383,   583,   588,   589,   407,
+     352,   251,   590,   290,   591,   371,   303,   592,  1223,   593,
+    1224,  1225,   594,   314,   156,   408,   595,   597,   610,   287,
+     598,   599,   298,   332,   600,   601,   602,   252,   603,   312,
+     605,   253,   156,   366,   262,   254,   129,   130,   384,   330,
+     613,   616,   606,   617,   607,   608,   609,   618,   255,   263,
+     156,   614,   264,   265,   615,   611,   266,   612,   409,   622,
+     619,   620,   621,   623,   267,   624,   625,   268,   626,   269,
+     270,   271,   627,   628,   272,   629,   630,   273,   631,   632,
+     633,   281,   634,   635,   282,   283,   636,   284,   637,   638,
+     639,   296,   640,   297,   641,   642,   643,   644,   310,   645,
      311,   392,   393,   394,   395,   396,   397,   398,   399,   400,
-     401,   402,   403,   404,   652,   649,   653,   655,   650,   658,
-     651,   405,   406,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,   661,   656,   662,
-     663,   664,   157,   665,   668,   229,   669,   670,   672,   674,
-     676,   156,   680,   657,   659,   666,   681,   682,   683,   675,
-     684,   237,   677,   667,   685,   686,   688,   678,   689,   691,
-     690,   692,   693,   696,   700,   701,   704,   694,   919,   933,
-     943,   705,   407,   697,   698,   707,   967,   706,   703,   710,
-     708,   709,   711,   714,   921,   939,   944,   954,   408,   712,
-     713,   715,   808,   716,   238,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   717,   719,
-     720,   722,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   723,   724,   126,   725,   726,   727,   922,   940,   945,
-     955,   409,   728,   729,   730,   239,   737,   240,   738,   739,
-     740,   741,   802,   129,   130,   241,   242,   243,   244,   245,
-     131,   742,    32,   745,   751,   132,   133,   134,   752,   753,
-     764,   755,   754,   756,   246,   757,   758,   247,   140,   759,
-     760,   761,   762,   763,   765,   248,   766,   767,   768,   770,
-     771,   772,   807,   773,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   774,   776,   777,
-     778,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   779,   126,   345,   780,   784,   785,   786,   787,   788,
-     789,   790,   791,   792,   793,   794,   796,   797,   149,   150,
-     798,   804,   129,   130,   805,   242,   243,   851,   245,   131,
-     855,   806,   859,   863,   132,   133,   134,   867,   889,   892,
-     896,   963,   885,   246,   972,   976,   247,   992,   156,   993,
-     994,   995,   996,   997,   248,   998,  1000,  1010,  1087,  1009,
-    1013,  1012,  1015,  1016,  1018,  1019,  1022,  1021,  1077,  1036,
-    1025,  1035,  1039,  1038,  1040,  1041,  1042,  1043,  1044,  1045,
-    1050,  1051,  1052,  1055,  1056,  1057,  1064,  1066,  1074,  1082,
-    1237,  1081,  1085,  1084,  1088,  1089,  1090,  1091,  1092,  1093,
-    1094,  1095,  1096,  1097,  1098,  1100,  1102,   149,   150,  1099,
-     249,  1101,  1103,   351,  1104,  1105,   370,  1160,  1193,  1115,
-     372,   292,   256,   373,  1186,  1187,   289,  1188,  1189,   365,
-    1164,  1122,   383,   329,  1190,  1154,   387,   156,   250,   352,
-    1191,  1194,   371,  1195,  1196,  1140,  1173,  1116,  1197,   331,
-     257,   258,   919,   259,   260,   261,  1171,   933,  1165,  1123,
-    1124,   943,  1125,  1126,  1127,  1203,  1204,   251,   921,   290,
-    1214,  1199,   366,   939,   967,   384,  1117,   944,  1155,   295,
-    1200,  1201,   309,   954,  1206,   287,  1216,  1166,  1207,  1174,
-    1208,  1209,   332,   252,  1153,   302,  1215,   253,   313,  1224,
-     262,   254,  1118,  1226,  1227,  1172,  1119,  1232,   330,  1128,
-    1120,   922,  1238,  1167,   255,   263,   940,  1168,   264,   265,
-     945,  1169,   266,  1121,  1129,  1239,   955,  1130,  1131,  1217,
-     267,  1132,  1244,   268,  1170,   269,   270,   271,   303,  1133,
-     272,   314,  1134,   273,  1135,  1136,  1137,   281,  1250,  1138,
-     282,   283,  1139,   284,   298,  1251,  1146,   312,  1256,  1147,
-    1148,  1257,  1149,  1144,  1258,  1145,  1259,  1271,  1280,  1245,
-    1283,  1285,  1290,  1288,  1310,  1311,  1312,  1316,  1246,  1320,
-     795,   809,   877,   811,   803,   654,  1106,   660,  1161,  1108,
-    1158,   984,  1202,  1185,  1159,  1184,  1192,   702,  1110,  1109,
-    1247,   671,  1157,  1279,   343,  1254,  1265,  1266,  1267,  1268,
-    1275,  1112,  1111,  1278,  1113,   695,  1284,  1281,  1228,  1287,
-    1317,  1114,  1289,   296,   679,   297,   310,  1318,   311,  1319,
-    1322,  1323,  1231,   687,  1229,  1282,   673,  1183,  1230,  1182,
-    1181,   699,   981,  1198,  1205,  1210,  1223,   718,  1308,  1286,
-    1321,  1115,   962,   721,     0,     0,     0,  1164,     0,  1225,
-       0,     0,     0,  1122,     0,     0,     0,  1154,     0,  1269,
-     810,     0,  1214,  1173,     0,     0,     0,  1140,     0,  1116,
-       0,     0,     0,  1171,     0,  1165,     0,     0,  1216,     0,
-       0,  1123,  1124,     0,  1125,  1126,  1127,     0,  1215,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1117,     0,
-    1155,     0,     0,     0,  1166,     0,  1174,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1153,     0,     0,     0,
-       0,  1217,  1172,     0,  1118,     0,     0,     0,  1119,     0,
-    1167,  1128,  1120,     0,  1168,     0,     0,     0,  1169,     0,
-       0,     0,     0,     0,     0,  1121,  1129,     0,     0,  1130,
-    1131,  1170,     0,  1132,     0,     0,     0,     0,     0,     0,
-       0,  1133,     0,     0,  1134,     0,  1135,  1136,  1137,     0,
-       0,  1138,     0,     0,  1139,     0,     0,     0,  1146,     0,
-       0,  1147,  1148,     0,  1149,  1144,     0,  1145
+     401,   402,   403,   404,   646,   647,   648,   652,   649,   650,
+     653,   405,   406,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,   651,   655,   656,
+     661,   657,   157,   658,   662,   229,   663,   659,   664,   665,
+     668,   156,   669,   667,   666,   670,   672,   674,   675,   694,
+     676,   237,   680,   681,   677,   678,   682,   683,   684,   685,
+     686,   688,   689,   690,   691,   692,   693,   696,   925,   939,
+     949,   700,   407,   701,   697,   704,   973,   705,   698,   707,
+     706,   703,   710,   708,   927,   945,   950,   960,   408,   709,
+     711,   714,   808,   712,   238,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   713,   715,
+     716,   717,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   719,   720,   126,   722,   723,   724,   928,   946,   951,
+     961,   409,   725,   726,   727,   239,   728,   240,   730,   729,
+     739,   737,   740,   129,   130,   241,   242,   243,   244,   245,
+     131,   738,   741,   742,   745,   132,   133,   134,    32,   751,
+     752,   753,   755,   764,   246,   754,   756,   247,   140,   757,
+     758,   802,   759,   760,   761,   248,   762,   763,   765,   766,
+     767,   768,   770,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   771,   772,   807,   773,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     774,   126,   345,   777,   857,   861,   865,   776,   778,   869,
+     779,   780,   784,   785,   786,   787,   788,   789,   149,   150,
+     790,   129,   130,   791,   242,   243,   792,   245,   131,   873,
+     793,   794,   796,   132,   133,   134,   797,   891,   895,   898,
+     798,   902,   246,   804,   969,   247,   978,   805,   156,   982,
+     806,   998,   999,   248,  1000,  1001,  1002,  1003,  1004,  1005,
+    1006,  1007,  1009,  1019,   795,  1018,  1022,  1021,  1024,  1025,
+    1027,  1028,  1031,  1030,  1102,  1045,  1034,  1044,  1048,  1047,
+    1049,  1050,  1051,  1052,  1053,  1054,  1059,  1060,  1061,  1064,
+    1065,  1066,  1073,  1075,  1083,  1086,  1091,  1090,  1093,  1094,
+    1103,  1097,  1096,  1098,  1099,  1100,   149,   150,  1101,  1105,
+    1112,  1114,  1104,  1106,  1107,  1108,  1109,  1110,  1111,   249,
+    1113,  1115,   351,  1116,  1117,   370,  1172,  1198,  1127,   372,
+     292,   256,   373,  1205,  1206,   289,   156,  1211,   365,  1176,
+    1134,   383,   329,  1199,  1166,   387,  1200,   250,   352,  1201,
+    1202,   371,  1215,  1203,  1152,  1185,  1128,  1207,   331,   257,
+     258,   925,   259,   260,   261,  1183,   939,  1177,  1135,  1136,
+     949,  1137,  1138,  1139,  1216,  1208,   251,   927,   290,  1226,
+    1219,   366,   945,   973,   384,  1129,   950,  1167,   295,  1209,
+    1212,   309,   960,  1213,   287,  1228,  1178,  1221,  1186,  1220,
+    1218,   332,   252,  1165,   302,  1227,   253,   313,  1236,   262,
+     254,  1130,  1238,  1239,  1184,  1131,  1244,   330,  1140,  1132,
+     928,  1249,  1179,   255,   263,   946,  1180,   264,   265,   951,
+    1181,   266,  1133,  1141,  1250,   961,  1142,  1143,  1229,   267,
+    1144,  1251,   268,  1182,   269,   270,   271,   303,  1145,   272,
+     314,  1146,   273,  1147,  1148,  1149,   281,  1256,  1150,   282,
+     283,  1151,   284,   298,  1262,  1158,   312,  1263,  1159,  1160,
+    1268,  1161,  1156,  1269,  1157,  1270,  1271,  1283,  1257,  1292,
+    1295,  1297,   883,  1300,  1322,  1323,  1302,  1258,  1324,  1328,
+    1332,   654,   809,   803,   660,   990,   811,  1173,  1120,  1118,
+    1170,  1171,  1214,  1197,  1196,   702,  1122,  1204,  1121,   671,
+    1259,  1266,  1169,  1291,   343,  1277,  1278,  1124,  1279,  1126,
+    1123,  1280,  1287,  1290,   695,  1125,  1296,  1293,  1299,  1301,
+    1329,  1334,   296,   673,   297,   310,  1335,   311,  1330,  1331,
+     699,  1243,  1294,   679,  1217,  1241,  1193,  1195,  1242,  1240,
+    1235,  1194,   987,   968,   687,  1210,  1298,   718,  1320,  1237,
+    1333,   810,   721,  1127,  1222,     0,     0,     0,     0,  1176,
+       0,     0,     0,     0,     0,  1134,     0,     0,     0,  1166,
+       0,  1281,     0,     0,  1226,  1185,     0,     0,     0,  1152,
+       0,  1128,     0,     0,     0,  1183,     0,  1177,     0,     0,
+    1228,     0,     0,  1135,  1136,     0,  1137,  1138,  1139,     0,
+    1227,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1129,     0,  1167,     0,     0,     0,  1178,     0,  1186,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1165,     0,
+       0,     0,     0,  1229,  1184,     0,  1130,     0,     0,     0,
+    1131,     0,  1179,  1140,  1132,     0,  1180,     0,     0,     0,
+    1181,     0,     0,     0,     0,     0,     0,  1133,  1141,     0,
+       0,  1142,  1143,  1182,     0,  1144,     0,     0,     0,     0,
+       0,     0,     0,  1145,     0,     0,  1146,     0,  1147,  1148,
+    1149,     0,     0,  1150,     0,     0,  1151,     0,     0,     0,
+    1158,     0,     0,  1159,  1160,     0,  1161,  1156,     0,  1157
   };
 
   const short
@@ -5580,366 +5613,369 @@ namespace isc { namespace dhcp {
   {
       71,    72,    73,    74,    75,    76,    16,    78,    79,    80,
       81,   759,    79,    73,    73,    79,   728,    72,    73,    74,
-      75,    76,   753,    78,    79,  1020,    81,  1020,  1020,  1020,
-      73,  1020,   123,    78,    79,     5,     0,     7,   627,     9,
-     130,   131,    73,    73,   210,    73,    73,    73,    13,    14,
-     195,    76,    77,    78,    79,    80,    81,   130,   131,    73,
-      72,    73,    74,    75,    76,   210,    78,    79,     3,    81,
-      95,    96,    74,     8,   668,    95,    96,    73,    74,    75,
-      76,   176,   177,   178,   179,    73,   680,   681,   682,    73,
-      95,    96,    73,    73,    16,    17,    18,    19,    20,     3,
-       7,     7,   121,     3,     8,    24,    73,    73,     8,   128,
-      73,    73,   701,     7,    73,     7,     3,    75,   213,   210,
-     210,     8,    73,   173,   174,    73,     3,    73,    73,    73,
-      88,     8,    73,   153,   154,    73,     3,    95,    96,    73,
-      10,     8,    73,    73,     7,    73,    75,    74,    75,    74,
-      75,   156,   157,   158,    25,    26,    27,    76,   116,    78,
-      79,   119,     7,    82,    83,    84,    95,    96,   140,   141,
-     142,    11,    12,    95,    96,    15,    95,    96,     7,     3,
-       7,    21,    22,    23,     8,   210,   115,     7,     3,     7,
-     210,     6,   121,   122,   123,   124,   125,   126,   187,     7,
-       7,   190,   191,   192,   193,   210,     7,    47,    48,    49,
+      75,    76,   753,    78,    79,  1029,    81,  1029,  1029,  1029,
+      73,  1029,   126,    78,    79,     5,   668,     7,   198,     9,
+      98,    99,    73,    73,   627,    73,    73,    73,   680,   681,
+     682,   133,   134,   213,    98,    99,    13,    14,   124,    73,
+      72,    73,    74,    75,    76,   131,    78,    79,     0,    81,
+       3,   179,   180,   181,   182,     8,   213,    73,    74,    75,
+      76,     7,     3,   133,   134,    73,     3,     8,     7,    73,
+      77,     8,    73,    73,    16,    17,    18,    19,    20,     7,
+       3,   159,   160,   161,    24,     8,    73,    73,   216,     7,
+      73,    73,   156,   157,    73,     3,     3,     7,   701,   213,
+       8,     8,    73,   126,   127,    73,   129,    73,    73,    73,
+      24,   213,    73,     7,     3,    73,     3,     6,    32,    73,
+      10,     8,    73,    73,     7,    73,     3,    74,    75,    74,
+      75,     8,     3,     3,     7,   213,     3,     8,     8,    79,
+       3,    81,    82,     6,     6,    85,    86,    87,     3,   213,
+       7,    11,    12,     8,     7,    15,    98,    99,    98,    99,
+       7,    21,    22,    23,     7,    98,    99,    79,    80,    81,
+      82,    83,    84,   190,     7,     3,   193,   194,   195,   196,
+       8,   176,   177,     3,    98,    99,    98,    99,     8,     4,
       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,    39,    40,    41,     3,
-     210,   211,   212,   213,     8,    85,    86,    95,    96,     3,
-       6,     3,   210,     3,     8,    95,    96,  1252,     8,  1252,
-    1252,  1252,   102,  1252,     4,     8,    76,   107,   108,   109,
-     110,   111,   112,   113,     3,   115,    24,     3,     3,     8,
-     120,   210,     8,     8,    32,    95,    96,     3,   210,   129,
-       6,   210,   132,     3,     3,  1026,  1008,     6,     8,   139,
-       3,   149,   150,   151,     3,  1053,     3,   147,   148,     8,
-       4,     8,   152,     3,     3,   155,    24,     6,     8,   159,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,     8,     4,     4,    42,    43,    44,    45,    46,     4,
-     180,   181,   182,   183,   184,   185,     3,    95,    96,     3,
-       3,     8,     6,     4,   194,     8,    47,    48,    49,    50,
-      51,    52,   210,     4,     3,     8,     4,     3,    76,     8,
-     210,    75,     8,     4,     4,     3,   186,     3,   188,   189,
-       8,     4,     8,     4,    75,    76,    90,    91,    92,    93,
-      94,    95,    96,     4,     3,   143,   144,   145,   146,     8,
-     210,     4,     4,     4,    95,    96,   133,   134,   135,   136,
-     137,   138,   116,     3,     3,   119,     3,     3,     8,     8,
-       4,     8,     8,     3,   434,   435,   117,   118,     8,     3,
-     103,   104,   105,   106,     8,   506,   123,   124,     4,   126,
-       4,     3,   513,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   525,   210,     4,   528,   513,     4,
-       4,     4,   210,     4,   535,   525,   525,     4,     4,     4,
-     525,     4,     4,   528,   545,     4,     4,     4,     8,     3,
-     535,     4,   525,     4,   555,     3,     8,     4,     4,   560,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,   152,
+     153,   154,     3,   213,   214,   215,   216,     8,    88,    89,
+       3,     3,   146,   147,   148,   149,     8,     8,    98,    99,
+    1264,     4,  1264,  1264,  1264,   105,  1264,    25,    26,    27,
+     110,   111,   112,   113,   114,   115,   116,     3,   118,    42,
+      43,    44,     8,   123,    50,    51,    52,    53,    54,    55,
+       4,   213,   132,   213,     3,   135,     3,     8,     3,     8,
+     213,     8,   142,     8,  1035,  1017,     3,     3,    78,     6,
+     150,   151,    78,    79,  1062,   155,    78,     3,   158,   213,
+       6,   213,   162,    93,    94,    95,    96,    97,    98,    99,
+       3,     8,    98,    99,     3,     8,    98,    99,     3,     8,
+       4,     6,     4,   183,   184,   185,   186,   187,   188,   119,
+       4,     8,   122,     3,   120,   121,   118,   197,     8,   143,
+     144,   145,   124,   125,   126,   127,   128,   129,     4,     3,
+       3,    24,     4,   213,     8,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    78,
+       4,     4,    45,    46,    47,    48,    49,     4,     3,     3,
+       3,     3,    91,     8,     8,     8,     8,     4,    79,    98,
+      99,   136,   137,   138,   139,   140,   141,     3,     3,     8,
+       4,     4,     8,     8,   434,   435,    79,    98,    99,     3,
+     119,     4,     4,   122,     8,   506,   106,   107,   108,   109,
+       4,     4,   513,   213,     4,     4,     4,   213,     4,     4,
+       4,   213,   216,     4,   525,     4,     4,   528,   513,     4,
+       4,     4,     4,     4,   535,   525,   525,     4,     4,     4,
+     525,     4,     4,   528,   545,     4,     4,     4,     4,     4,
+     535,     4,   525,     4,   555,     4,     3,   214,     4,   560,
      545,     4,     4,   560,   525,   525,   560,   525,   525,   525,
-     555,   513,   210,     4,     4,   560,   210,     4,     4,   580,
-     555,   525,     4,   525,     4,   560,   528,     4,     4,   210,
-       4,     4,     4,   535,   212,   580,   211,   211,   211,   525,
-     211,   211,   528,   545,   213,   211,   211,   525,   212,   535,
-       4,   525,   211,   555,   525,   525,    95,    96,   560,   545,
-     212,   211,   211,   211,     4,   211,     4,     4,   525,   525,
-       4,   213,   525,   525,   213,   213,   525,   213,   580,   213,
-       4,   213,     4,     4,   525,     4,   211,   525,     4,   525,
-     525,   525,     4,     4,   525,     4,   213,   525,   213,   213,
+     555,   513,     4,     4,     4,   560,     4,   213,     4,   580,
+     555,   525,     4,   525,     4,   560,   528,     4,   189,     4,
+     191,   192,     4,   535,   213,   580,     4,   214,     4,   525,
+     214,   214,   528,   545,   214,   214,   214,   525,   214,   535,
+     215,   525,   213,   555,   525,   525,    98,    99,   560,   545,
+     216,     4,   215,     4,   215,   214,   214,     4,   525,   525,
+     213,   216,   525,   525,   216,   214,   525,   214,   580,     4,
+     216,   216,   216,     4,   525,     4,   214,   525,     4,   525,
+     525,   525,     4,     4,   525,     4,   216,   525,   216,   216,
        4,   525,     4,     4,   525,   525,     4,   525,     4,     4,
-       4,   528,     4,   528,   211,     4,     4,     4,   535,     4,
-     535,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,     4,   213,     4,     4,   213,   211,
-     213,   180,   181,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,     4,   213,     4,
-       4,     4,   723,     4,     4,   726,     4,     4,     4,     4,
-       4,   210,     4,   213,   211,   211,     4,     4,     4,   211,
-       4,   726,   211,   213,     4,     4,     4,   211,     4,     4,
-     211,     4,     4,     4,     4,     4,     4,   213,   759,   760,
-     761,     4,   763,   213,   213,     4,   767,   211,   213,     4,
-     211,   211,     4,     4,   759,   760,   761,   762,   763,   213,
-     213,     4,   722,     4,   726,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,     4,     4,
-     211,     4,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,     7,   210,    75,     7,     7,     7,   759,   760,   761,
-     762,   763,     7,     5,   210,    87,   210,    89,   210,     5,
-       5,     5,   175,    95,    96,    97,    98,    99,   100,   101,
-     102,     5,     7,   210,     5,   107,   108,   109,     5,     5,
-     210,     5,     7,     5,   116,     5,     7,   119,   120,     7,
-       7,     7,     7,     7,   210,   127,     5,     7,     5,     5,
-       5,   210,     5,   210,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,   210,   210,     7,
-     210,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,   210,    75,    76,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   210,   210,   210,   180,   181,
-     210,   210,    95,    96,   210,    98,    99,     7,   101,   102,
-       7,   210,     7,     7,   107,   108,   109,     7,     7,     7,
-       7,     7,   114,   116,     7,     7,   119,     4,   210,     4,
-       4,     4,     4,     4,   127,     4,     4,     3,     8,     6,
-       3,     6,     6,     3,     6,     3,     3,     6,   210,     3,
-       6,     6,     3,     6,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,     3,
-     210,     6,     3,     6,     6,     4,     4,     4,     4,   211,
-     213,   211,   213,   211,   211,     4,     4,   180,   181,   211,
-    1011,   211,     4,  1014,     4,     4,  1017,     4,     4,  1020,
-    1017,  1011,  1011,  1017,   211,   211,  1011,   211,   211,  1014,
-    1031,  1020,  1017,  1034,   211,  1020,  1037,   210,  1011,  1014,
-     211,     4,  1017,   211,   211,  1020,  1031,  1020,   211,  1034,
-    1011,  1011,  1053,  1011,  1011,  1011,  1031,  1058,  1031,  1020,
-    1020,  1062,  1020,  1020,  1020,     4,     4,  1011,  1053,  1011,
-    1071,   213,  1014,  1058,  1075,  1017,  1020,  1062,  1020,  1080,
-     211,   211,  1083,  1068,   213,  1011,  1071,  1031,     4,  1031,
-     211,     4,  1034,  1011,  1020,  1080,  1071,  1011,  1083,   213,
-    1011,  1011,  1020,     6,     3,  1031,  1020,     4,  1034,  1020,
-    1020,  1053,   210,  1031,  1011,  1011,  1058,  1031,  1011,  1011,
-    1062,  1031,  1011,  1020,  1020,   210,  1068,  1020,  1020,  1071,
-    1011,  1020,   210,  1011,  1031,  1011,  1011,  1011,  1080,  1020,
-    1011,  1083,  1020,  1011,  1020,  1020,  1020,  1011,     8,  1020,
-    1011,  1011,  1020,  1011,  1080,     8,  1020,  1083,     4,  1020,
-    1020,     8,  1020,  1020,     3,  1020,     8,     4,     4,   210,
-       4,     4,     7,     5,     4,     4,     4,     4,   210,     4,
-     701,   723,   752,   726,   714,   506,  1005,   513,  1029,  1010,
-    1023,   807,  1058,  1039,  1026,  1037,  1046,   563,  1013,  1011,
-     210,   525,  1022,  1252,    77,   210,   210,   210,   210,   210,
-     210,  1016,  1014,   210,  1017,   555,   211,   213,  1080,   210,
-     213,  1019,   210,  1080,   535,  1080,  1083,   211,  1083,   211,
-     210,   210,  1085,   545,  1082,  1258,   528,  1036,  1083,  1034,
-    1032,   560,   777,  1053,  1062,  1068,  1072,   580,  1294,  1273,
-    1314,  1252,   763,   584,    -1,    -1,    -1,  1258,    -1,  1075,
-      -1,    -1,    -1,  1252,    -1,    -1,    -1,  1252,    -1,  1209,
-     725,    -1,  1273,  1258,    -1,    -1,    -1,  1252,    -1,  1252,
-      -1,    -1,    -1,  1258,    -1,  1258,    -1,    -1,  1273,    -1,
-      -1,  1252,  1252,    -1,  1252,  1252,  1252,    -1,  1273,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1252,    -1,
-    1252,    -1,    -1,    -1,  1258,    -1,  1258,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1252,    -1,    -1,    -1,
-      -1,  1273,  1258,    -1,  1252,    -1,    -1,    -1,  1252,    -1,
-    1258,  1252,  1252,    -1,  1258,    -1,    -1,    -1,  1258,    -1,
-      -1,    -1,    -1,    -1,    -1,  1252,  1252,    -1,    -1,  1252,
-    1252,  1258,    -1,  1252,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1252,    -1,    -1,  1252,    -1,  1252,  1252,  1252,    -1,
-      -1,  1252,    -1,    -1,  1252,    -1,    -1,    -1,  1252,    -1,
-      -1,  1252,  1252,    -1,  1252,  1252,    -1,  1252
+       4,   528,     4,   528,     4,   214,     4,     4,   535,     4,
+     535,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,     4,     4,     4,     4,   216,   216,
+       4,   183,   184,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   216,     4,   216,
+       4,   216,   723,   214,     4,   726,     4,   214,     4,     4,
+       4,   213,     4,   216,   214,     4,     4,     4,   214,   216,
+       4,   726,     4,     4,   214,   214,     4,     4,     4,     4,
+       4,     4,     4,   214,     4,     4,     4,     4,   759,   760,
+     761,     4,   763,     4,   216,     4,   767,     4,   216,     4,
+     214,   216,     4,   214,   759,   760,   761,   762,   763,   214,
+       4,     4,   722,   216,   726,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,   216,     4,
+       4,     4,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,     4,   214,    78,     4,     7,   213,   759,   760,   761,
+     762,   763,     7,     7,     7,    90,     7,    92,   213,     5,
+       5,   213,     5,    98,    99,   100,   101,   102,   103,   104,
+     105,   213,     5,     5,   213,   110,   111,   112,     7,     5,
+       5,     5,     5,   213,   119,     7,     5,   122,   123,     5,
+       7,   178,     7,     7,     7,   130,     7,     7,   213,     5,
+       7,     5,     5,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,     5,   213,     5,   213,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+     213,    78,    79,     7,     7,     7,     7,   213,   213,     7,
+     213,   213,   213,   213,   213,   213,   213,   213,   183,   184,
+     213,    98,    99,   213,   101,   102,   213,   104,   105,     7,
+     213,   213,   213,   110,   111,   112,   213,   117,     7,     7,
+     213,     7,   119,   213,     7,   122,     7,   213,   213,     7,
+     213,     4,     4,   130,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     3,   701,     6,     3,     6,     6,     3,
+       6,     3,     3,     6,   214,     3,     6,     6,     3,     6,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   213,     3,     6,     6,     3,
+     216,     6,     8,     4,     4,     4,   183,   184,     4,   216,
+       4,     4,   214,   214,   214,   214,   214,   214,   214,  1020,
+     214,     4,  1023,     4,     4,  1026,     4,   214,  1029,  1026,
+    1020,  1020,  1026,     4,     4,  1020,   213,   216,  1023,  1040,
+    1029,  1026,  1043,   214,  1029,  1046,   214,  1020,  1023,   214,
+     214,  1026,     4,   214,  1029,  1040,  1029,   214,  1043,  1020,
+    1020,  1062,  1020,  1020,  1020,  1040,  1067,  1040,  1029,  1029,
+    1071,  1029,  1029,  1029,     4,   214,  1020,  1062,  1020,  1080,
+       4,  1023,  1067,  1084,  1026,  1029,  1071,  1029,  1089,   214,
+     214,  1092,  1077,   214,  1020,  1080,  1040,     4,  1040,   214,
+     216,  1043,  1020,  1029,  1089,  1080,  1020,  1092,   216,  1020,
+    1020,  1029,     6,     3,  1040,  1029,     4,  1043,  1029,  1029,
+    1062,   213,  1040,  1020,  1020,  1067,  1040,  1020,  1020,  1071,
+    1040,  1020,  1029,  1029,   213,  1077,  1029,  1029,  1080,  1020,
+    1029,   213,  1020,  1040,  1020,  1020,  1020,  1089,  1029,  1020,
+    1092,  1029,  1020,  1029,  1029,  1029,  1020,   213,  1029,  1020,
+    1020,  1029,  1020,  1089,     8,  1029,  1092,     8,  1029,  1029,
+       4,  1029,  1029,     8,  1029,     3,     8,     4,   213,     4,
+       4,     4,   752,     5,     4,     4,     7,   213,     4,     4,
+       4,   506,   723,   714,   513,   807,   726,  1038,  1019,  1014,
+    1032,  1035,  1067,  1048,  1046,   563,  1022,  1055,  1020,   525,
+     213,   213,  1031,  1264,    77,   213,   213,  1025,   213,  1028,
+    1023,   213,   213,   213,   555,  1026,   214,   216,   213,   213,
+     216,   213,  1089,   528,  1089,  1092,   213,  1092,   214,   214,
+     560,  1094,  1270,   535,  1071,  1091,  1041,  1045,  1092,  1089,
+    1081,  1043,   777,   763,   545,  1062,  1285,   580,  1306,  1084,
+    1326,   725,   584,  1264,  1077,    -1,    -1,    -1,    -1,  1270,
+      -1,    -1,    -1,    -1,    -1,  1264,    -1,    -1,    -1,  1264,
+      -1,  1221,    -1,    -1,  1285,  1270,    -1,    -1,    -1,  1264,
+      -1,  1264,    -1,    -1,    -1,  1270,    -1,  1270,    -1,    -1,
+    1285,    -1,    -1,  1264,  1264,    -1,  1264,  1264,  1264,    -1,
+    1285,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1264,    -1,  1264,    -1,    -1,    -1,  1270,    -1,  1270,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1264,    -1,
+      -1,    -1,    -1,  1285,  1270,    -1,  1264,    -1,    -1,    -1,
+    1264,    -1,  1270,  1264,  1264,    -1,  1270,    -1,    -1,    -1,
+    1270,    -1,    -1,    -1,    -1,    -1,    -1,  1264,  1264,    -1,
+      -1,  1264,  1264,  1270,    -1,  1264,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1264,    -1,    -1,  1264,    -1,  1264,  1264,
+    1264,    -1,    -1,  1264,    -1,    -1,  1264,    -1,    -1,    -1,
+    1264,    -1,    -1,  1264,  1264,    -1,  1264,  1264,    -1,  1264
   };
 
   const short
   Dhcp6Parser::yystos_[] =
   {
-       0,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-       0,     5,     7,     9,   210,   211,   212,   213,   230,   231,
-     232,   237,     7,   246,     7,   251,     7,   298,     7,   407,
-       7,   487,     7,   503,     7,   520,     7,   439,     7,   445,
-       7,   469,     7,   383,     7,   589,     7,   620,   238,   233,
-     247,   252,   299,   408,   488,   504,   521,   440,   446,   470,
-     384,   590,   621,   230,   239,   240,   210,   235,   236,    10,
-     248,   250,    11,    12,    15,    21,    22,    23,    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,    85,    86,    95,
-      96,   102,   107,   108,   109,   110,   111,   112,   113,   115,
-     120,   129,   132,   139,   147,   148,   152,   155,   159,   180,
-     181,   182,   183,   184,   185,   194,   210,   245,   253,   254,
-     255,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   277,
-     279,   281,   282,   283,   285,   287,   288,   289,   290,   292,
-     293,   294,   295,   296,   308,   310,   312,   350,   356,   362,
-     368,   370,   377,   391,   401,   421,   422,   423,   424,   429,
-     437,   463,   493,   495,   514,   544,   556,   568,   569,   577,
-     587,   618,   627,   651,    16,    17,    18,    19,    20,   245,
-     300,   301,   302,   304,   305,   306,   307,   493,   495,    87,
-      89,    97,    98,    99,   100,   101,   116,   119,   127,   245,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   271,   272,   273,   274,   277,   279,   281,
-     282,   283,   285,   287,   409,   410,   411,   413,   415,   417,
-     419,   421,   422,   423,   424,   427,   428,   463,   481,   493,
-     495,   497,   514,   539,    88,   245,   417,   419,   463,   489,
-     490,   491,   493,   495,    90,    91,    92,    93,    94,   245,
-     417,   419,   463,   493,   495,   505,   506,   507,   509,   510,
-     512,   513,   115,   121,   122,   123,   124,   125,   126,   245,
-     463,   493,   495,   522,   523,   524,   525,   527,   529,   531,
-     533,   535,   537,   437,    24,    76,    78,    79,    82,    83,
-      84,   245,   330,   447,   448,   449,   450,   451,   452,   453,
-     455,   457,   459,   460,   462,   493,   495,    77,    80,    81,
-     245,   330,   451,   457,   471,   472,   473,   474,   475,   477,
-     478,   479,   480,   493,   495,   130,   131,   245,   385,   386,
-     387,   389,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   180,   181,   245,   493,   495,
-     591,   592,   593,   594,   596,   598,   599,   601,   602,   603,
-     606,   608,   609,   610,   612,   614,   616,    13,    14,   622,
-     623,   624,   626,     6,     3,     4,     8,     3,   249,     3,
-       8,   256,   619,   297,   309,   311,   313,     4,     4,     4,
+       0,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+       0,     5,     7,     9,   213,   214,   215,   216,   233,   234,
+     235,   240,     7,   249,     7,   254,     7,   301,     7,   413,
+       7,   493,     7,   509,     7,   526,     7,   445,     7,   451,
+       7,   475,     7,   389,     7,   595,     7,   626,   241,   236,
+     250,   255,   302,   414,   494,   510,   527,   446,   452,   476,
+     390,   596,   627,   233,   242,   243,   213,   238,   239,    10,
+     251,   253,    11,    12,    15,    21,    22,    23,    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,    88,    89,    98,
+      99,   105,   110,   111,   112,   113,   114,   115,   116,   118,
+     123,   132,   135,   142,   150,   151,   155,   158,   162,   183,
+     184,   185,   186,   187,   188,   197,   213,   248,   256,   257,
+     258,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   280,
+     282,   284,   285,   286,   288,   290,   291,   292,   293,   295,
+     296,   297,   298,   299,   311,   313,   315,   356,   362,   368,
+     374,   376,   383,   397,   407,   427,   428,   429,   430,   435,
+     443,   469,   499,   501,   520,   550,   562,   574,   575,   583,
+     593,   624,   633,   657,    16,    17,    18,    19,    20,   248,
+     303,   304,   305,   307,   308,   309,   310,   499,   501,    90,
+      92,   100,   101,   102,   103,   104,   119,   122,   130,   248,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   274,   275,   276,   277,   280,   282,   284,
+     285,   286,   288,   290,   415,   416,   417,   419,   421,   423,
+     425,   427,   428,   429,   430,   433,   434,   469,   487,   499,
+     501,   503,   520,   545,    91,   248,   423,   425,   469,   495,
+     496,   497,   499,   501,    93,    94,    95,    96,    97,   248,
+     423,   425,   469,   499,   501,   511,   512,   513,   515,   516,
+     518,   519,   118,   124,   125,   126,   127,   128,   129,   248,
+     469,   499,   501,   528,   529,   530,   531,   533,   535,   537,
+     539,   541,   543,   443,    24,    79,    81,    82,    85,    86,
+      87,   248,   333,   453,   454,   455,   456,   457,   458,   459,
+     461,   463,   465,   466,   468,   499,   501,    80,    83,    84,
+     248,   333,   457,   463,   477,   478,   479,   480,   481,   483,
+     484,   485,   486,   499,   501,   133,   134,   248,   391,   392,
+     393,   395,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   183,   184,   248,   499,   501,
+     597,   598,   599,   600,   602,   604,   605,   607,   608,   609,
+     612,   614,   615,   616,   618,   620,   622,    13,    14,   628,
+     629,   630,   632,     6,     3,     4,     8,     3,   252,     3,
+       8,   259,   625,   300,   312,   314,   316,     4,     4,     4,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,   291,     4,     4,     4,     4,     4,   275,   278,   280,
-       4,     4,     4,   402,   438,   464,     4,   430,   494,   496,
-     425,     4,     4,     4,   357,   369,   363,   351,   545,   515,
-     378,   392,   557,     4,   371,   570,   578,   588,   284,   286,
-       4,     4,     4,   628,   652,     4,     3,     8,   303,     4,
-       4,     4,     4,     3,     8,   482,   498,   412,   414,   416,
-       4,     4,   420,   418,   540,     3,     8,   492,     3,     8,
-     508,     4,   511,     4,     4,     3,     8,   538,   526,   528,
-     530,   532,   534,   536,     8,     3,     8,   454,   331,     4,
-     458,   456,   461,     4,     8,     3,   476,     4,     4,     8,
-       3,   388,   390,     3,     8,     4,   595,   597,     4,   600,
-       4,     4,   604,   607,     4,     4,   611,   613,   615,   617,
-       3,     8,   625,     4,     3,     8,   230,   230,   210,     4,
-       4,     4,     4,     4,     4,     4,   211,   211,   211,   211,
-     211,   211,   211,   211,   213,   212,   212,   212,   211,   211,
-       4,   211,   211,   213,   213,   213,     4,     4,     4,   213,
-     213,   213,     4,     4,     4,   211,     4,     4,     4,     4,
-     213,   213,   213,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,   211,     4,     4,     4,     4,     4,     4,   213,
-     213,   213,     4,     4,   254,     4,   213,   213,   211,   211,
-     301,     4,     4,     4,     4,     4,   211,   213,     4,     4,
-       4,   410,     4,   490,     4,   211,     4,   211,   211,   506,
-       4,     4,     4,     4,     4,     4,     4,   524,     4,     4,
-     211,     4,     4,     4,   213,   449,     4,   213,   213,   473,
-       4,     4,   386,   213,     4,     4,   211,     4,   211,   211,
-       4,     4,   213,   213,     4,     4,     4,     4,   592,     4,
-     211,   623,     4,     7,   210,     7,     7,     7,     7,     5,
-     210,   176,   177,   178,   179,   213,   276,   210,   210,     5,
-       5,     5,     5,   232,   234,   210,   103,   104,   105,   106,
-     426,     5,     5,     5,     7,     5,     5,     5,     7,     7,
-       7,     7,     7,     7,   210,   210,     5,     7,     5,   241,
-       5,     5,   210,   210,   210,   241,   210,     7,   210,   210,
-     210,   241,   241,   241,   210,   210,   210,   210,   210,   210,
-     210,   210,   210,   210,   210,   234,   210,   210,   210,   173,
-     174,   605,   175,   276,   210,   210,   210,     5,   230,   253,
-     622,   300,    24,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    42,    43,    44,    45,    46,   245,
-     318,   319,   320,   323,   325,   327,   329,   330,   332,   333,
-     334,   335,   336,   337,   340,   341,   342,   344,   346,   348,
-     318,     7,   314,   315,   316,     7,   403,   404,   405,     7,
-     441,   442,   443,     7,   465,   466,   467,     7,   431,   432,
-     433,   123,   210,   358,   359,   360,   361,   239,   124,   126,
-     360,   364,   365,   366,   367,   114,   352,   353,   354,     7,
-     546,   547,     7,   516,   517,   518,     7,   379,   380,   381,
-     133,   134,   135,   136,   137,   138,   393,   394,   395,   396,
-     397,   398,   399,   400,    24,   143,   144,   145,   146,   245,
-     332,   493,   495,   558,   559,   560,   563,   564,   566,   567,
-     149,   150,   151,   245,   372,   373,   374,   375,   376,   493,
-     495,   153,   154,   245,   493,   495,   571,   572,   573,   575,
-     156,   157,   158,   210,   493,   495,   579,   580,   581,   582,
-     584,   585,   591,     7,   629,   630,   195,   245,   653,   654,
-     655,   242,     7,   483,   484,   485,     7,   499,   500,   501,
-     128,   525,   541,   542,   314,     8,     8,     8,   321,   324,
-     326,   328,     4,     4,     4,     4,     4,     4,     4,   338,
-       4,   343,   345,   347,   349,     3,     8,     8,   317,     6,
-       3,   406,     6,     3,   444,     6,     3,   468,     6,     3,
-     434,     6,     3,     3,     6,     6,     3,     6,   355,     3,
-       8,   548,     3,     6,   519,     6,     3,   382,     6,     3,
-       4,     4,     4,     4,     4,     4,     3,     8,   561,   565,
-       4,     4,     4,     3,     8,     4,     4,     4,     3,     8,
-     574,   576,     3,     8,     4,   583,     4,   586,     3,     8,
-       8,   631,     3,     6,     4,     3,     8,   210,   243,   244,
-     486,     6,     3,   502,     6,     3,   543,     8,     6,     4,
-       4,     4,     4,   211,   213,   211,   213,   211,   211,   211,
-       4,   211,     4,     4,     4,     4,   319,   318,   316,   409,
-     405,   447,   443,   471,   467,   245,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   271,
-     272,   273,   274,   277,   279,   281,   282,   283,   285,   287,
-     330,   401,   413,   415,   417,   419,   421,   422,   423,   424,
-     428,   435,   436,   463,   493,   495,   539,   433,   359,   365,
-       4,   353,   117,   118,   245,   257,   258,   259,   260,   261,
-     262,   330,   463,   493,   495,   549,   550,   551,   552,   553,
-     555,   547,   522,   518,   385,   381,   211,   211,   211,   211,
-     211,   211,   394,     4,     4,   211,   211,   211,   559,   213,
-     211,   211,   373,     4,     4,   572,   213,     4,   211,     4,
-     580,   186,   188,   189,   245,   330,   493,   495,   632,   633,
-     634,   635,   637,   630,   213,   654,     6,     3,   489,   485,
-     505,   501,     4,    25,    26,    27,   322,   210,   210,   210,
-      39,    40,    41,   339,   210,   210,   210,   210,     8,     8,
-       8,     8,     3,     8,   210,   554,     4,     8,     3,     8,
-       8,   140,   141,   142,   562,   210,   210,   210,   210,   230,
-     638,     4,   636,     3,     8,   210,     8,     8,   210,   436,
-       4,   213,   551,     4,   211,     4,   633,   210,     5,   210,
-       7,   639,   640,   641,     3,     6,   187,   190,   191,   192,
-     193,   642,   643,   644,   646,   647,   648,   649,   640,   645,
-       4,     4,     4,   650,     3,     8,     4,   213,   211,   211,
-       4,   643,   210,   210
+       4,   294,     4,     4,     4,     4,     4,   278,   281,   283,
+       4,     4,     4,   408,   444,   470,     4,   436,   500,   502,
+     431,     4,     4,     4,   363,   375,   369,   357,   551,   521,
+     384,   398,   563,     4,   377,   576,   584,   594,   287,   289,
+       4,     4,     4,   634,   658,     4,     3,     8,   306,     4,
+       4,     4,     4,     3,     8,   488,   504,   418,   420,   422,
+       4,     4,   426,   424,   546,     3,     8,   498,     3,     8,
+     514,     4,   517,     4,     4,     3,     8,   544,   532,   534,
+     536,   538,   540,   542,     8,     3,     8,   460,   334,     4,
+     464,   462,   467,     4,     8,     3,   482,     4,     4,     8,
+       3,   394,   396,     3,     8,     4,   601,   603,     4,   606,
+       4,     4,   610,   613,     4,     4,   617,   619,   621,   623,
+       3,     8,   631,     4,     3,     8,   233,   233,   213,     4,
+       4,     4,     4,     4,     4,     4,   214,   214,   214,   214,
+     214,   214,   214,   214,   216,   215,   215,   215,   214,   214,
+       4,   214,   214,   216,   216,   216,     4,     4,     4,   216,
+     216,   216,     4,     4,     4,   214,     4,     4,     4,     4,
+     216,   216,   216,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,   214,     4,     4,     4,     4,     4,     4,   216,
+     216,   216,     4,     4,   257,     4,   216,   216,   214,   214,
+     304,     4,     4,     4,     4,     4,   214,   216,     4,     4,
+       4,   416,     4,   496,     4,   214,     4,   214,   214,   512,
+       4,     4,     4,     4,     4,     4,     4,   530,     4,     4,
+     214,     4,     4,     4,   216,   455,     4,   216,   216,   479,
+       4,     4,   392,   216,     4,     4,   214,     4,   214,   214,
+       4,     4,   216,   216,     4,     4,     4,     4,   598,     4,
+     214,   629,     4,     7,   213,     7,     7,     7,     7,     5,
+     213,   179,   180,   181,   182,   216,   279,   213,   213,     5,
+       5,     5,     5,   235,   237,   213,   106,   107,   108,   109,
+     432,     5,     5,     5,     7,     5,     5,     5,     7,     7,
+       7,     7,     7,     7,   213,   213,     5,     7,     5,   244,
+       5,     5,   213,   213,   213,   244,   213,     7,   213,   213,
+     213,   244,   244,   244,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   237,   213,   213,   213,   176,
+     177,   611,   178,   279,   213,   213,   213,     5,   233,   256,
+     628,   303,    24,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    45,    46,    47,
+      48,    49,   248,   321,   322,   323,   326,   328,   330,   332,
+     333,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+     346,   347,   348,   350,   352,   354,   321,     7,   317,   318,
+     319,     7,   409,   410,   411,     7,   447,   448,   449,     7,
+     471,   472,   473,     7,   437,   438,   439,   126,   213,   364,
+     365,   366,   367,   242,   127,   129,   366,   370,   371,   372,
+     373,   117,   358,   359,   360,     7,   552,   553,     7,   522,
+     523,   524,     7,   385,   386,   387,   136,   137,   138,   139,
+     140,   141,   399,   400,   401,   402,   403,   404,   405,   406,
+      24,   146,   147,   148,   149,   248,   335,   499,   501,   564,
+     565,   566,   569,   570,   572,   573,   152,   153,   154,   248,
+     378,   379,   380,   381,   382,   499,   501,   156,   157,   248,
+     499,   501,   577,   578,   579,   581,   159,   160,   161,   213,
+     499,   501,   585,   586,   587,   588,   590,   591,   597,     7,
+     635,   636,   198,   248,   659,   660,   661,   245,     7,   489,
+     490,   491,     7,   505,   506,   507,   131,   531,   547,   548,
+     317,     8,     8,     8,   324,   327,   329,   331,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,   344,     4,
+     349,   351,   353,   355,     3,     8,     8,   320,     6,     3,
+     412,     6,     3,   450,     6,     3,   474,     6,     3,   440,
+       6,     3,     3,     6,     6,     3,     6,   361,     3,     8,
+     554,     3,     6,   525,     6,     3,   388,     6,     3,     4,
+       4,     4,     4,     4,     4,     3,     8,   567,   571,     4,
+       4,     4,     3,     8,     4,     4,     4,     3,     8,   580,
+     582,     3,     8,     4,   589,     4,   592,     3,     8,     8,
+     637,     3,     6,     4,     3,     8,   213,   246,   247,   492,
+       6,     3,   508,     6,     3,   549,     8,     6,     4,     4,
+       4,     4,   214,   216,   214,   216,   214,   214,   214,   214,
+     214,   214,     4,   214,     4,     4,     4,     4,   322,   321,
+     319,   415,   411,   453,   449,   477,   473,   248,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   274,   275,   276,   277,   280,   282,   284,   285,   286,
+     288,   290,   333,   407,   419,   421,   423,   425,   427,   428,
+     429,   430,   434,   441,   442,   469,   499,   501,   545,   439,
+     365,   371,     4,   359,   120,   121,   248,   260,   261,   262,
+     263,   264,   265,   333,   469,   499,   501,   555,   556,   557,
+     558,   559,   561,   553,   528,   524,   391,   387,   214,   214,
+     214,   214,   214,   214,   400,     4,     4,   214,   214,   214,
+     565,   216,   214,   214,   379,     4,     4,   578,   216,     4,
+     214,     4,   586,   189,   191,   192,   248,   333,   499,   501,
+     638,   639,   640,   641,   643,   636,   216,   660,     6,     3,
+     495,   491,   511,   507,     4,    25,    26,    27,   325,   213,
+     213,   213,    42,    43,    44,   345,   213,   213,   213,   213,
+       8,     8,     8,     8,     3,     8,   213,   560,     4,     8,
+       3,     8,     8,   143,   144,   145,   568,   213,   213,   213,
+     213,   233,   644,     4,   642,     3,     8,   213,     8,     8,
+     213,   442,     4,   216,   557,     4,   214,     4,   639,   213,
+       5,   213,     7,   645,   646,   647,     3,     6,   190,   193,
+     194,   195,   196,   648,   649,   650,   652,   653,   654,   655,
+     646,   651,     4,     4,     4,   656,     3,     8,     4,   216,
+     214,   214,     4,   649,   213,   213
   };
 
   const short
   Dhcp6Parser::yyr1_[] =
   {
-       0,   214,   216,   215,   217,   215,   218,   215,   219,   215,
-     220,   215,   221,   215,   222,   215,   223,   215,   224,   215,
-     225,   215,   226,   215,   227,   215,   228,   215,   229,   215,
-     230,   230,   230,   230,   230,   230,   230,   231,   233,   232,
-     234,   235,   235,   236,   236,   236,   238,   237,   239,   239,
-     240,   240,   240,   242,   241,   243,   243,   244,   244,   244,
-     245,   247,   246,   249,   248,   248,   250,   252,   251,   253,
-     253,   253,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   256,   255,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   275,   274,   276,   276,
-     276,   276,   276,   278,   277,   280,   279,   281,   282,   284,
-     283,   286,   285,   287,   288,   289,   291,   290,   292,   293,
-     294,   295,   297,   296,   299,   298,   300,   300,   300,   301,
-     301,   301,   301,   301,   301,   301,   301,   303,   302,   304,
-     305,   306,   307,   309,   308,   311,   310,   313,   312,   314,
-     314,   315,   315,   315,   317,   316,   318,   318,   318,   319,
-     319,   319,   319,   319,   319,   319,   319,   319,   319,   319,
-     319,   319,   319,   319,   319,   319,   319,   319,   321,   320,
-     322,   322,   322,   324,   323,   326,   325,   328,   327,   329,
-     331,   330,   332,   333,   334,   335,   336,   338,   337,   339,
-     339,   339,   340,   341,   343,   342,   345,   344,   347,   346,
-     349,   348,   351,   350,   352,   352,   352,   353,   355,   354,
-     357,   356,   358,   358,   358,   359,   359,   360,   361,   363,
-     362,   364,   364,   364,   365,   365,   365,   366,   367,   369,
-     368,   371,   370,   372,   372,   372,   373,   373,   373,   373,
-     373,   373,   374,   375,   376,   378,   377,   379,   379,   380,
-     380,   380,   382,   381,   384,   383,   385,   385,   385,   385,
-     386,   386,   388,   387,   390,   389,   392,   391,   393,   393,
-     393,   394,   394,   394,   394,   394,   394,   395,   396,   397,
-     398,   399,   400,   402,   401,   403,   403,   404,   404,   404,
-     406,   405,   408,   407,   409,   409,   409,   410,   410,   410,
-     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
-     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
-     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
-     410,   410,   410,   410,   410,   410,   410,   410,   410,   410,
-     412,   411,   414,   413,   416,   415,   418,   417,   420,   419,
-     421,   422,   423,   425,   424,   426,   426,   426,   426,   427,
-     428,   430,   429,   431,   431,   432,   432,   432,   434,   433,
-     435,   435,   435,   436,   436,   436,   436,   436,   436,   436,
-     436,   436,   436,   436,   436,   436,   436,   436,   436,   436,
-     436,   436,   436,   436,   436,   436,   436,   436,   436,   436,
-     436,   436,   436,   436,   436,   436,   436,   436,   436,   436,
-     436,   436,   436,   438,   437,   440,   439,   441,   441,   442,
-     442,   442,   444,   443,   446,   445,   447,   447,   448,   448,
-     448,   449,   449,   449,   449,   449,   449,   449,   449,   449,
-     449,   450,   451,   452,   454,   453,   456,   455,   458,   457,
-     459,   461,   460,   462,   464,   463,   465,   465,   466,   466,
-     466,   468,   467,   470,   469,   471,   471,   472,   472,   472,
-     473,   473,   473,   473,   473,   473,   473,   473,   473,   474,
-     476,   475,   477,   478,   479,   480,   482,   481,   483,   483,
-     484,   484,   484,   486,   485,   488,   487,   489,   489,   489,
-     490,   490,   490,   490,   490,   490,   490,   492,   491,   494,
-     493,   496,   495,   498,   497,   499,   499,   500,   500,   500,
-     502,   501,   504,   503,   505,   505,   505,   506,   506,   506,
-     506,   506,   506,   506,   506,   506,   506,   506,   508,   507,
-     509,   511,   510,   512,   513,   515,   514,   516,   516,   517,
-     517,   517,   519,   518,   521,   520,   522,   522,   523,   523,
-     523,   524,   524,   524,   524,   524,   524,   524,   524,   524,
-     524,   524,   526,   525,   528,   527,   530,   529,   532,   531,
-     534,   533,   536,   535,   538,   537,   540,   539,   541,   541,
-     543,   542,   545,   544,   546,   546,   546,   548,   547,   549,
-     549,   550,   550,   550,   551,   551,   551,   551,   551,   551,
-     551,   551,   551,   551,   551,   551,   551,   552,   554,   553,
-     555,   557,   556,   558,   558,   558,   559,   559,   559,   559,
-     559,   559,   559,   559,   559,   561,   560,   562,   562,   562,
-     563,   565,   564,   566,   567,   568,   570,   569,   571,   571,
-     571,   572,   572,   572,   572,   572,   574,   573,   576,   575,
-     578,   577,   579,   579,   579,   580,   580,   580,   580,   580,
-     580,   581,   583,   582,   584,   586,   585,   588,   587,   590,
-     589,   591,   591,   591,   592,   592,   592,   592,   592,   592,
-     592,   592,   592,   592,   592,   592,   592,   592,   592,   592,
-     592,   592,   593,   595,   594,   597,   596,   598,   600,   599,
-     601,   602,   604,   603,   605,   605,   607,   606,   608,   609,
-     611,   610,   613,   612,   615,   614,   617,   616,   619,   618,
-     621,   620,   622,   622,   622,   623,   623,   625,   624,   626,
-     628,   627,   629,   629,   629,   631,   630,   632,   632,   632,
-     633,   633,   633,   633,   633,   633,   633,   634,   636,   635,
-     638,   637,   639,   639,   639,   641,   640,   642,   642,   642,
-     643,   643,   643,   643,   643,   645,   644,   646,   647,   648,
-     650,   649,   652,   651,   653,   653,   653,   654,   654,   655
+       0,   217,   219,   218,   220,   218,   221,   218,   222,   218,
+     223,   218,   224,   218,   225,   218,   226,   218,   227,   218,
+     228,   218,   229,   218,   230,   218,   231,   218,   232,   218,
+     233,   233,   233,   233,   233,   233,   233,   234,   236,   235,
+     237,   238,   238,   239,   239,   239,   241,   240,   242,   242,
+     243,   243,   243,   245,   244,   246,   246,   247,   247,   247,
+     248,   250,   249,   252,   251,   251,   253,   255,   254,   256,
+     256,   256,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   257,   257,   257,
+     257,   257,   257,   257,   257,   257,   257,   259,   258,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   278,   277,   279,   279,
+     279,   279,   279,   281,   280,   283,   282,   284,   285,   287,
+     286,   289,   288,   290,   291,   292,   294,   293,   295,   296,
+     297,   298,   300,   299,   302,   301,   303,   303,   303,   304,
+     304,   304,   304,   304,   304,   304,   304,   306,   305,   307,
+     308,   309,   310,   312,   311,   314,   313,   316,   315,   317,
+     317,   318,   318,   318,   320,   319,   321,   321,   321,   322,
+     322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
+     322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
+     322,   324,   323,   325,   325,   325,   327,   326,   329,   328,
+     331,   330,   332,   334,   333,   335,   336,   337,   338,   339,
+     340,   341,   342,   344,   343,   345,   345,   345,   346,   347,
+     349,   348,   351,   350,   353,   352,   355,   354,   357,   356,
+     358,   358,   358,   359,   361,   360,   363,   362,   364,   364,
+     364,   365,   365,   366,   367,   369,   368,   370,   370,   370,
+     371,   371,   371,   372,   373,   375,   374,   377,   376,   378,
+     378,   378,   379,   379,   379,   379,   379,   379,   380,   381,
+     382,   384,   383,   385,   385,   386,   386,   386,   388,   387,
+     390,   389,   391,   391,   391,   391,   392,   392,   394,   393,
+     396,   395,   398,   397,   399,   399,   399,   400,   400,   400,
+     400,   400,   400,   401,   402,   403,   404,   405,   406,   408,
+     407,   409,   409,   410,   410,   410,   412,   411,   414,   413,
+     415,   415,   415,   416,   416,   416,   416,   416,   416,   416,
+     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
+     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
+     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
+     416,   416,   416,   416,   416,   416,   418,   417,   420,   419,
+     422,   421,   424,   423,   426,   425,   427,   428,   429,   431,
+     430,   432,   432,   432,   432,   433,   434,   436,   435,   437,
+     437,   438,   438,   438,   440,   439,   441,   441,   441,   442,
+     442,   442,   442,   442,   442,   442,   442,   442,   442,   442,
+     442,   442,   442,   442,   442,   442,   442,   442,   442,   442,
+     442,   442,   442,   442,   442,   442,   442,   442,   442,   442,
+     442,   442,   442,   442,   442,   442,   442,   442,   442,   444,
+     443,   446,   445,   447,   447,   448,   448,   448,   450,   449,
+     452,   451,   453,   453,   454,   454,   454,   455,   455,   455,
+     455,   455,   455,   455,   455,   455,   455,   456,   457,   458,
+     460,   459,   462,   461,   464,   463,   465,   467,   466,   468,
+     470,   469,   471,   471,   472,   472,   472,   474,   473,   476,
+     475,   477,   477,   478,   478,   478,   479,   479,   479,   479,
+     479,   479,   479,   479,   479,   480,   482,   481,   483,   484,
+     485,   486,   488,   487,   489,   489,   490,   490,   490,   492,
+     491,   494,   493,   495,   495,   495,   496,   496,   496,   496,
+     496,   496,   496,   498,   497,   500,   499,   502,   501,   504,
+     503,   505,   505,   506,   506,   506,   508,   507,   510,   509,
+     511,   511,   511,   512,   512,   512,   512,   512,   512,   512,
+     512,   512,   512,   512,   514,   513,   515,   517,   516,   518,
+     519,   521,   520,   522,   522,   523,   523,   523,   525,   524,
+     527,   526,   528,   528,   529,   529,   529,   530,   530,   530,
+     530,   530,   530,   530,   530,   530,   530,   530,   532,   531,
+     534,   533,   536,   535,   538,   537,   540,   539,   542,   541,
+     544,   543,   546,   545,   547,   547,   549,   548,   551,   550,
+     552,   552,   552,   554,   553,   555,   555,   556,   556,   556,
+     557,   557,   557,   557,   557,   557,   557,   557,   557,   557,
+     557,   557,   557,   558,   560,   559,   561,   563,   562,   564,
+     564,   564,   565,   565,   565,   565,   565,   565,   565,   565,
+     565,   567,   566,   568,   568,   568,   569,   571,   570,   572,
+     573,   574,   576,   575,   577,   577,   577,   578,   578,   578,
+     578,   578,   580,   579,   582,   581,   584,   583,   585,   585,
+     585,   586,   586,   586,   586,   586,   586,   587,   589,   588,
+     590,   592,   591,   594,   593,   596,   595,   597,   597,   597,
+     598,   598,   598,   598,   598,   598,   598,   598,   598,   598,
+     598,   598,   598,   598,   598,   598,   598,   598,   599,   601,
+     600,   603,   602,   604,   606,   605,   607,   608,   610,   609,
+     611,   611,   613,   612,   614,   615,   617,   616,   619,   618,
+     621,   620,   623,   622,   625,   624,   627,   626,   628,   628,
+     628,   629,   629,   631,   630,   632,   634,   633,   635,   635,
+     635,   637,   636,   638,   638,   638,   639,   639,   639,   639,
+     639,   639,   639,   640,   642,   641,   644,   643,   645,   645,
+     645,   647,   646,   648,   648,   648,   649,   649,   649,   649,
+     649,   651,   650,   652,   653,   654,   656,   655,   658,   657,
+     659,   659,   659,   660,   660,   661
   };
 
   const signed char
@@ -5968,69 +6004,70 @@ namespace isc { namespace dhcp {
        3,     3,     3,     0,     6,     0,     6,     0,     6,     0,
        1,     1,     3,     2,     0,     4,     1,     3,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     3,
-       0,     4,     3,     3,     3,     3,     3,     0,     4,     1,
-       1,     1,     3,     3,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     6,     1,     3,     2,     1,     0,     4,
-       0,     6,     1,     3,     2,     1,     1,     1,     1,     0,
-       6,     1,     3,     2,     1,     1,     1,     1,     1,     0,
-       6,     0,     6,     1,     3,     2,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     0,     6,     0,     1,     1,
-       3,     2,     0,     4,     0,     4,     1,     3,     2,     1,
-       1,     1,     0,     4,     0,     4,     0,     6,     1,     3,
-       2,     1,     1,     1,     1,     1,     1,     3,     3,     3,
-       3,     3,     3,     0,     6,     0,     1,     1,     3,     2,
-       0,     4,     0,     4,     1,     3,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       3,     3,     3,     0,     4,     1,     1,     1,     1,     3,
+       1,     0,     4,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     3,     0,     4,     3,     3,     3,     3,     3,
+       3,     3,     3,     0,     4,     1,     1,     1,     3,     3,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       1,     3,     2,     1,     0,     4,     0,     6,     1,     3,
+       2,     1,     1,     1,     1,     0,     6,     1,     3,     2,
+       1,     1,     1,     1,     1,     0,     6,     0,     6,     1,
+       3,     2,     1,     1,     1,     1,     1,     1,     3,     3,
        3,     0,     6,     0,     1,     1,     3,     2,     0,     4,
+       0,     4,     1,     3,     2,     1,     1,     1,     0,     4,
+       0,     4,     0,     6,     1,     3,     2,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     3,     3,     3,     0,
+       6,     0,     1,     1,     3,     2,     0,     4,     0,     4,
        1,     3,     2,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     6,     0,     4,     0,     1,     1,
-       3,     2,     0,     4,     0,     4,     0,     1,     1,     3,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     1,     0,     4,     0,     4,     0,     4,
-       1,     0,     4,     3,     0,     6,     0,     1,     1,     3,
-       2,     0,     4,     0,     4,     0,     1,     1,     3,     2,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     3,     3,     3,     0,
+       4,     1,     1,     1,     1,     3,     3,     0,     6,     0,
+       1,     1,     3,     2,     0,     4,     1,     3,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     1,     1,     3,     3,     0,     6,     0,     1,
-       1,     3,     2,     0,     4,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     1,     1,     3,     2,
-       0,     4,     0,     4,     1,     3,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
-       3,     0,     4,     3,     3,     0,     6,     0,     1,     1,
-       3,     2,     0,     4,     0,     4,     0,     1,     1,     3,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     6,     1,     1,
-       0,     4,     0,     6,     1,     3,     2,     0,     4,     0,
-       1,     1,     3,     2,     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,
+       6,     0,     4,     0,     1,     1,     3,     2,     0,     4,
+       0,     4,     0,     1,     1,     3,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       0,     4,     0,     4,     0,     4,     1,     0,     4,     3,
+       0,     6,     0,     1,     1,     3,     2,     0,     4,     0,
+       4,     0,     1,     1,     3,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
+       3,     3,     0,     6,     0,     1,     1,     3,     2,     0,
+       4,     0,     4,     1,     3,     2,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     1,     1,     3,     2,     0,     4,     0,     4,
+       1,     3,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     3,     0,     4,     3,
+       3,     0,     6,     0,     1,     1,     3,     2,     0,     4,
+       0,     4,     0,     1,     1,     3,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
-       3,     0,     6,     1,     3,     2,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     1,     1,     1,
-       3,     0,     4,     3,     3,     3,     0,     6,     1,     3,
-       2,     1,     1,     1,     1,     1,     0,     4,     0,     4,
-       0,     6,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     3,     0,     4,     3,     0,     4,     0,     6,     0,
-       4,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     6,     1,     1,     0,     4,     0,     6,
+       1,     3,     2,     0,     4,     0,     1,     1,     3,     2,
        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,     0,     4,     0,     4,     0,     4,     0,     6,
-       0,     4,     1,     3,     2,     1,     1,     0,     6,     3,
-       0,     6,     1,     3,     2,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
-       0,     6,     1,     3,     2,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     0,     4,     3,     3,     3,
-       0,     4,     0,     6,     1,     3,     2,     1,     1,     3
+       1,     1,     1,     1,     0,     4,     3,     0,     6,     1,
+       3,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     1,     1,     1,     3,     0,     4,     3,
+       3,     3,     0,     6,     1,     3,     2,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     0,     6,     1,     3,
+       2,     1,     1,     1,     1,     1,     1,     3,     0,     4,
+       3,     0,     4,     0,     6,     0,     4,     1,     3,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     0,
+       4,     0,     4,     3,     0,     4,     3,     3,     0,     4,
+       1,     1,     0,     4,     3,     3,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     6,     0,     4,     1,     3,
+       2,     1,     1,     0,     6,     3,     0,     6,     1,     3,
+       2,     0,     4,     1,     3,     2,     1,     1,     1,     1,
+       1,     1,     1,     3,     0,     4,     0,     6,     1,     3,
+       2,     0,     4,     1,     3,     2,     1,     1,     1,     1,
+       1,     0,     4,     3,     3,     3,     0,     4,     0,     6,
+       1,     3,     2,     1,     1,     3
   };
 
 
@@ -6050,6 +6087,7 @@ namespace isc { namespace dhcp {
   "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"user\"",
   "\"password\"", "\"host\"", "\"port\"", "\"persist\"",
   "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
+  "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"",
   "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"",
   "\"stop-retry-exit\"", "\"serve-retry-exit\"",
   "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"",
@@ -6139,6 +6177,7 @@ namespace isc { namespace dhcp {
   "database_map_params", "database_map_param", "database_type", "$@35",
   "db_type", "user", "$@36", "password", "$@37", "host", "$@38", "port",
   "name", "$@39", "persist", "lfc_interval", "readonly", "connect_timeout",
+  "read_timeout", "write_timeout", "tcp_user_timeout",
   "reconnect_wait_time", "on_fail", "$@40", "on_fail_mode",
   "max_row_errors", "max_reconnect_tries", "trust_anchor", "$@41",
   "cert_file", "$@42", "key_file", "$@43", "cipher_list", "$@44",
@@ -6228,92 +6267,93 @@ namespace isc { namespace dhcp {
   const short
   Dhcp6Parser::yyrline_[] =
   {
-       0,   302,   302,   302,   303,   303,   304,   304,   305,   305,
-     306,   306,   307,   307,   308,   308,   309,   309,   310,   310,
-     311,   311,   312,   312,   313,   313,   314,   314,   315,   315,
-     323,   324,   325,   326,   327,   328,   329,   332,   337,   337,
-     348,   351,   352,   355,   360,   366,   371,   371,   378,   379,
-     382,   386,   390,   396,   396,   403,   404,   407,   411,   415,
-     425,   434,   434,   449,   449,   463,   466,   472,   472,   481,
-     482,   483,   490,   491,   492,   493,   494,   495,   496,   497,
-     498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
-     508,   509,   510,   511,   512,   513,   514,   515,   516,   517,
-     518,   519,   520,   521,   522,   523,   524,   525,   526,   527,
-     528,   529,   530,   531,   532,   533,   534,   535,   536,   537,
-     538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
-     548,   549,   550,   551,   552,   553,   554,   557,   557,   566,
-     572,   578,   584,   590,   596,   602,   608,   614,   620,   626,
-     632,   638,   644,   650,   656,   662,   668,   668,   677,   680,
-     683,   686,   689,   695,   695,   704,   704,   713,   719,   725,
-     725,   734,   734,   743,   749,   755,   761,   761,   770,   776,
-     782,   788,   794,   794,   806,   806,   815,   816,   817,   822,
-     823,   824,   825,   826,   827,   828,   829,   832,   832,   843,
-     849,   855,   861,   867,   867,   880,   880,   893,   893,   904,
-     905,   908,   909,   910,   915,   915,   925,   926,   927,   932,
-     933,   934,   935,   936,   937,   938,   939,   940,   941,   942,
-     943,   944,   945,   946,   947,   948,   949,   950,   953,   953,
-     961,   962,   963,   966,   966,   975,   975,   984,   984,   993,
-     999,   999,  1008,  1014,  1020,  1026,  1032,  1038,  1038,  1046,
-    1047,  1048,  1051,  1057,  1063,  1063,  1072,  1072,  1081,  1081,
-    1090,  1090,  1099,  1099,  1110,  1111,  1112,  1117,  1119,  1119,
-    1138,  1138,  1149,  1150,  1151,  1156,  1157,  1160,  1165,  1170,
-    1170,  1181,  1182,  1183,  1188,  1189,  1190,  1193,  1198,  1205,
-    1205,  1218,  1218,  1231,  1232,  1233,  1238,  1239,  1240,  1241,
-    1242,  1243,  1246,  1252,  1258,  1264,  1264,  1275,  1276,  1279,
-    1280,  1281,  1286,  1286,  1296,  1296,  1306,  1307,  1308,  1311,
-    1314,  1315,  1318,  1318,  1327,  1327,  1336,  1336,  1348,  1349,
-    1350,  1355,  1356,  1357,  1358,  1359,  1360,  1363,  1369,  1375,
-    1381,  1387,  1393,  1402,  1402,  1416,  1417,  1420,  1421,  1422,
-    1431,  1431,  1457,  1457,  1468,  1469,  1470,  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,  1505,  1506,  1507,  1508,
-    1509,  1510,  1511,  1512,  1513,  1514,  1515,  1516,  1517,  1518,
-    1521,  1521,  1530,  1530,  1539,  1539,  1548,  1548,  1557,  1557,
-    1568,  1574,  1580,  1586,  1586,  1594,  1595,  1596,  1597,  1600,
-    1606,  1614,  1614,  1626,  1627,  1631,  1632,  1633,  1638,  1638,
-    1646,  1647,  1648,  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,  1699,  1699,  1713,  1713,  1722,  1723,  1726,
-    1727,  1728,  1735,  1735,  1750,  1750,  1764,  1765,  1768,  1769,
-    1770,  1775,  1776,  1777,  1778,  1779,  1780,  1781,  1782,  1783,
-    1784,  1787,  1789,  1795,  1797,  1797,  1806,  1806,  1815,  1815,
-    1824,  1826,  1826,  1835,  1845,  1845,  1858,  1859,  1864,  1865,
-    1866,  1873,  1873,  1885,  1885,  1897,  1898,  1903,  1904,  1905,
-    1912,  1913,  1914,  1915,  1916,  1917,  1918,  1919,  1920,  1923,
-    1925,  1925,  1934,  1936,  1938,  1944,  1953,  1953,  1966,  1967,
-    1970,  1971,  1972,  1977,  1977,  1987,  1987,  1997,  1998,  1999,
-    2004,  2005,  2006,  2007,  2008,  2009,  2010,  2013,  2013,  2022,
-    2022,  2047,  2047,  2077,  2077,  2090,  2091,  2094,  2095,  2096,
-    2101,  2101,  2113,  2113,  2125,  2126,  2127,  2132,  2133,  2134,
-    2135,  2136,  2137,  2138,  2139,  2140,  2141,  2142,  2145,  2145,
-    2154,  2160,  2160,  2169,  2175,  2184,  2184,  2195,  2196,  2199,
-    2200,  2201,  2206,  2206,  2215,  2215,  2224,  2225,  2228,  2229,
-    2230,  2236,  2237,  2238,  2239,  2240,  2241,  2242,  2243,  2244,
-    2245,  2246,  2249,  2249,  2260,  2260,  2271,  2271,  2280,  2280,
-    2289,  2289,  2298,  2298,  2307,  2307,  2321,  2321,  2332,  2333,
-    2336,  2336,  2348,  2348,  2359,  2360,  2361,  2366,  2366,  2376,
-    2377,  2380,  2381,  2382,  2387,  2388,  2389,  2390,  2391,  2392,
-    2393,  2394,  2395,  2396,  2397,  2398,  2399,  2402,  2404,  2404,
-    2413,  2422,  2422,  2435,  2436,  2437,  2442,  2443,  2444,  2445,
-    2446,  2447,  2448,  2449,  2450,  2453,  2453,  2461,  2462,  2463,
-    2466,  2472,  2472,  2481,  2487,  2495,  2503,  2503,  2514,  2515,
-    2516,  2521,  2522,  2523,  2524,  2525,  2528,  2528,  2537,  2537,
-    2549,  2549,  2562,  2563,  2564,  2569,  2570,  2571,  2572,  2573,
-    2574,  2577,  2583,  2583,  2592,  2598,  2598,  2608,  2608,  2621,
-    2621,  2631,  2632,  2633,  2638,  2639,  2640,  2641,  2642,  2643,
-    2644,  2645,  2646,  2647,  2648,  2649,  2650,  2651,  2652,  2653,
-    2654,  2655,  2658,  2665,  2665,  2674,  2674,  2683,  2689,  2689,
-    2698,  2704,  2710,  2710,  2719,  2720,  2723,  2723,  2733,  2740,
-    2747,  2747,  2756,  2756,  2766,  2766,  2776,  2776,  2788,  2788,
-    2800,  2800,  2810,  2811,  2812,  2818,  2819,  2822,  2822,  2833,
-    2841,  2841,  2854,  2855,  2856,  2862,  2862,  2870,  2871,  2872,
-    2877,  2878,  2879,  2880,  2881,  2882,  2883,  2886,  2892,  2892,
-    2901,  2901,  2912,  2913,  2914,  2919,  2919,  2927,  2928,  2929,
-    2934,  2935,  2936,  2937,  2938,  2941,  2941,  2950,  2956,  2962,
-    2968,  2968,  2977,  2977,  2988,  2989,  2990,  2995,  2996,  2999
+       0,   305,   305,   305,   306,   306,   307,   307,   308,   308,
+     309,   309,   310,   310,   311,   311,   312,   312,   313,   313,
+     314,   314,   315,   315,   316,   316,   317,   317,   318,   318,
+     326,   327,   328,   329,   330,   331,   332,   335,   340,   340,
+     351,   354,   355,   358,   363,   369,   374,   374,   381,   382,
+     385,   389,   393,   399,   399,   406,   407,   410,   414,   418,
+     428,   437,   437,   452,   452,   466,   469,   475,   475,   484,
+     485,   486,   493,   494,   495,   496,   497,   498,   499,   500,
+     501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
+     511,   512,   513,   514,   515,   516,   517,   518,   519,   520,
+     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
+     531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
+     541,   542,   543,   544,   545,   546,   547,   548,   549,   550,
+     551,   552,   553,   554,   555,   556,   557,   560,   560,   569,
+     575,   581,   587,   593,   599,   605,   611,   617,   623,   629,
+     635,   641,   647,   653,   659,   665,   671,   671,   680,   683,
+     686,   689,   692,   698,   698,   707,   707,   716,   722,   728,
+     728,   737,   737,   746,   752,   758,   764,   764,   773,   779,
+     785,   791,   797,   797,   809,   809,   818,   819,   820,   825,
+     826,   827,   828,   829,   830,   831,   832,   835,   835,   846,
+     852,   858,   864,   870,   870,   883,   883,   896,   896,   907,
+     908,   911,   912,   913,   918,   918,   928,   929,   930,   935,
+     936,   937,   938,   939,   940,   941,   942,   943,   944,   945,
+     946,   947,   948,   949,   950,   951,   952,   953,   954,   955,
+     956,   959,   959,   967,   968,   969,   972,   972,   981,   981,
+     990,   990,   999,  1005,  1005,  1014,  1020,  1026,  1032,  1038,
+    1044,  1050,  1057,  1063,  1063,  1071,  1072,  1073,  1076,  1082,
+    1088,  1088,  1097,  1097,  1106,  1106,  1115,  1115,  1124,  1124,
+    1135,  1136,  1137,  1142,  1144,  1144,  1163,  1163,  1174,  1175,
+    1176,  1181,  1182,  1185,  1190,  1195,  1195,  1206,  1207,  1208,
+    1213,  1214,  1215,  1218,  1223,  1230,  1230,  1243,  1243,  1256,
+    1257,  1258,  1263,  1264,  1265,  1266,  1267,  1268,  1271,  1277,
+    1283,  1289,  1289,  1300,  1301,  1304,  1305,  1306,  1311,  1311,
+    1321,  1321,  1331,  1332,  1333,  1336,  1339,  1340,  1343,  1343,
+    1352,  1352,  1361,  1361,  1373,  1374,  1375,  1380,  1381,  1382,
+    1383,  1384,  1385,  1388,  1394,  1400,  1406,  1412,  1418,  1427,
+    1427,  1441,  1442,  1445,  1446,  1447,  1456,  1456,  1482,  1482,
+    1493,  1494,  1495,  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,  1535,  1536,  1537,
+    1538,  1539,  1540,  1541,  1542,  1543,  1546,  1546,  1555,  1555,
+    1564,  1564,  1573,  1573,  1582,  1582,  1593,  1599,  1605,  1611,
+    1611,  1619,  1620,  1621,  1622,  1625,  1631,  1639,  1639,  1651,
+    1652,  1656,  1657,  1658,  1663,  1663,  1671,  1672,  1673,  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,  1724,
+    1724,  1738,  1738,  1747,  1748,  1751,  1752,  1753,  1760,  1760,
+    1775,  1775,  1789,  1790,  1793,  1794,  1795,  1800,  1801,  1802,
+    1803,  1804,  1805,  1806,  1807,  1808,  1809,  1812,  1814,  1820,
+    1822,  1822,  1831,  1831,  1840,  1840,  1849,  1851,  1851,  1860,
+    1870,  1870,  1883,  1884,  1889,  1890,  1891,  1898,  1898,  1910,
+    1910,  1922,  1923,  1928,  1929,  1930,  1937,  1938,  1939,  1940,
+    1941,  1942,  1943,  1944,  1945,  1948,  1950,  1950,  1959,  1961,
+    1963,  1969,  1978,  1978,  1991,  1992,  1995,  1996,  1997,  2002,
+    2002,  2012,  2012,  2022,  2023,  2024,  2029,  2030,  2031,  2032,
+    2033,  2034,  2035,  2038,  2038,  2047,  2047,  2072,  2072,  2102,
+    2102,  2115,  2116,  2119,  2120,  2121,  2126,  2126,  2138,  2138,
+    2150,  2151,  2152,  2157,  2158,  2159,  2160,  2161,  2162,  2163,
+    2164,  2165,  2166,  2167,  2170,  2170,  2179,  2185,  2185,  2194,
+    2200,  2209,  2209,  2220,  2221,  2224,  2225,  2226,  2231,  2231,
+    2240,  2240,  2249,  2250,  2253,  2254,  2255,  2261,  2262,  2263,
+    2264,  2265,  2266,  2267,  2268,  2269,  2270,  2271,  2274,  2274,
+    2285,  2285,  2296,  2296,  2305,  2305,  2314,  2314,  2323,  2323,
+    2332,  2332,  2346,  2346,  2357,  2358,  2361,  2361,  2373,  2373,
+    2384,  2385,  2386,  2391,  2391,  2401,  2402,  2405,  2406,  2407,
+    2412,  2413,  2414,  2415,  2416,  2417,  2418,  2419,  2420,  2421,
+    2422,  2423,  2424,  2427,  2429,  2429,  2438,  2447,  2447,  2460,
+    2461,  2462,  2467,  2468,  2469,  2470,  2471,  2472,  2473,  2474,
+    2475,  2478,  2478,  2486,  2487,  2488,  2491,  2497,  2497,  2506,
+    2512,  2520,  2528,  2528,  2539,  2540,  2541,  2546,  2547,  2548,
+    2549,  2550,  2553,  2553,  2562,  2562,  2574,  2574,  2587,  2588,
+    2589,  2594,  2595,  2596,  2597,  2598,  2599,  2602,  2608,  2608,
+    2617,  2623,  2623,  2633,  2633,  2646,  2646,  2656,  2657,  2658,
+    2663,  2664,  2665,  2666,  2667,  2668,  2669,  2670,  2671,  2672,
+    2673,  2674,  2675,  2676,  2677,  2678,  2679,  2680,  2683,  2690,
+    2690,  2699,  2699,  2708,  2714,  2714,  2723,  2729,  2735,  2735,
+    2744,  2745,  2748,  2748,  2758,  2765,  2772,  2772,  2781,  2781,
+    2791,  2791,  2801,  2801,  2813,  2813,  2825,  2825,  2835,  2836,
+    2837,  2843,  2844,  2847,  2847,  2858,  2866,  2866,  2879,  2880,
+    2881,  2887,  2887,  2895,  2896,  2897,  2902,  2903,  2904,  2905,
+    2906,  2907,  2908,  2911,  2917,  2917,  2926,  2926,  2937,  2938,
+    2939,  2944,  2944,  2952,  2953,  2954,  2959,  2960,  2961,  2962,
+    2963,  2966,  2966,  2975,  2981,  2987,  2993,  2993,  3002,  3002,
+    3013,  3014,  3015,  3020,  3021,  3024
   };
 
   void
@@ -6346,9 +6386,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy"
 } } // isc::dhcp
-#line 6350 "dhcp6_parser.cc"
+#line 6390 "dhcp6_parser.cc"
 
-#line 3005 "dhcp6_parser.yy"
+#line 3030 "dhcp6_parser.yy"
 
 
 void
diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h
index f1eb00b415..e57c1c1221 100644
--- a/src/bin/dhcp6/dhcp6_parser.h
+++ b/src/bin/dhcp6/dhcp6_parser.h
@@ -531,184 +531,187 @@ namespace isc { namespace dhcp {
     TOKEN_LFC_INTERVAL = 288,      // "lfc-interval"
     TOKEN_READONLY = 289,          // "readonly"
     TOKEN_CONNECT_TIMEOUT = 290,   // "connect-timeout"
-    TOKEN_MAX_RECONNECT_TRIES = 291, // "max-reconnect-tries"
-    TOKEN_RECONNECT_WAIT_TIME = 292, // "reconnect-wait-time"
-    TOKEN_ON_FAIL = 293,           // "on-fail"
-    TOKEN_STOP_RETRY_EXIT = 294,   // "stop-retry-exit"
-    TOKEN_SERVE_RETRY_EXIT = 295,  // "serve-retry-exit"
-    TOKEN_SERVE_RETRY_CONTINUE = 296, // "serve-retry-continue"
-    TOKEN_MAX_ROW_ERRORS = 297,    // "max-row-errors"
-    TOKEN_TRUST_ANCHOR = 298,      // "trust-anchor"
-    TOKEN_CERT_FILE = 299,         // "cert-file"
-    TOKEN_KEY_FILE = 300,          // "key-file"
-    TOKEN_CIPHER_LIST = 301,       // "cipher-list"
-    TOKEN_PREFERRED_LIFETIME = 302, // "preferred-lifetime"
-    TOKEN_MIN_PREFERRED_LIFETIME = 303, // "min-preferred-lifetime"
-    TOKEN_MAX_PREFERRED_LIFETIME = 304, // "max-preferred-lifetime"
-    TOKEN_VALID_LIFETIME = 305,    // "valid-lifetime"
-    TOKEN_MIN_VALID_LIFETIME = 306, // "min-valid-lifetime"
-    TOKEN_MAX_VALID_LIFETIME = 307, // "max-valid-lifetime"
-    TOKEN_RENEW_TIMER = 308,       // "renew-timer"
-    TOKEN_REBIND_TIMER = 309,      // "rebind-timer"
-    TOKEN_CALCULATE_TEE_TIMES = 310, // "calculate-tee-times"
-    TOKEN_T1_PERCENT = 311,        // "t1-percent"
-    TOKEN_T2_PERCENT = 312,        // "t2-percent"
-    TOKEN_CACHE_THRESHOLD = 313,   // "cache-threshold"
-    TOKEN_CACHE_MAX_AGE = 314,     // "cache-max-age"
-    TOKEN_DECLINE_PROBATION_PERIOD = 315, // "decline-probation-period"
-    TOKEN_SERVER_TAG = 316,        // "server-tag"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 317, // "statistic-default-sample-count"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 318, // "statistic-default-sample-age"
-    TOKEN_DDNS_SEND_UPDATES = 319, // "ddns-send-updates"
-    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 320, // "ddns-override-no-update"
-    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 321, // "ddns-override-client-update"
-    TOKEN_DDNS_REPLACE_CLIENT_NAME = 322, // "ddns-replace-client-name"
-    TOKEN_DDNS_GENERATED_PREFIX = 323, // "ddns-generated-prefix"
-    TOKEN_DDNS_QUALIFYING_SUFFIX = 324, // "ddns-qualifying-suffix"
-    TOKEN_DDNS_UPDATE_ON_RENEW = 325, // "ddns-update-on-renew"
-    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 326, // "ddns-use-conflict-resolution"
-    TOKEN_STORE_EXTENDED_INFO = 327, // "store-extended-info"
-    TOKEN_SUBNET6 = 328,           // "subnet6"
-    TOKEN_OPTION_DEF = 329,        // "option-def"
-    TOKEN_OPTION_DATA = 330,       // "option-data"
-    TOKEN_NAME = 331,              // "name"
-    TOKEN_DATA = 332,              // "data"
-    TOKEN_CODE = 333,              // "code"
-    TOKEN_SPACE = 334,             // "space"
-    TOKEN_CSV_FORMAT = 335,        // "csv-format"
-    TOKEN_ALWAYS_SEND = 336,       // "always-send"
-    TOKEN_RECORD_TYPES = 337,      // "record-types"
-    TOKEN_ENCAPSULATE = 338,       // "encapsulate"
-    TOKEN_ARRAY = 339,             // "array"
-    TOKEN_PARKED_PACKET_LIMIT = 340, // "parked-packet-limit"
-    TOKEN_SHARED_NETWORKS = 341,   // "shared-networks"
-    TOKEN_POOLS = 342,             // "pools"
-    TOKEN_POOL = 343,              // "pool"
-    TOKEN_PD_POOLS = 344,          // "pd-pools"
-    TOKEN_PREFIX = 345,            // "prefix"
-    TOKEN_PREFIX_LEN = 346,        // "prefix-len"
-    TOKEN_EXCLUDED_PREFIX = 347,   // "excluded-prefix"
-    TOKEN_EXCLUDED_PREFIX_LEN = 348, // "excluded-prefix-len"
-    TOKEN_DELEGATED_LEN = 349,     // "delegated-len"
-    TOKEN_USER_CONTEXT = 350,      // "user-context"
-    TOKEN_COMMENT = 351,           // "comment"
-    TOKEN_SUBNET = 352,            // "subnet"
-    TOKEN_INTERFACE = 353,         // "interface"
-    TOKEN_INTERFACE_ID = 354,      // "interface-id"
-    TOKEN_ID = 355,                // "id"
-    TOKEN_RAPID_COMMIT = 356,      // "rapid-commit"
-    TOKEN_RESERVATION_MODE = 357,  // "reservation-mode"
-    TOKEN_DISABLED = 358,          // "disabled"
-    TOKEN_OUT_OF_POOL = 359,       // "out-of-pool"
-    TOKEN_GLOBAL = 360,            // "global"
-    TOKEN_ALL = 361,               // "all"
-    TOKEN_RESERVATIONS_GLOBAL = 362, // "reservations-global"
-    TOKEN_RESERVATIONS_IN_SUBNET = 363, // "reservations-in-subnet"
-    TOKEN_RESERVATIONS_OUT_OF_POOL = 364, // "reservations-out-of-pool"
-    TOKEN_MAC_SOURCES = 365,       // "mac-sources"
-    TOKEN_RELAY_SUPPLIED_OPTIONS = 366, // "relay-supplied-options"
-    TOKEN_HOST_RESERVATION_IDENTIFIERS = 367, // "host-reservation-identifiers"
-    TOKEN_SANITY_CHECKS = 368,     // "sanity-checks"
-    TOKEN_LEASE_CHECKS = 369,      // "lease-checks"
-    TOKEN_CLIENT_CLASSES = 370,    // "client-classes"
-    TOKEN_REQUIRE_CLIENT_CLASSES = 371, // "require-client-classes"
-    TOKEN_TEST = 372,              // "test"
-    TOKEN_ONLY_IF_REQUIRED = 373,  // "only-if-required"
-    TOKEN_CLIENT_CLASS = 374,      // "client-class"
-    TOKEN_RESERVATIONS = 375,      // "reservations"
-    TOKEN_IP_ADDRESSES = 376,      // "ip-addresses"
-    TOKEN_PREFIXES = 377,          // "prefixes"
-    TOKEN_DUID = 378,              // "duid"
-    TOKEN_HW_ADDRESS = 379,        // "hw-address"
-    TOKEN_HOSTNAME = 380,          // "hostname"
-    TOKEN_FLEX_ID = 381,           // "flex-id"
-    TOKEN_RELAY = 382,             // "relay"
-    TOKEN_IP_ADDRESS = 383,        // "ip-address"
-    TOKEN_HOOKS_LIBRARIES = 384,   // "hooks-libraries"
-    TOKEN_LIBRARY = 385,           // "library"
-    TOKEN_PARAMETERS = 386,        // "parameters"
-    TOKEN_EXPIRED_LEASES_PROCESSING = 387, // "expired-leases-processing"
-    TOKEN_RECLAIM_TIMER_WAIT_TIME = 388, // "reclaim-timer-wait-time"
-    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 389, // "flush-reclaimed-timer-wait-time"
-    TOKEN_HOLD_RECLAIMED_TIME = 390, // "hold-reclaimed-time"
-    TOKEN_MAX_RECLAIM_LEASES = 391, // "max-reclaim-leases"
-    TOKEN_MAX_RECLAIM_TIME = 392,  // "max-reclaim-time"
-    TOKEN_UNWARNED_RECLAIM_CYCLES = 393, // "unwarned-reclaim-cycles"
-    TOKEN_SERVER_ID = 394,         // "server-id"
-    TOKEN_LLT = 395,               // "LLT"
-    TOKEN_EN = 396,                // "EN"
-    TOKEN_LL = 397,                // "LL"
-    TOKEN_IDENTIFIER = 398,        // "identifier"
-    TOKEN_HTYPE = 399,             // "htype"
-    TOKEN_TIME = 400,              // "time"
-    TOKEN_ENTERPRISE_ID = 401,     // "enterprise-id"
-    TOKEN_DHCP4O6_PORT = 402,      // "dhcp4o6-port"
-    TOKEN_DHCP_MULTI_THREADING = 403, // "multi-threading"
-    TOKEN_ENABLE_MULTI_THREADING = 404, // "enable-multi-threading"
-    TOKEN_THREAD_POOL_SIZE = 405,  // "thread-pool-size"
-    TOKEN_PACKET_QUEUE_SIZE = 406, // "packet-queue-size"
-    TOKEN_CONTROL_SOCKET = 407,    // "control-socket"
-    TOKEN_SOCKET_TYPE = 408,       // "socket-type"
-    TOKEN_SOCKET_NAME = 409,       // "socket-name"
-    TOKEN_DHCP_QUEUE_CONTROL = 410, // "dhcp-queue-control"
-    TOKEN_ENABLE_QUEUE = 411,      // "enable-queue"
-    TOKEN_QUEUE_TYPE = 412,        // "queue-type"
-    TOKEN_CAPACITY = 413,          // "capacity"
-    TOKEN_DHCP_DDNS = 414,         // "dhcp-ddns"
-    TOKEN_ENABLE_UPDATES = 415,    // "enable-updates"
-    TOKEN_QUALIFYING_SUFFIX = 416, // "qualifying-suffix"
-    TOKEN_SERVER_IP = 417,         // "server-ip"
-    TOKEN_SERVER_PORT = 418,       // "server-port"
-    TOKEN_SENDER_IP = 419,         // "sender-ip"
-    TOKEN_SENDER_PORT = 420,       // "sender-port"
-    TOKEN_MAX_QUEUE_SIZE = 421,    // "max-queue-size"
-    TOKEN_NCR_PROTOCOL = 422,      // "ncr-protocol"
-    TOKEN_NCR_FORMAT = 423,        // "ncr-format"
-    TOKEN_OVERRIDE_NO_UPDATE = 424, // "override-no-update"
-    TOKEN_OVERRIDE_CLIENT_UPDATE = 425, // "override-client-update"
-    TOKEN_REPLACE_CLIENT_NAME = 426, // "replace-client-name"
-    TOKEN_GENERATED_PREFIX = 427,  // "generated-prefix"
-    TOKEN_UDP = 428,               // "UDP"
-    TOKEN_TCP = 429,               // "TCP"
-    TOKEN_JSON = 430,              // "JSON"
-    TOKEN_WHEN_PRESENT = 431,      // "when-present"
-    TOKEN_NEVER = 432,             // "never"
-    TOKEN_ALWAYS = 433,            // "always"
-    TOKEN_WHEN_NOT_PRESENT = 434,  // "when-not-present"
-    TOKEN_HOSTNAME_CHAR_SET = 435, // "hostname-char-set"
-    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 436, // "hostname-char-replacement"
-    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 437, // "early-global-reservations-lookup"
-    TOKEN_IP_RESERVATIONS_UNIQUE = 438, // "ip-reservations-unique"
-    TOKEN_RESERVATIONS_LOOKUP_FIRST = 439, // "reservations-lookup-first"
-    TOKEN_LOGGERS = 440,           // "loggers"
-    TOKEN_OUTPUT_OPTIONS = 441,    // "output_options"
-    TOKEN_OUTPUT = 442,            // "output"
-    TOKEN_DEBUGLEVEL = 443,        // "debuglevel"
-    TOKEN_SEVERITY = 444,          // "severity"
-    TOKEN_FLUSH = 445,             // "flush"
-    TOKEN_MAXSIZE = 446,           // "maxsize"
-    TOKEN_MAXVER = 447,            // "maxver"
-    TOKEN_PATTERN = 448,           // "pattern"
-    TOKEN_COMPATIBILITY = 449,     // "compatibility"
-    TOKEN_LENIENT_OPTION_PARSING = 450, // "lenient-option-parsing"
-    TOKEN_TOPLEVEL_JSON = 451,     // TOPLEVEL_JSON
-    TOKEN_TOPLEVEL_DHCP6 = 452,    // TOPLEVEL_DHCP6
-    TOKEN_SUB_DHCP6 = 453,         // SUB_DHCP6
-    TOKEN_SUB_INTERFACES6 = 454,   // SUB_INTERFACES6
-    TOKEN_SUB_SUBNET6 = 455,       // SUB_SUBNET6
-    TOKEN_SUB_POOL6 = 456,         // SUB_POOL6
-    TOKEN_SUB_PD_POOL = 457,       // SUB_PD_POOL
-    TOKEN_SUB_RESERVATION = 458,   // SUB_RESERVATION
-    TOKEN_SUB_OPTION_DEFS = 459,   // SUB_OPTION_DEFS
-    TOKEN_SUB_OPTION_DEF = 460,    // SUB_OPTION_DEF
-    TOKEN_SUB_OPTION_DATA = 461,   // SUB_OPTION_DATA
-    TOKEN_SUB_HOOKS_LIBRARY = 462, // SUB_HOOKS_LIBRARY
-    TOKEN_SUB_DHCP_DDNS = 463,     // SUB_DHCP_DDNS
-    TOKEN_SUB_CONFIG_CONTROL = 464, // SUB_CONFIG_CONTROL
-    TOKEN_STRING = 465,            // "constant string"
-    TOKEN_INTEGER = 466,           // "integer"
-    TOKEN_FLOAT = 467,             // "floating point"
-    TOKEN_BOOLEAN = 468            // "boolean"
+    TOKEN_READ_TIMEOUT = 291,      // "read-timeout"
+    TOKEN_WRITE_TIMEOUT = 292,     // "write-timeout"
+    TOKEN_TCP_USER_TIMEOUT = 293,  // "tcp-user-timeout"
+    TOKEN_MAX_RECONNECT_TRIES = 294, // "max-reconnect-tries"
+    TOKEN_RECONNECT_WAIT_TIME = 295, // "reconnect-wait-time"
+    TOKEN_ON_FAIL = 296,           // "on-fail"
+    TOKEN_STOP_RETRY_EXIT = 297,   // "stop-retry-exit"
+    TOKEN_SERVE_RETRY_EXIT = 298,  // "serve-retry-exit"
+    TOKEN_SERVE_RETRY_CONTINUE = 299, // "serve-retry-continue"
+    TOKEN_MAX_ROW_ERRORS = 300,    // "max-row-errors"
+    TOKEN_TRUST_ANCHOR = 301,      // "trust-anchor"
+    TOKEN_CERT_FILE = 302,         // "cert-file"
+    TOKEN_KEY_FILE = 303,          // "key-file"
+    TOKEN_CIPHER_LIST = 304,       // "cipher-list"
+    TOKEN_PREFERRED_LIFETIME = 305, // "preferred-lifetime"
+    TOKEN_MIN_PREFERRED_LIFETIME = 306, // "min-preferred-lifetime"
+    TOKEN_MAX_PREFERRED_LIFETIME = 307, // "max-preferred-lifetime"
+    TOKEN_VALID_LIFETIME = 308,    // "valid-lifetime"
+    TOKEN_MIN_VALID_LIFETIME = 309, // "min-valid-lifetime"
+    TOKEN_MAX_VALID_LIFETIME = 310, // "max-valid-lifetime"
+    TOKEN_RENEW_TIMER = 311,       // "renew-timer"
+    TOKEN_REBIND_TIMER = 312,      // "rebind-timer"
+    TOKEN_CALCULATE_TEE_TIMES = 313, // "calculate-tee-times"
+    TOKEN_T1_PERCENT = 314,        // "t1-percent"
+    TOKEN_T2_PERCENT = 315,        // "t2-percent"
+    TOKEN_CACHE_THRESHOLD = 316,   // "cache-threshold"
+    TOKEN_CACHE_MAX_AGE = 317,     // "cache-max-age"
+    TOKEN_DECLINE_PROBATION_PERIOD = 318, // "decline-probation-period"
+    TOKEN_SERVER_TAG = 319,        // "server-tag"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 320, // "statistic-default-sample-count"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 321, // "statistic-default-sample-age"
+    TOKEN_DDNS_SEND_UPDATES = 322, // "ddns-send-updates"
+    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 323, // "ddns-override-no-update"
+    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 324, // "ddns-override-client-update"
+    TOKEN_DDNS_REPLACE_CLIENT_NAME = 325, // "ddns-replace-client-name"
+    TOKEN_DDNS_GENERATED_PREFIX = 326, // "ddns-generated-prefix"
+    TOKEN_DDNS_QUALIFYING_SUFFIX = 327, // "ddns-qualifying-suffix"
+    TOKEN_DDNS_UPDATE_ON_RENEW = 328, // "ddns-update-on-renew"
+    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 329, // "ddns-use-conflict-resolution"
+    TOKEN_STORE_EXTENDED_INFO = 330, // "store-extended-info"
+    TOKEN_SUBNET6 = 331,           // "subnet6"
+    TOKEN_OPTION_DEF = 332,        // "option-def"
+    TOKEN_OPTION_DATA = 333,       // "option-data"
+    TOKEN_NAME = 334,              // "name"
+    TOKEN_DATA = 335,              // "data"
+    TOKEN_CODE = 336,              // "code"
+    TOKEN_SPACE = 337,             // "space"
+    TOKEN_CSV_FORMAT = 338,        // "csv-format"
+    TOKEN_ALWAYS_SEND = 339,       // "always-send"
+    TOKEN_RECORD_TYPES = 340,      // "record-types"
+    TOKEN_ENCAPSULATE = 341,       // "encapsulate"
+    TOKEN_ARRAY = 342,             // "array"
+    TOKEN_PARKED_PACKET_LIMIT = 343, // "parked-packet-limit"
+    TOKEN_SHARED_NETWORKS = 344,   // "shared-networks"
+    TOKEN_POOLS = 345,             // "pools"
+    TOKEN_POOL = 346,              // "pool"
+    TOKEN_PD_POOLS = 347,          // "pd-pools"
+    TOKEN_PREFIX = 348,            // "prefix"
+    TOKEN_PREFIX_LEN = 349,        // "prefix-len"
+    TOKEN_EXCLUDED_PREFIX = 350,   // "excluded-prefix"
+    TOKEN_EXCLUDED_PREFIX_LEN = 351, // "excluded-prefix-len"
+    TOKEN_DELEGATED_LEN = 352,     // "delegated-len"
+    TOKEN_USER_CONTEXT = 353,      // "user-context"
+    TOKEN_COMMENT = 354,           // "comment"
+    TOKEN_SUBNET = 355,            // "subnet"
+    TOKEN_INTERFACE = 356,         // "interface"
+    TOKEN_INTERFACE_ID = 357,      // "interface-id"
+    TOKEN_ID = 358,                // "id"
+    TOKEN_RAPID_COMMIT = 359,      // "rapid-commit"
+    TOKEN_RESERVATION_MODE = 360,  // "reservation-mode"
+    TOKEN_DISABLED = 361,          // "disabled"
+    TOKEN_OUT_OF_POOL = 362,       // "out-of-pool"
+    TOKEN_GLOBAL = 363,            // "global"
+    TOKEN_ALL = 364,               // "all"
+    TOKEN_RESERVATIONS_GLOBAL = 365, // "reservations-global"
+    TOKEN_RESERVATIONS_IN_SUBNET = 366, // "reservations-in-subnet"
+    TOKEN_RESERVATIONS_OUT_OF_POOL = 367, // "reservations-out-of-pool"
+    TOKEN_MAC_SOURCES = 368,       // "mac-sources"
+    TOKEN_RELAY_SUPPLIED_OPTIONS = 369, // "relay-supplied-options"
+    TOKEN_HOST_RESERVATION_IDENTIFIERS = 370, // "host-reservation-identifiers"
+    TOKEN_SANITY_CHECKS = 371,     // "sanity-checks"
+    TOKEN_LEASE_CHECKS = 372,      // "lease-checks"
+    TOKEN_CLIENT_CLASSES = 373,    // "client-classes"
+    TOKEN_REQUIRE_CLIENT_CLASSES = 374, // "require-client-classes"
+    TOKEN_TEST = 375,              // "test"
+    TOKEN_ONLY_IF_REQUIRED = 376,  // "only-if-required"
+    TOKEN_CLIENT_CLASS = 377,      // "client-class"
+    TOKEN_RESERVATIONS = 378,      // "reservations"
+    TOKEN_IP_ADDRESSES = 379,      // "ip-addresses"
+    TOKEN_PREFIXES = 380,          // "prefixes"
+    TOKEN_DUID = 381,              // "duid"
+    TOKEN_HW_ADDRESS = 382,        // "hw-address"
+    TOKEN_HOSTNAME = 383,          // "hostname"
+    TOKEN_FLEX_ID = 384,           // "flex-id"
+    TOKEN_RELAY = 385,             // "relay"
+    TOKEN_IP_ADDRESS = 386,        // "ip-address"
+    TOKEN_HOOKS_LIBRARIES = 387,   // "hooks-libraries"
+    TOKEN_LIBRARY = 388,           // "library"
+    TOKEN_PARAMETERS = 389,        // "parameters"
+    TOKEN_EXPIRED_LEASES_PROCESSING = 390, // "expired-leases-processing"
+    TOKEN_RECLAIM_TIMER_WAIT_TIME = 391, // "reclaim-timer-wait-time"
+    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 392, // "flush-reclaimed-timer-wait-time"
+    TOKEN_HOLD_RECLAIMED_TIME = 393, // "hold-reclaimed-time"
+    TOKEN_MAX_RECLAIM_LEASES = 394, // "max-reclaim-leases"
+    TOKEN_MAX_RECLAIM_TIME = 395,  // "max-reclaim-time"
+    TOKEN_UNWARNED_RECLAIM_CYCLES = 396, // "unwarned-reclaim-cycles"
+    TOKEN_SERVER_ID = 397,         // "server-id"
+    TOKEN_LLT = 398,               // "LLT"
+    TOKEN_EN = 399,                // "EN"
+    TOKEN_LL = 400,                // "LL"
+    TOKEN_IDENTIFIER = 401,        // "identifier"
+    TOKEN_HTYPE = 402,             // "htype"
+    TOKEN_TIME = 403,              // "time"
+    TOKEN_ENTERPRISE_ID = 404,     // "enterprise-id"
+    TOKEN_DHCP4O6_PORT = 405,      // "dhcp4o6-port"
+    TOKEN_DHCP_MULTI_THREADING = 406, // "multi-threading"
+    TOKEN_ENABLE_MULTI_THREADING = 407, // "enable-multi-threading"
+    TOKEN_THREAD_POOL_SIZE = 408,  // "thread-pool-size"
+    TOKEN_PACKET_QUEUE_SIZE = 409, // "packet-queue-size"
+    TOKEN_CONTROL_SOCKET = 410,    // "control-socket"
+    TOKEN_SOCKET_TYPE = 411,       // "socket-type"
+    TOKEN_SOCKET_NAME = 412,       // "socket-name"
+    TOKEN_DHCP_QUEUE_CONTROL = 413, // "dhcp-queue-control"
+    TOKEN_ENABLE_QUEUE = 414,      // "enable-queue"
+    TOKEN_QUEUE_TYPE = 415,        // "queue-type"
+    TOKEN_CAPACITY = 416,          // "capacity"
+    TOKEN_DHCP_DDNS = 417,         // "dhcp-ddns"
+    TOKEN_ENABLE_UPDATES = 418,    // "enable-updates"
+    TOKEN_QUALIFYING_SUFFIX = 419, // "qualifying-suffix"
+    TOKEN_SERVER_IP = 420,         // "server-ip"
+    TOKEN_SERVER_PORT = 421,       // "server-port"
+    TOKEN_SENDER_IP = 422,         // "sender-ip"
+    TOKEN_SENDER_PORT = 423,       // "sender-port"
+    TOKEN_MAX_QUEUE_SIZE = 424,    // "max-queue-size"
+    TOKEN_NCR_PROTOCOL = 425,      // "ncr-protocol"
+    TOKEN_NCR_FORMAT = 426,        // "ncr-format"
+    TOKEN_OVERRIDE_NO_UPDATE = 427, // "override-no-update"
+    TOKEN_OVERRIDE_CLIENT_UPDATE = 428, // "override-client-update"
+    TOKEN_REPLACE_CLIENT_NAME = 429, // "replace-client-name"
+    TOKEN_GENERATED_PREFIX = 430,  // "generated-prefix"
+    TOKEN_UDP = 431,               // "UDP"
+    TOKEN_TCP = 432,               // "TCP"
+    TOKEN_JSON = 433,              // "JSON"
+    TOKEN_WHEN_PRESENT = 434,      // "when-present"
+    TOKEN_NEVER = 435,             // "never"
+    TOKEN_ALWAYS = 436,            // "always"
+    TOKEN_WHEN_NOT_PRESENT = 437,  // "when-not-present"
+    TOKEN_HOSTNAME_CHAR_SET = 438, // "hostname-char-set"
+    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 439, // "hostname-char-replacement"
+    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 440, // "early-global-reservations-lookup"
+    TOKEN_IP_RESERVATIONS_UNIQUE = 441, // "ip-reservations-unique"
+    TOKEN_RESERVATIONS_LOOKUP_FIRST = 442, // "reservations-lookup-first"
+    TOKEN_LOGGERS = 443,           // "loggers"
+    TOKEN_OUTPUT_OPTIONS = 444,    // "output_options"
+    TOKEN_OUTPUT = 445,            // "output"
+    TOKEN_DEBUGLEVEL = 446,        // "debuglevel"
+    TOKEN_SEVERITY = 447,          // "severity"
+    TOKEN_FLUSH = 448,             // "flush"
+    TOKEN_MAXSIZE = 449,           // "maxsize"
+    TOKEN_MAXVER = 450,            // "maxver"
+    TOKEN_PATTERN = 451,           // "pattern"
+    TOKEN_COMPATIBILITY = 452,     // "compatibility"
+    TOKEN_LENIENT_OPTION_PARSING = 453, // "lenient-option-parsing"
+    TOKEN_TOPLEVEL_JSON = 454,     // TOPLEVEL_JSON
+    TOKEN_TOPLEVEL_DHCP6 = 455,    // TOPLEVEL_DHCP6
+    TOKEN_SUB_DHCP6 = 456,         // SUB_DHCP6
+    TOKEN_SUB_INTERFACES6 = 457,   // SUB_INTERFACES6
+    TOKEN_SUB_SUBNET6 = 458,       // SUB_SUBNET6
+    TOKEN_SUB_POOL6 = 459,         // SUB_POOL6
+    TOKEN_SUB_PD_POOL = 460,       // SUB_PD_POOL
+    TOKEN_SUB_RESERVATION = 461,   // SUB_RESERVATION
+    TOKEN_SUB_OPTION_DEFS = 462,   // SUB_OPTION_DEFS
+    TOKEN_SUB_OPTION_DEF = 463,    // SUB_OPTION_DEF
+    TOKEN_SUB_OPTION_DATA = 464,   // SUB_OPTION_DATA
+    TOKEN_SUB_HOOKS_LIBRARY = 465, // SUB_HOOKS_LIBRARY
+    TOKEN_SUB_DHCP_DDNS = 466,     // SUB_DHCP_DDNS
+    TOKEN_SUB_CONFIG_CONTROL = 467, // SUB_CONFIG_CONTROL
+    TOKEN_STRING = 468,            // "constant string"
+    TOKEN_INTEGER = 469,           // "integer"
+    TOKEN_FLOAT = 470,             // "floating point"
+    TOKEN_BOOLEAN = 471            // "boolean"
       };
       /// Backward compatibility alias (Bison 3.6).
       typedef token_kind_type yytokentype;
@@ -725,7 +728,7 @@ namespace isc { namespace dhcp {
     {
       enum symbol_kind_type
       {
-        YYNTOKENS = 214, ///< Number of tokens.
+        YYNTOKENS = 217, ///< Number of tokens.
         S_YYEMPTY = -2,
         S_YYEOF = 0,                             // "end of file"
         S_YYerror = 1,                           // error
@@ -763,626 +766,632 @@ namespace isc { namespace dhcp {
         S_LFC_INTERVAL = 33,                     // "lfc-interval"
         S_READONLY = 34,                         // "readonly"
         S_CONNECT_TIMEOUT = 35,                  // "connect-timeout"
-        S_MAX_RECONNECT_TRIES = 36,              // "max-reconnect-tries"
-        S_RECONNECT_WAIT_TIME = 37,              // "reconnect-wait-time"
-        S_ON_FAIL = 38,                          // "on-fail"
-        S_STOP_RETRY_EXIT = 39,                  // "stop-retry-exit"
-        S_SERVE_RETRY_EXIT = 40,                 // "serve-retry-exit"
-        S_SERVE_RETRY_CONTINUE = 41,             // "serve-retry-continue"
-        S_MAX_ROW_ERRORS = 42,                   // "max-row-errors"
-        S_TRUST_ANCHOR = 43,                     // "trust-anchor"
-        S_CERT_FILE = 44,                        // "cert-file"
-        S_KEY_FILE = 45,                         // "key-file"
-        S_CIPHER_LIST = 46,                      // "cipher-list"
-        S_PREFERRED_LIFETIME = 47,               // "preferred-lifetime"
-        S_MIN_PREFERRED_LIFETIME = 48,           // "min-preferred-lifetime"
-        S_MAX_PREFERRED_LIFETIME = 49,           // "max-preferred-lifetime"
-        S_VALID_LIFETIME = 50,                   // "valid-lifetime"
-        S_MIN_VALID_LIFETIME = 51,               // "min-valid-lifetime"
-        S_MAX_VALID_LIFETIME = 52,               // "max-valid-lifetime"
-        S_RENEW_TIMER = 53,                      // "renew-timer"
-        S_REBIND_TIMER = 54,                     // "rebind-timer"
-        S_CALCULATE_TEE_TIMES = 55,              // "calculate-tee-times"
-        S_T1_PERCENT = 56,                       // "t1-percent"
-        S_T2_PERCENT = 57,                       // "t2-percent"
-        S_CACHE_THRESHOLD = 58,                  // "cache-threshold"
-        S_CACHE_MAX_AGE = 59,                    // "cache-max-age"
-        S_DECLINE_PROBATION_PERIOD = 60,         // "decline-probation-period"
-        S_SERVER_TAG = 61,                       // "server-tag"
-        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 62,   // "statistic-default-sample-count"
-        S_STATISTIC_DEFAULT_SAMPLE_AGE = 63,     // "statistic-default-sample-age"
-        S_DDNS_SEND_UPDATES = 64,                // "ddns-send-updates"
-        S_DDNS_OVERRIDE_NO_UPDATE = 65,          // "ddns-override-no-update"
-        S_DDNS_OVERRIDE_CLIENT_UPDATE = 66,      // "ddns-override-client-update"
-        S_DDNS_REPLACE_CLIENT_NAME = 67,         // "ddns-replace-client-name"
-        S_DDNS_GENERATED_PREFIX = 68,            // "ddns-generated-prefix"
-        S_DDNS_QUALIFYING_SUFFIX = 69,           // "ddns-qualifying-suffix"
-        S_DDNS_UPDATE_ON_RENEW = 70,             // "ddns-update-on-renew"
-        S_DDNS_USE_CONFLICT_RESOLUTION = 71,     // "ddns-use-conflict-resolution"
-        S_STORE_EXTENDED_INFO = 72,              // "store-extended-info"
-        S_SUBNET6 = 73,                          // "subnet6"
-        S_OPTION_DEF = 74,                       // "option-def"
-        S_OPTION_DATA = 75,                      // "option-data"
-        S_NAME = 76,                             // "name"
-        S_DATA = 77,                             // "data"
-        S_CODE = 78,                             // "code"
-        S_SPACE = 79,                            // "space"
-        S_CSV_FORMAT = 80,                       // "csv-format"
-        S_ALWAYS_SEND = 81,                      // "always-send"
-        S_RECORD_TYPES = 82,                     // "record-types"
-        S_ENCAPSULATE = 83,                      // "encapsulate"
-        S_ARRAY = 84,                            // "array"
-        S_PARKED_PACKET_LIMIT = 85,              // "parked-packet-limit"
-        S_SHARED_NETWORKS = 86,                  // "shared-networks"
-        S_POOLS = 87,                            // "pools"
-        S_POOL = 88,                             // "pool"
-        S_PD_POOLS = 89,                         // "pd-pools"
-        S_PREFIX = 90,                           // "prefix"
-        S_PREFIX_LEN = 91,                       // "prefix-len"
-        S_EXCLUDED_PREFIX = 92,                  // "excluded-prefix"
-        S_EXCLUDED_PREFIX_LEN = 93,              // "excluded-prefix-len"
-        S_DELEGATED_LEN = 94,                    // "delegated-len"
-        S_USER_CONTEXT = 95,                     // "user-context"
-        S_COMMENT = 96,                          // "comment"
-        S_SUBNET = 97,                           // "subnet"
-        S_INTERFACE = 98,                        // "interface"
-        S_INTERFACE_ID = 99,                     // "interface-id"
-        S_ID = 100,                              // "id"
-        S_RAPID_COMMIT = 101,                    // "rapid-commit"
-        S_RESERVATION_MODE = 102,                // "reservation-mode"
-        S_DISABLED = 103,                        // "disabled"
-        S_OUT_OF_POOL = 104,                     // "out-of-pool"
-        S_GLOBAL = 105,                          // "global"
-        S_ALL = 106,                             // "all"
-        S_RESERVATIONS_GLOBAL = 107,             // "reservations-global"
-        S_RESERVATIONS_IN_SUBNET = 108,          // "reservations-in-subnet"
-        S_RESERVATIONS_OUT_OF_POOL = 109,        // "reservations-out-of-pool"
-        S_MAC_SOURCES = 110,                     // "mac-sources"
-        S_RELAY_SUPPLIED_OPTIONS = 111,          // "relay-supplied-options"
-        S_HOST_RESERVATION_IDENTIFIERS = 112,    // "host-reservation-identifiers"
-        S_SANITY_CHECKS = 113,                   // "sanity-checks"
-        S_LEASE_CHECKS = 114,                    // "lease-checks"
-        S_CLIENT_CLASSES = 115,                  // "client-classes"
-        S_REQUIRE_CLIENT_CLASSES = 116,          // "require-client-classes"
-        S_TEST = 117,                            // "test"
-        S_ONLY_IF_REQUIRED = 118,                // "only-if-required"
-        S_CLIENT_CLASS = 119,                    // "client-class"
-        S_RESERVATIONS = 120,                    // "reservations"
-        S_IP_ADDRESSES = 121,                    // "ip-addresses"
-        S_PREFIXES = 122,                        // "prefixes"
-        S_DUID = 123,                            // "duid"
-        S_HW_ADDRESS = 124,                      // "hw-address"
-        S_HOSTNAME = 125,                        // "hostname"
-        S_FLEX_ID = 126,                         // "flex-id"
-        S_RELAY = 127,                           // "relay"
-        S_IP_ADDRESS = 128,                      // "ip-address"
-        S_HOOKS_LIBRARIES = 129,                 // "hooks-libraries"
-        S_LIBRARY = 130,                         // "library"
-        S_PARAMETERS = 131,                      // "parameters"
-        S_EXPIRED_LEASES_PROCESSING = 132,       // "expired-leases-processing"
-        S_RECLAIM_TIMER_WAIT_TIME = 133,         // "reclaim-timer-wait-time"
-        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 134, // "flush-reclaimed-timer-wait-time"
-        S_HOLD_RECLAIMED_TIME = 135,             // "hold-reclaimed-time"
-        S_MAX_RECLAIM_LEASES = 136,              // "max-reclaim-leases"
-        S_MAX_RECLAIM_TIME = 137,                // "max-reclaim-time"
-        S_UNWARNED_RECLAIM_CYCLES = 138,         // "unwarned-reclaim-cycles"
-        S_SERVER_ID = 139,                       // "server-id"
-        S_LLT = 140,                             // "LLT"
-        S_EN = 141,                              // "EN"
-        S_LL = 142,                              // "LL"
-        S_IDENTIFIER = 143,                      // "identifier"
-        S_HTYPE = 144,                           // "htype"
-        S_TIME = 145,                            // "time"
-        S_ENTERPRISE_ID = 146,                   // "enterprise-id"
-        S_DHCP4O6_PORT = 147,                    // "dhcp4o6-port"
-        S_DHCP_MULTI_THREADING = 148,            // "multi-threading"
-        S_ENABLE_MULTI_THREADING = 149,          // "enable-multi-threading"
-        S_THREAD_POOL_SIZE = 150,                // "thread-pool-size"
-        S_PACKET_QUEUE_SIZE = 151,               // "packet-queue-size"
-        S_CONTROL_SOCKET = 152,                  // "control-socket"
-        S_SOCKET_TYPE = 153,                     // "socket-type"
-        S_SOCKET_NAME = 154,                     // "socket-name"
-        S_DHCP_QUEUE_CONTROL = 155,              // "dhcp-queue-control"
-        S_ENABLE_QUEUE = 156,                    // "enable-queue"
-        S_QUEUE_TYPE = 157,                      // "queue-type"
-        S_CAPACITY = 158,                        // "capacity"
-        S_DHCP_DDNS = 159,                       // "dhcp-ddns"
-        S_ENABLE_UPDATES = 160,                  // "enable-updates"
-        S_QUALIFYING_SUFFIX = 161,               // "qualifying-suffix"
-        S_SERVER_IP = 162,                       // "server-ip"
-        S_SERVER_PORT = 163,                     // "server-port"
-        S_SENDER_IP = 164,                       // "sender-ip"
-        S_SENDER_PORT = 165,                     // "sender-port"
-        S_MAX_QUEUE_SIZE = 166,                  // "max-queue-size"
-        S_NCR_PROTOCOL = 167,                    // "ncr-protocol"
-        S_NCR_FORMAT = 168,                      // "ncr-format"
-        S_OVERRIDE_NO_UPDATE = 169,              // "override-no-update"
-        S_OVERRIDE_CLIENT_UPDATE = 170,          // "override-client-update"
-        S_REPLACE_CLIENT_NAME = 171,             // "replace-client-name"
-        S_GENERATED_PREFIX = 172,                // "generated-prefix"
-        S_UDP = 173,                             // "UDP"
-        S_TCP = 174,                             // "TCP"
-        S_JSON = 175,                            // "JSON"
-        S_WHEN_PRESENT = 176,                    // "when-present"
-        S_NEVER = 177,                           // "never"
-        S_ALWAYS = 178,                          // "always"
-        S_WHEN_NOT_PRESENT = 179,                // "when-not-present"
-        S_HOSTNAME_CHAR_SET = 180,               // "hostname-char-set"
-        S_HOSTNAME_CHAR_REPLACEMENT = 181,       // "hostname-char-replacement"
-        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 182, // "early-global-reservations-lookup"
-        S_IP_RESERVATIONS_UNIQUE = 183,          // "ip-reservations-unique"
-        S_RESERVATIONS_LOOKUP_FIRST = 184,       // "reservations-lookup-first"
-        S_LOGGERS = 185,                         // "loggers"
-        S_OUTPUT_OPTIONS = 186,                  // "output_options"
-        S_OUTPUT = 187,                          // "output"
-        S_DEBUGLEVEL = 188,                      // "debuglevel"
-        S_SEVERITY = 189,                        // "severity"
-        S_FLUSH = 190,                           // "flush"
-        S_MAXSIZE = 191,                         // "maxsize"
-        S_MAXVER = 192,                          // "maxver"
-        S_PATTERN = 193,                         // "pattern"
-        S_COMPATIBILITY = 194,                   // "compatibility"
-        S_LENIENT_OPTION_PARSING = 195,          // "lenient-option-parsing"
-        S_TOPLEVEL_JSON = 196,                   // TOPLEVEL_JSON
-        S_TOPLEVEL_DHCP6 = 197,                  // TOPLEVEL_DHCP6
-        S_SUB_DHCP6 = 198,                       // SUB_DHCP6
-        S_SUB_INTERFACES6 = 199,                 // SUB_INTERFACES6
-        S_SUB_SUBNET6 = 200,                     // SUB_SUBNET6
-        S_SUB_POOL6 = 201,                       // SUB_POOL6
-        S_SUB_PD_POOL = 202,                     // SUB_PD_POOL
-        S_SUB_RESERVATION = 203,                 // SUB_RESERVATION
-        S_SUB_OPTION_DEFS = 204,                 // SUB_OPTION_DEFS
-        S_SUB_OPTION_DEF = 205,                  // SUB_OPTION_DEF
-        S_SUB_OPTION_DATA = 206,                 // SUB_OPTION_DATA
-        S_SUB_HOOKS_LIBRARY = 207,               // SUB_HOOKS_LIBRARY
-        S_SUB_DHCP_DDNS = 208,                   // SUB_DHCP_DDNS
-        S_SUB_CONFIG_CONTROL = 209,              // SUB_CONFIG_CONTROL
-        S_STRING = 210,                          // "constant string"
-        S_INTEGER = 211,                         // "integer"
-        S_FLOAT = 212,                           // "floating point"
-        S_BOOLEAN = 213,                         // "boolean"
-        S_YYACCEPT = 214,                        // $accept
-        S_start = 215,                           // start
-        S_216_1 = 216,                           // $@1
-        S_217_2 = 217,                           // $@2
-        S_218_3 = 218,                           // $@3
-        S_219_4 = 219,                           // $@4
-        S_220_5 = 220,                           // $@5
-        S_221_6 = 221,                           // $@6
-        S_222_7 = 222,                           // $@7
-        S_223_8 = 223,                           // $@8
-        S_224_9 = 224,                           // $@9
-        S_225_10 = 225,                          // $@10
-        S_226_11 = 226,                          // $@11
-        S_227_12 = 227,                          // $@12
-        S_228_13 = 228,                          // $@13
-        S_229_14 = 229,                          // $@14
-        S_value = 230,                           // value
-        S_sub_json = 231,                        // sub_json
-        S_map2 = 232,                            // map2
-        S_233_15 = 233,                          // $@15
-        S_map_value = 234,                       // map_value
-        S_map_content = 235,                     // map_content
-        S_not_empty_map = 236,                   // not_empty_map
-        S_list_generic = 237,                    // list_generic
-        S_238_16 = 238,                          // $@16
-        S_list_content = 239,                    // list_content
-        S_not_empty_list = 240,                  // not_empty_list
-        S_list_strings = 241,                    // list_strings
-        S_242_17 = 242,                          // $@17
-        S_list_strings_content = 243,            // list_strings_content
-        S_not_empty_list_strings = 244,          // not_empty_list_strings
-        S_unknown_map_entry = 245,               // unknown_map_entry
-        S_syntax_map = 246,                      // syntax_map
-        S_247_18 = 247,                          // $@18
-        S_global_object = 248,                   // global_object
-        S_249_19 = 249,                          // $@19
-        S_global_object_comma = 250,             // global_object_comma
-        S_sub_dhcp6 = 251,                       // sub_dhcp6
-        S_252_20 = 252,                          // $@20
-        S_global_params = 253,                   // global_params
-        S_global_param = 254,                    // global_param
-        S_data_directory = 255,                  // data_directory
-        S_256_21 = 256,                          // $@21
-        S_preferred_lifetime = 257,              // preferred_lifetime
-        S_min_preferred_lifetime = 258,          // min_preferred_lifetime
-        S_max_preferred_lifetime = 259,          // max_preferred_lifetime
-        S_valid_lifetime = 260,                  // valid_lifetime
-        S_min_valid_lifetime = 261,              // min_valid_lifetime
-        S_max_valid_lifetime = 262,              // max_valid_lifetime
-        S_renew_timer = 263,                     // renew_timer
-        S_rebind_timer = 264,                    // rebind_timer
-        S_calculate_tee_times = 265,             // calculate_tee_times
-        S_t1_percent = 266,                      // t1_percent
-        S_t2_percent = 267,                      // t2_percent
-        S_cache_threshold = 268,                 // cache_threshold
-        S_cache_max_age = 269,                   // cache_max_age
-        S_decline_probation_period = 270,        // decline_probation_period
-        S_ddns_send_updates = 271,               // ddns_send_updates
-        S_ddns_override_no_update = 272,         // ddns_override_no_update
-        S_ddns_override_client_update = 273,     // ddns_override_client_update
-        S_ddns_replace_client_name = 274,        // ddns_replace_client_name
-        S_275_22 = 275,                          // $@22
-        S_ddns_replace_client_name_value = 276,  // ddns_replace_client_name_value
-        S_ddns_generated_prefix = 277,           // ddns_generated_prefix
-        S_278_23 = 278,                          // $@23
-        S_ddns_qualifying_suffix = 279,          // ddns_qualifying_suffix
-        S_280_24 = 280,                          // $@24
-        S_ddns_update_on_renew = 281,            // ddns_update_on_renew
-        S_ddns_use_conflict_resolution = 282,    // ddns_use_conflict_resolution
-        S_hostname_char_set = 283,               // hostname_char_set
-        S_284_25 = 284,                          // $@25
-        S_hostname_char_replacement = 285,       // hostname_char_replacement
-        S_286_26 = 286,                          // $@26
-        S_store_extended_info = 287,             // store_extended_info
-        S_statistic_default_sample_count = 288,  // statistic_default_sample_count
-        S_statistic_default_sample_age = 289,    // statistic_default_sample_age
-        S_server_tag = 290,                      // server_tag
-        S_291_27 = 291,                          // $@27
-        S_parked_packet_limit = 292,             // parked_packet_limit
-        S_early_global_reservations_lookup = 293, // early_global_reservations_lookup
-        S_ip_reservations_unique = 294,          // ip_reservations_unique
-        S_reservations_lookup_first = 295,       // reservations_lookup_first
-        S_interfaces_config = 296,               // interfaces_config
-        S_297_28 = 297,                          // $@28
-        S_sub_interfaces6 = 298,                 // sub_interfaces6
-        S_299_29 = 299,                          // $@29
-        S_interfaces_config_params = 300,        // interfaces_config_params
-        S_interfaces_config_param = 301,         // interfaces_config_param
-        S_interfaces_list = 302,                 // interfaces_list
-        S_303_30 = 303,                          // $@30
-        S_re_detect = 304,                       // re_detect
-        S_service_sockets_require_all = 305,     // service_sockets_require_all
-        S_service_sockets_retry_wait_time = 306, // service_sockets_retry_wait_time
-        S_service_sockets_max_retries = 307,     // service_sockets_max_retries
-        S_lease_database = 308,                  // lease_database
-        S_309_31 = 309,                          // $@31
-        S_hosts_database = 310,                  // hosts_database
-        S_311_32 = 311,                          // $@32
-        S_hosts_databases = 312,                 // hosts_databases
-        S_313_33 = 313,                          // $@33
-        S_database_list = 314,                   // database_list
-        S_not_empty_database_list = 315,         // not_empty_database_list
-        S_database = 316,                        // database
-        S_317_34 = 317,                          // $@34
-        S_database_map_params = 318,             // database_map_params
-        S_database_map_param = 319,              // database_map_param
-        S_database_type = 320,                   // database_type
-        S_321_35 = 321,                          // $@35
-        S_db_type = 322,                         // db_type
-        S_user = 323,                            // user
-        S_324_36 = 324,                          // $@36
-        S_password = 325,                        // password
-        S_326_37 = 326,                          // $@37
-        S_host = 327,                            // host
-        S_328_38 = 328,                          // $@38
-        S_port = 329,                            // port
-        S_name = 330,                            // name
-        S_331_39 = 331,                          // $@39
-        S_persist = 332,                         // persist
-        S_lfc_interval = 333,                    // lfc_interval
-        S_readonly = 334,                        // readonly
-        S_connect_timeout = 335,                 // connect_timeout
-        S_reconnect_wait_time = 336,             // reconnect_wait_time
-        S_on_fail = 337,                         // on_fail
-        S_338_40 = 338,                          // $@40
-        S_on_fail_mode = 339,                    // on_fail_mode
-        S_max_row_errors = 340,                  // max_row_errors
-        S_max_reconnect_tries = 341,             // max_reconnect_tries
-        S_trust_anchor = 342,                    // trust_anchor
-        S_343_41 = 343,                          // $@41
-        S_cert_file = 344,                       // cert_file
-        S_345_42 = 345,                          // $@42
-        S_key_file = 346,                        // key_file
-        S_347_43 = 347,                          // $@43
-        S_cipher_list = 348,                     // cipher_list
-        S_349_44 = 349,                          // $@44
-        S_sanity_checks = 350,                   // sanity_checks
-        S_351_45 = 351,                          // $@45
-        S_sanity_checks_params = 352,            // sanity_checks_params
-        S_sanity_checks_param = 353,             // sanity_checks_param
-        S_lease_checks = 354,                    // lease_checks
-        S_355_46 = 355,                          // $@46
-        S_mac_sources = 356,                     // mac_sources
-        S_357_47 = 357,                          // $@47
-        S_mac_sources_list = 358,                // mac_sources_list
-        S_mac_sources_value = 359,               // mac_sources_value
-        S_duid_id = 360,                         // duid_id
-        S_string_id = 361,                       // string_id
-        S_host_reservation_identifiers = 362,    // host_reservation_identifiers
-        S_363_48 = 363,                          // $@48
-        S_host_reservation_identifiers_list = 364, // host_reservation_identifiers_list
-        S_host_reservation_identifier = 365,     // host_reservation_identifier
-        S_hw_address_id = 366,                   // hw_address_id
-        S_flex_id = 367,                         // flex_id
-        S_relay_supplied_options = 368,          // relay_supplied_options
-        S_369_49 = 369,                          // $@49
-        S_dhcp_multi_threading = 370,            // dhcp_multi_threading
-        S_371_50 = 371,                          // $@50
-        S_multi_threading_params = 372,          // multi_threading_params
-        S_multi_threading_param = 373,           // multi_threading_param
-        S_enable_multi_threading = 374,          // enable_multi_threading
-        S_thread_pool_size = 375,                // thread_pool_size
-        S_packet_queue_size = 376,               // packet_queue_size
-        S_hooks_libraries = 377,                 // hooks_libraries
-        S_378_51 = 378,                          // $@51
-        S_hooks_libraries_list = 379,            // hooks_libraries_list
-        S_not_empty_hooks_libraries_list = 380,  // not_empty_hooks_libraries_list
-        S_hooks_library = 381,                   // hooks_library
-        S_382_52 = 382,                          // $@52
-        S_sub_hooks_library = 383,               // sub_hooks_library
-        S_384_53 = 384,                          // $@53
-        S_hooks_params = 385,                    // hooks_params
-        S_hooks_param = 386,                     // hooks_param
-        S_library = 387,                         // library
-        S_388_54 = 388,                          // $@54
-        S_parameters = 389,                      // parameters
-        S_390_55 = 390,                          // $@55
-        S_expired_leases_processing = 391,       // expired_leases_processing
-        S_392_56 = 392,                          // $@56
-        S_expired_leases_params = 393,           // expired_leases_params
-        S_expired_leases_param = 394,            // expired_leases_param
-        S_reclaim_timer_wait_time = 395,         // reclaim_timer_wait_time
-        S_flush_reclaimed_timer_wait_time = 396, // flush_reclaimed_timer_wait_time
-        S_hold_reclaimed_time = 397,             // hold_reclaimed_time
-        S_max_reclaim_leases = 398,              // max_reclaim_leases
-        S_max_reclaim_time = 399,                // max_reclaim_time
-        S_unwarned_reclaim_cycles = 400,         // unwarned_reclaim_cycles
-        S_subnet6_list = 401,                    // subnet6_list
-        S_402_57 = 402,                          // $@57
-        S_subnet6_list_content = 403,            // subnet6_list_content
-        S_not_empty_subnet6_list = 404,          // not_empty_subnet6_list
-        S_subnet6 = 405,                         // subnet6
-        S_406_58 = 406,                          // $@58
-        S_sub_subnet6 = 407,                     // sub_subnet6
-        S_408_59 = 408,                          // $@59
-        S_subnet6_params = 409,                  // subnet6_params
-        S_subnet6_param = 410,                   // subnet6_param
-        S_subnet = 411,                          // subnet
-        S_412_60 = 412,                          // $@60
-        S_interface = 413,                       // interface
-        S_414_61 = 414,                          // $@61
-        S_interface_id = 415,                    // interface_id
-        S_416_62 = 416,                          // $@62
-        S_client_class = 417,                    // client_class
-        S_418_63 = 418,                          // $@63
-        S_require_client_classes = 419,          // require_client_classes
-        S_420_64 = 420,                          // $@64
-        S_reservations_global = 421,             // reservations_global
-        S_reservations_in_subnet = 422,          // reservations_in_subnet
-        S_reservations_out_of_pool = 423,        // reservations_out_of_pool
-        S_reservation_mode = 424,                // reservation_mode
-        S_425_65 = 425,                          // $@65
-        S_hr_mode = 426,                         // hr_mode
-        S_id = 427,                              // id
-        S_rapid_commit = 428,                    // rapid_commit
-        S_shared_networks = 429,                 // shared_networks
-        S_430_66 = 430,                          // $@66
-        S_shared_networks_content = 431,         // shared_networks_content
-        S_shared_networks_list = 432,            // shared_networks_list
-        S_shared_network = 433,                  // shared_network
-        S_434_67 = 434,                          // $@67
-        S_shared_network_params = 435,           // shared_network_params
-        S_shared_network_param = 436,            // shared_network_param
-        S_option_def_list = 437,                 // option_def_list
-        S_438_68 = 438,                          // $@68
-        S_sub_option_def_list = 439,             // sub_option_def_list
-        S_440_69 = 440,                          // $@69
-        S_option_def_list_content = 441,         // option_def_list_content
-        S_not_empty_option_def_list = 442,       // not_empty_option_def_list
-        S_option_def_entry = 443,                // option_def_entry
-        S_444_70 = 444,                          // $@70
-        S_sub_option_def = 445,                  // sub_option_def
-        S_446_71 = 446,                          // $@71
-        S_option_def_params = 447,               // option_def_params
-        S_not_empty_option_def_params = 448,     // not_empty_option_def_params
-        S_option_def_param = 449,                // option_def_param
-        S_option_def_name = 450,                 // option_def_name
-        S_code = 451,                            // code
-        S_option_def_code = 452,                 // option_def_code
-        S_option_def_type = 453,                 // option_def_type
-        S_454_72 = 454,                          // $@72
-        S_option_def_record_types = 455,         // option_def_record_types
-        S_456_73 = 456,                          // $@73
-        S_space = 457,                           // space
-        S_458_74 = 458,                          // $@74
-        S_option_def_space = 459,                // option_def_space
-        S_option_def_encapsulate = 460,          // option_def_encapsulate
-        S_461_75 = 461,                          // $@75
-        S_option_def_array = 462,                // option_def_array
-        S_option_data_list = 463,                // option_data_list
-        S_464_76 = 464,                          // $@76
-        S_option_data_list_content = 465,        // option_data_list_content
-        S_not_empty_option_data_list = 466,      // not_empty_option_data_list
-        S_option_data_entry = 467,               // option_data_entry
-        S_468_77 = 468,                          // $@77
-        S_sub_option_data = 469,                 // sub_option_data
-        S_470_78 = 470,                          // $@78
-        S_option_data_params = 471,              // option_data_params
-        S_not_empty_option_data_params = 472,    // not_empty_option_data_params
-        S_option_data_param = 473,               // option_data_param
-        S_option_data_name = 474,                // option_data_name
-        S_option_data_data = 475,                // option_data_data
-        S_476_79 = 476,                          // $@79
-        S_option_data_code = 477,                // option_data_code
-        S_option_data_space = 478,               // option_data_space
-        S_option_data_csv_format = 479,          // option_data_csv_format
-        S_option_data_always_send = 480,         // option_data_always_send
-        S_pools_list = 481,                      // pools_list
-        S_482_80 = 482,                          // $@80
-        S_pools_list_content = 483,              // pools_list_content
-        S_not_empty_pools_list = 484,            // not_empty_pools_list
-        S_pool_list_entry = 485,                 // pool_list_entry
-        S_486_81 = 486,                          // $@81
-        S_sub_pool6 = 487,                       // sub_pool6
-        S_488_82 = 488,                          // $@82
-        S_pool_params = 489,                     // pool_params
-        S_pool_param = 490,                      // pool_param
-        S_pool_entry = 491,                      // pool_entry
-        S_492_83 = 492,                          // $@83
-        S_user_context = 493,                    // user_context
-        S_494_84 = 494,                          // $@84
-        S_comment = 495,                         // comment
-        S_496_85 = 496,                          // $@85
-        S_pd_pools_list = 497,                   // pd_pools_list
-        S_498_86 = 498,                          // $@86
-        S_pd_pools_list_content = 499,           // pd_pools_list_content
-        S_not_empty_pd_pools_list = 500,         // not_empty_pd_pools_list
-        S_pd_pool_entry = 501,                   // pd_pool_entry
-        S_502_87 = 502,                          // $@87
-        S_sub_pd_pool = 503,                     // sub_pd_pool
-        S_504_88 = 504,                          // $@88
-        S_pd_pool_params = 505,                  // pd_pool_params
-        S_pd_pool_param = 506,                   // pd_pool_param
-        S_pd_prefix = 507,                       // pd_prefix
-        S_508_89 = 508,                          // $@89
-        S_pd_prefix_len = 509,                   // pd_prefix_len
-        S_excluded_prefix = 510,                 // excluded_prefix
-        S_511_90 = 511,                          // $@90
-        S_excluded_prefix_len = 512,             // excluded_prefix_len
-        S_pd_delegated_len = 513,                // pd_delegated_len
-        S_reservations = 514,                    // reservations
-        S_515_91 = 515,                          // $@91
-        S_reservations_list = 516,               // reservations_list
-        S_not_empty_reservations_list = 517,     // not_empty_reservations_list
-        S_reservation = 518,                     // reservation
-        S_519_92 = 519,                          // $@92
-        S_sub_reservation = 520,                 // sub_reservation
-        S_521_93 = 521,                          // $@93
-        S_reservation_params = 522,              // reservation_params
-        S_not_empty_reservation_params = 523,    // not_empty_reservation_params
-        S_reservation_param = 524,               // reservation_param
-        S_ip_addresses = 525,                    // ip_addresses
-        S_526_94 = 526,                          // $@94
-        S_prefixes = 527,                        // prefixes
-        S_528_95 = 528,                          // $@95
-        S_duid = 529,                            // duid
-        S_530_96 = 530,                          // $@96
-        S_hw_address = 531,                      // hw_address
-        S_532_97 = 532,                          // $@97
-        S_hostname = 533,                        // hostname
-        S_534_98 = 534,                          // $@98
-        S_flex_id_value = 535,                   // flex_id_value
-        S_536_99 = 536,                          // $@99
-        S_reservation_client_classes = 537,      // reservation_client_classes
-        S_538_100 = 538,                         // $@100
-        S_relay = 539,                           // relay
-        S_540_101 = 540,                         // $@101
-        S_relay_map = 541,                       // relay_map
-        S_ip_address = 542,                      // ip_address
-        S_543_102 = 543,                         // $@102
-        S_client_classes = 544,                  // client_classes
-        S_545_103 = 545,                         // $@103
-        S_client_classes_list = 546,             // client_classes_list
-        S_client_class_entry = 547,              // client_class_entry
-        S_548_104 = 548,                         // $@104
-        S_client_class_params = 549,             // client_class_params
-        S_not_empty_client_class_params = 550,   // not_empty_client_class_params
-        S_client_class_param = 551,              // client_class_param
-        S_client_class_name = 552,               // client_class_name
-        S_client_class_test = 553,               // client_class_test
-        S_554_105 = 554,                         // $@105
-        S_only_if_required = 555,                // only_if_required
-        S_server_id = 556,                       // server_id
-        S_557_106 = 557,                         // $@106
-        S_server_id_params = 558,                // server_id_params
-        S_server_id_param = 559,                 // server_id_param
-        S_server_id_type = 560,                  // server_id_type
-        S_561_107 = 561,                         // $@107
-        S_duid_type = 562,                       // duid_type
-        S_htype = 563,                           // htype
-        S_identifier = 564,                      // identifier
-        S_565_108 = 565,                         // $@108
-        S_time = 566,                            // time
-        S_enterprise_id = 567,                   // enterprise_id
-        S_dhcp4o6_port = 568,                    // dhcp4o6_port
-        S_control_socket = 569,                  // control_socket
-        S_570_109 = 570,                         // $@109
-        S_control_socket_params = 571,           // control_socket_params
-        S_control_socket_param = 572,            // control_socket_param
-        S_socket_type = 573,                     // socket_type
-        S_574_110 = 574,                         // $@110
-        S_socket_name = 575,                     // socket_name
-        S_576_111 = 576,                         // $@111
-        S_dhcp_queue_control = 577,              // dhcp_queue_control
-        S_578_112 = 578,                         // $@112
-        S_queue_control_params = 579,            // queue_control_params
-        S_queue_control_param = 580,             // queue_control_param
-        S_enable_queue = 581,                    // enable_queue
-        S_queue_type = 582,                      // queue_type
-        S_583_113 = 583,                         // $@113
-        S_capacity = 584,                        // capacity
-        S_arbitrary_map_entry = 585,             // arbitrary_map_entry
-        S_586_114 = 586,                         // $@114
-        S_dhcp_ddns = 587,                       // dhcp_ddns
-        S_588_115 = 588,                         // $@115
-        S_sub_dhcp_ddns = 589,                   // sub_dhcp_ddns
-        S_590_116 = 590,                         // $@116
-        S_dhcp_ddns_params = 591,                // dhcp_ddns_params
-        S_dhcp_ddns_param = 592,                 // dhcp_ddns_param
-        S_enable_updates = 593,                  // enable_updates
-        S_dep_qualifying_suffix = 594,           // dep_qualifying_suffix
-        S_595_117 = 595,                         // $@117
-        S_server_ip = 596,                       // server_ip
-        S_597_118 = 597,                         // $@118
-        S_server_port = 598,                     // server_port
-        S_sender_ip = 599,                       // sender_ip
-        S_600_119 = 600,                         // $@119
-        S_sender_port = 601,                     // sender_port
-        S_max_queue_size = 602,                  // max_queue_size
-        S_ncr_protocol = 603,                    // ncr_protocol
-        S_604_120 = 604,                         // $@120
-        S_ncr_protocol_value = 605,              // ncr_protocol_value
-        S_ncr_format = 606,                      // ncr_format
-        S_607_121 = 607,                         // $@121
-        S_dep_override_no_update = 608,          // dep_override_no_update
-        S_dep_override_client_update = 609,      // dep_override_client_update
-        S_dep_replace_client_name = 610,         // dep_replace_client_name
-        S_611_122 = 611,                         // $@122
-        S_dep_generated_prefix = 612,            // dep_generated_prefix
-        S_613_123 = 613,                         // $@123
-        S_dep_hostname_char_set = 614,           // dep_hostname_char_set
-        S_615_124 = 615,                         // $@124
-        S_dep_hostname_char_replacement = 616,   // dep_hostname_char_replacement
-        S_617_125 = 617,                         // $@125
-        S_config_control = 618,                  // config_control
-        S_619_126 = 619,                         // $@126
-        S_sub_config_control = 620,              // sub_config_control
-        S_621_127 = 621,                         // $@127
-        S_config_control_params = 622,           // config_control_params
-        S_config_control_param = 623,            // config_control_param
-        S_config_databases = 624,                // config_databases
-        S_625_128 = 625,                         // $@128
-        S_config_fetch_wait_time = 626,          // config_fetch_wait_time
-        S_loggers = 627,                         // loggers
-        S_628_129 = 628,                         // $@129
-        S_loggers_entries = 629,                 // loggers_entries
-        S_logger_entry = 630,                    // logger_entry
-        S_631_130 = 631,                         // $@130
-        S_logger_params = 632,                   // logger_params
-        S_logger_param = 633,                    // logger_param
-        S_debuglevel = 634,                      // debuglevel
-        S_severity = 635,                        // severity
-        S_636_131 = 636,                         // $@131
-        S_output_options_list = 637,             // output_options_list
-        S_638_132 = 638,                         // $@132
-        S_output_options_list_content = 639,     // output_options_list_content
-        S_output_entry = 640,                    // output_entry
-        S_641_133 = 641,                         // $@133
-        S_output_params_list = 642,              // output_params_list
-        S_output_params = 643,                   // output_params
-        S_output = 644,                          // output
-        S_645_134 = 645,                         // $@134
-        S_flush = 646,                           // flush
-        S_maxsize = 647,                         // maxsize
-        S_maxver = 648,                          // maxver
-        S_pattern = 649,                         // pattern
-        S_650_135 = 650,                         // $@135
-        S_compatibility = 651,                   // compatibility
-        S_652_136 = 652,                         // $@136
-        S_compatibility_params = 653,            // compatibility_params
-        S_compatibility_param = 654,             // compatibility_param
-        S_lenient_option_parsing = 655           // lenient_option_parsing
+        S_READ_TIMEOUT = 36,                     // "read-timeout"
+        S_WRITE_TIMEOUT = 37,                    // "write-timeout"
+        S_TCP_USER_TIMEOUT = 38,                 // "tcp-user-timeout"
+        S_MAX_RECONNECT_TRIES = 39,              // "max-reconnect-tries"
+        S_RECONNECT_WAIT_TIME = 40,              // "reconnect-wait-time"
+        S_ON_FAIL = 41,                          // "on-fail"
+        S_STOP_RETRY_EXIT = 42,                  // "stop-retry-exit"
+        S_SERVE_RETRY_EXIT = 43,                 // "serve-retry-exit"
+        S_SERVE_RETRY_CONTINUE = 44,             // "serve-retry-continue"
+        S_MAX_ROW_ERRORS = 45,                   // "max-row-errors"
+        S_TRUST_ANCHOR = 46,                     // "trust-anchor"
+        S_CERT_FILE = 47,                        // "cert-file"
+        S_KEY_FILE = 48,                         // "key-file"
+        S_CIPHER_LIST = 49,                      // "cipher-list"
+        S_PREFERRED_LIFETIME = 50,               // "preferred-lifetime"
+        S_MIN_PREFERRED_LIFETIME = 51,           // "min-preferred-lifetime"
+        S_MAX_PREFERRED_LIFETIME = 52,           // "max-preferred-lifetime"
+        S_VALID_LIFETIME = 53,                   // "valid-lifetime"
+        S_MIN_VALID_LIFETIME = 54,               // "min-valid-lifetime"
+        S_MAX_VALID_LIFETIME = 55,               // "max-valid-lifetime"
+        S_RENEW_TIMER = 56,                      // "renew-timer"
+        S_REBIND_TIMER = 57,                     // "rebind-timer"
+        S_CALCULATE_TEE_TIMES = 58,              // "calculate-tee-times"
+        S_T1_PERCENT = 59,                       // "t1-percent"
+        S_T2_PERCENT = 60,                       // "t2-percent"
+        S_CACHE_THRESHOLD = 61,                  // "cache-threshold"
+        S_CACHE_MAX_AGE = 62,                    // "cache-max-age"
+        S_DECLINE_PROBATION_PERIOD = 63,         // "decline-probation-period"
+        S_SERVER_TAG = 64,                       // "server-tag"
+        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 65,   // "statistic-default-sample-count"
+        S_STATISTIC_DEFAULT_SAMPLE_AGE = 66,     // "statistic-default-sample-age"
+        S_DDNS_SEND_UPDATES = 67,                // "ddns-send-updates"
+        S_DDNS_OVERRIDE_NO_UPDATE = 68,          // "ddns-override-no-update"
+        S_DDNS_OVERRIDE_CLIENT_UPDATE = 69,      // "ddns-override-client-update"
+        S_DDNS_REPLACE_CLIENT_NAME = 70,         // "ddns-replace-client-name"
+        S_DDNS_GENERATED_PREFIX = 71,            // "ddns-generated-prefix"
+        S_DDNS_QUALIFYING_SUFFIX = 72,           // "ddns-qualifying-suffix"
+        S_DDNS_UPDATE_ON_RENEW = 73,             // "ddns-update-on-renew"
+        S_DDNS_USE_CONFLICT_RESOLUTION = 74,     // "ddns-use-conflict-resolution"
+        S_STORE_EXTENDED_INFO = 75,              // "store-extended-info"
+        S_SUBNET6 = 76,                          // "subnet6"
+        S_OPTION_DEF = 77,                       // "option-def"
+        S_OPTION_DATA = 78,                      // "option-data"
+        S_NAME = 79,                             // "name"
+        S_DATA = 80,                             // "data"
+        S_CODE = 81,                             // "code"
+        S_SPACE = 82,                            // "space"
+        S_CSV_FORMAT = 83,                       // "csv-format"
+        S_ALWAYS_SEND = 84,                      // "always-send"
+        S_RECORD_TYPES = 85,                     // "record-types"
+        S_ENCAPSULATE = 86,                      // "encapsulate"
+        S_ARRAY = 87,                            // "array"
+        S_PARKED_PACKET_LIMIT = 88,              // "parked-packet-limit"
+        S_SHARED_NETWORKS = 89,                  // "shared-networks"
+        S_POOLS = 90,                            // "pools"
+        S_POOL = 91,                             // "pool"
+        S_PD_POOLS = 92,                         // "pd-pools"
+        S_PREFIX = 93,                           // "prefix"
+        S_PREFIX_LEN = 94,                       // "prefix-len"
+        S_EXCLUDED_PREFIX = 95,                  // "excluded-prefix"
+        S_EXCLUDED_PREFIX_LEN = 96,              // "excluded-prefix-len"
+        S_DELEGATED_LEN = 97,                    // "delegated-len"
+        S_USER_CONTEXT = 98,                     // "user-context"
+        S_COMMENT = 99,                          // "comment"
+        S_SUBNET = 100,                          // "subnet"
+        S_INTERFACE = 101,                       // "interface"
+        S_INTERFACE_ID = 102,                    // "interface-id"
+        S_ID = 103,                              // "id"
+        S_RAPID_COMMIT = 104,                    // "rapid-commit"
+        S_RESERVATION_MODE = 105,                // "reservation-mode"
+        S_DISABLED = 106,                        // "disabled"
+        S_OUT_OF_POOL = 107,                     // "out-of-pool"
+        S_GLOBAL = 108,                          // "global"
+        S_ALL = 109,                             // "all"
+        S_RESERVATIONS_GLOBAL = 110,             // "reservations-global"
+        S_RESERVATIONS_IN_SUBNET = 111,          // "reservations-in-subnet"
+        S_RESERVATIONS_OUT_OF_POOL = 112,        // "reservations-out-of-pool"
+        S_MAC_SOURCES = 113,                     // "mac-sources"
+        S_RELAY_SUPPLIED_OPTIONS = 114,          // "relay-supplied-options"
+        S_HOST_RESERVATION_IDENTIFIERS = 115,    // "host-reservation-identifiers"
+        S_SANITY_CHECKS = 116,                   // "sanity-checks"
+        S_LEASE_CHECKS = 117,                    // "lease-checks"
+        S_CLIENT_CLASSES = 118,                  // "client-classes"
+        S_REQUIRE_CLIENT_CLASSES = 119,          // "require-client-classes"
+        S_TEST = 120,                            // "test"
+        S_ONLY_IF_REQUIRED = 121,                // "only-if-required"
+        S_CLIENT_CLASS = 122,                    // "client-class"
+        S_RESERVATIONS = 123,                    // "reservations"
+        S_IP_ADDRESSES = 124,                    // "ip-addresses"
+        S_PREFIXES = 125,                        // "prefixes"
+        S_DUID = 126,                            // "duid"
+        S_HW_ADDRESS = 127,                      // "hw-address"
+        S_HOSTNAME = 128,                        // "hostname"
+        S_FLEX_ID = 129,                         // "flex-id"
+        S_RELAY = 130,                           // "relay"
+        S_IP_ADDRESS = 131,                      // "ip-address"
+        S_HOOKS_LIBRARIES = 132,                 // "hooks-libraries"
+        S_LIBRARY = 133,                         // "library"
+        S_PARAMETERS = 134,                      // "parameters"
+        S_EXPIRED_LEASES_PROCESSING = 135,       // "expired-leases-processing"
+        S_RECLAIM_TIMER_WAIT_TIME = 136,         // "reclaim-timer-wait-time"
+        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 137, // "flush-reclaimed-timer-wait-time"
+        S_HOLD_RECLAIMED_TIME = 138,             // "hold-reclaimed-time"
+        S_MAX_RECLAIM_LEASES = 139,              // "max-reclaim-leases"
+        S_MAX_RECLAIM_TIME = 140,                // "max-reclaim-time"
+        S_UNWARNED_RECLAIM_CYCLES = 141,         // "unwarned-reclaim-cycles"
+        S_SERVER_ID = 142,                       // "server-id"
+        S_LLT = 143,                             // "LLT"
+        S_EN = 144,                              // "EN"
+        S_LL = 145,                              // "LL"
+        S_IDENTIFIER = 146,                      // "identifier"
+        S_HTYPE = 147,                           // "htype"
+        S_TIME = 148,                            // "time"
+        S_ENTERPRISE_ID = 149,                   // "enterprise-id"
+        S_DHCP4O6_PORT = 150,                    // "dhcp4o6-port"
+        S_DHCP_MULTI_THREADING = 151,            // "multi-threading"
+        S_ENABLE_MULTI_THREADING = 152,          // "enable-multi-threading"
+        S_THREAD_POOL_SIZE = 153,                // "thread-pool-size"
+        S_PACKET_QUEUE_SIZE = 154,               // "packet-queue-size"
+        S_CONTROL_SOCKET = 155,                  // "control-socket"
+        S_SOCKET_TYPE = 156,                     // "socket-type"
+        S_SOCKET_NAME = 157,                     // "socket-name"
+        S_DHCP_QUEUE_CONTROL = 158,              // "dhcp-queue-control"
+        S_ENABLE_QUEUE = 159,                    // "enable-queue"
+        S_QUEUE_TYPE = 160,                      // "queue-type"
+        S_CAPACITY = 161,                        // "capacity"
+        S_DHCP_DDNS = 162,                       // "dhcp-ddns"
+        S_ENABLE_UPDATES = 163,                  // "enable-updates"
+        S_QUALIFYING_SUFFIX = 164,               // "qualifying-suffix"
+        S_SERVER_IP = 165,                       // "server-ip"
+        S_SERVER_PORT = 166,                     // "server-port"
+        S_SENDER_IP = 167,                       // "sender-ip"
+        S_SENDER_PORT = 168,                     // "sender-port"
+        S_MAX_QUEUE_SIZE = 169,                  // "max-queue-size"
+        S_NCR_PROTOCOL = 170,                    // "ncr-protocol"
+        S_NCR_FORMAT = 171,                      // "ncr-format"
+        S_OVERRIDE_NO_UPDATE = 172,              // "override-no-update"
+        S_OVERRIDE_CLIENT_UPDATE = 173,          // "override-client-update"
+        S_REPLACE_CLIENT_NAME = 174,             // "replace-client-name"
+        S_GENERATED_PREFIX = 175,                // "generated-prefix"
+        S_UDP = 176,                             // "UDP"
+        S_TCP = 177,                             // "TCP"
+        S_JSON = 178,                            // "JSON"
+        S_WHEN_PRESENT = 179,                    // "when-present"
+        S_NEVER = 180,                           // "never"
+        S_ALWAYS = 181,                          // "always"
+        S_WHEN_NOT_PRESENT = 182,                // "when-not-present"
+        S_HOSTNAME_CHAR_SET = 183,               // "hostname-char-set"
+        S_HOSTNAME_CHAR_REPLACEMENT = 184,       // "hostname-char-replacement"
+        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 185, // "early-global-reservations-lookup"
+        S_IP_RESERVATIONS_UNIQUE = 186,          // "ip-reservations-unique"
+        S_RESERVATIONS_LOOKUP_FIRST = 187,       // "reservations-lookup-first"
+        S_LOGGERS = 188,                         // "loggers"
+        S_OUTPUT_OPTIONS = 189,                  // "output_options"
+        S_OUTPUT = 190,                          // "output"
+        S_DEBUGLEVEL = 191,                      // "debuglevel"
+        S_SEVERITY = 192,                        // "severity"
+        S_FLUSH = 193,                           // "flush"
+        S_MAXSIZE = 194,                         // "maxsize"
+        S_MAXVER = 195,                          // "maxver"
+        S_PATTERN = 196,                         // "pattern"
+        S_COMPATIBILITY = 197,                   // "compatibility"
+        S_LENIENT_OPTION_PARSING = 198,          // "lenient-option-parsing"
+        S_TOPLEVEL_JSON = 199,                   // TOPLEVEL_JSON
+        S_TOPLEVEL_DHCP6 = 200,                  // TOPLEVEL_DHCP6
+        S_SUB_DHCP6 = 201,                       // SUB_DHCP6
+        S_SUB_INTERFACES6 = 202,                 // SUB_INTERFACES6
+        S_SUB_SUBNET6 = 203,                     // SUB_SUBNET6
+        S_SUB_POOL6 = 204,                       // SUB_POOL6
+        S_SUB_PD_POOL = 205,                     // SUB_PD_POOL
+        S_SUB_RESERVATION = 206,                 // SUB_RESERVATION
+        S_SUB_OPTION_DEFS = 207,                 // SUB_OPTION_DEFS
+        S_SUB_OPTION_DEF = 208,                  // SUB_OPTION_DEF
+        S_SUB_OPTION_DATA = 209,                 // SUB_OPTION_DATA
+        S_SUB_HOOKS_LIBRARY = 210,               // SUB_HOOKS_LIBRARY
+        S_SUB_DHCP_DDNS = 211,                   // SUB_DHCP_DDNS
+        S_SUB_CONFIG_CONTROL = 212,              // SUB_CONFIG_CONTROL
+        S_STRING = 213,                          // "constant string"
+        S_INTEGER = 214,                         // "integer"
+        S_FLOAT = 215,                           // "floating point"
+        S_BOOLEAN = 216,                         // "boolean"
+        S_YYACCEPT = 217,                        // $accept
+        S_start = 218,                           // start
+        S_219_1 = 219,                           // $@1
+        S_220_2 = 220,                           // $@2
+        S_221_3 = 221,                           // $@3
+        S_222_4 = 222,                           // $@4
+        S_223_5 = 223,                           // $@5
+        S_224_6 = 224,                           // $@6
+        S_225_7 = 225,                           // $@7
+        S_226_8 = 226,                           // $@8
+        S_227_9 = 227,                           // $@9
+        S_228_10 = 228,                          // $@10
+        S_229_11 = 229,                          // $@11
+        S_230_12 = 230,                          // $@12
+        S_231_13 = 231,                          // $@13
+        S_232_14 = 232,                          // $@14
+        S_value = 233,                           // value
+        S_sub_json = 234,                        // sub_json
+        S_map2 = 235,                            // map2
+        S_236_15 = 236,                          // $@15
+        S_map_value = 237,                       // map_value
+        S_map_content = 238,                     // map_content
+        S_not_empty_map = 239,                   // not_empty_map
+        S_list_generic = 240,                    // list_generic
+        S_241_16 = 241,                          // $@16
+        S_list_content = 242,                    // list_content
+        S_not_empty_list = 243,                  // not_empty_list
+        S_list_strings = 244,                    // list_strings
+        S_245_17 = 245,                          // $@17
+        S_list_strings_content = 246,            // list_strings_content
+        S_not_empty_list_strings = 247,          // not_empty_list_strings
+        S_unknown_map_entry = 248,               // unknown_map_entry
+        S_syntax_map = 249,                      // syntax_map
+        S_250_18 = 250,                          // $@18
+        S_global_object = 251,                   // global_object
+        S_252_19 = 252,                          // $@19
+        S_global_object_comma = 253,             // global_object_comma
+        S_sub_dhcp6 = 254,                       // sub_dhcp6
+        S_255_20 = 255,                          // $@20
+        S_global_params = 256,                   // global_params
+        S_global_param = 257,                    // global_param
+        S_data_directory = 258,                  // data_directory
+        S_259_21 = 259,                          // $@21
+        S_preferred_lifetime = 260,              // preferred_lifetime
+        S_min_preferred_lifetime = 261,          // min_preferred_lifetime
+        S_max_preferred_lifetime = 262,          // max_preferred_lifetime
+        S_valid_lifetime = 263,                  // valid_lifetime
+        S_min_valid_lifetime = 264,              // min_valid_lifetime
+        S_max_valid_lifetime = 265,              // max_valid_lifetime
+        S_renew_timer = 266,                     // renew_timer
+        S_rebind_timer = 267,                    // rebind_timer
+        S_calculate_tee_times = 268,             // calculate_tee_times
+        S_t1_percent = 269,                      // t1_percent
+        S_t2_percent = 270,                      // t2_percent
+        S_cache_threshold = 271,                 // cache_threshold
+        S_cache_max_age = 272,                   // cache_max_age
+        S_decline_probation_period = 273,        // decline_probation_period
+        S_ddns_send_updates = 274,               // ddns_send_updates
+        S_ddns_override_no_update = 275,         // ddns_override_no_update
+        S_ddns_override_client_update = 276,     // ddns_override_client_update
+        S_ddns_replace_client_name = 277,        // ddns_replace_client_name
+        S_278_22 = 278,                          // $@22
+        S_ddns_replace_client_name_value = 279,  // ddns_replace_client_name_value
+        S_ddns_generated_prefix = 280,           // ddns_generated_prefix
+        S_281_23 = 281,                          // $@23
+        S_ddns_qualifying_suffix = 282,          // ddns_qualifying_suffix
+        S_283_24 = 283,                          // $@24
+        S_ddns_update_on_renew = 284,            // ddns_update_on_renew
+        S_ddns_use_conflict_resolution = 285,    // ddns_use_conflict_resolution
+        S_hostname_char_set = 286,               // hostname_char_set
+        S_287_25 = 287,                          // $@25
+        S_hostname_char_replacement = 288,       // hostname_char_replacement
+        S_289_26 = 289,                          // $@26
+        S_store_extended_info = 290,             // store_extended_info
+        S_statistic_default_sample_count = 291,  // statistic_default_sample_count
+        S_statistic_default_sample_age = 292,    // statistic_default_sample_age
+        S_server_tag = 293,                      // server_tag
+        S_294_27 = 294,                          // $@27
+        S_parked_packet_limit = 295,             // parked_packet_limit
+        S_early_global_reservations_lookup = 296, // early_global_reservations_lookup
+        S_ip_reservations_unique = 297,          // ip_reservations_unique
+        S_reservations_lookup_first = 298,       // reservations_lookup_first
+        S_interfaces_config = 299,               // interfaces_config
+        S_300_28 = 300,                          // $@28
+        S_sub_interfaces6 = 301,                 // sub_interfaces6
+        S_302_29 = 302,                          // $@29
+        S_interfaces_config_params = 303,        // interfaces_config_params
+        S_interfaces_config_param = 304,         // interfaces_config_param
+        S_interfaces_list = 305,                 // interfaces_list
+        S_306_30 = 306,                          // $@30
+        S_re_detect = 307,                       // re_detect
+        S_service_sockets_require_all = 308,     // service_sockets_require_all
+        S_service_sockets_retry_wait_time = 309, // service_sockets_retry_wait_time
+        S_service_sockets_max_retries = 310,     // service_sockets_max_retries
+        S_lease_database = 311,                  // lease_database
+        S_312_31 = 312,                          // $@31
+        S_hosts_database = 313,                  // hosts_database
+        S_314_32 = 314,                          // $@32
+        S_hosts_databases = 315,                 // hosts_databases
+        S_316_33 = 316,                          // $@33
+        S_database_list = 317,                   // database_list
+        S_not_empty_database_list = 318,         // not_empty_database_list
+        S_database = 319,                        // database
+        S_320_34 = 320,                          // $@34
+        S_database_map_params = 321,             // database_map_params
+        S_database_map_param = 322,              // database_map_param
+        S_database_type = 323,                   // database_type
+        S_324_35 = 324,                          // $@35
+        S_db_type = 325,                         // db_type
+        S_user = 326,                            // user
+        S_327_36 = 327,                          // $@36
+        S_password = 328,                        // password
+        S_329_37 = 329,                          // $@37
+        S_host = 330,                            // host
+        S_331_38 = 331,                          // $@38
+        S_port = 332,                            // port
+        S_name = 333,                            // name
+        S_334_39 = 334,                          // $@39
+        S_persist = 335,                         // persist
+        S_lfc_interval = 336,                    // lfc_interval
+        S_readonly = 337,                        // readonly
+        S_connect_timeout = 338,                 // connect_timeout
+        S_read_timeout = 339,                    // read_timeout
+        S_write_timeout = 340,                   // write_timeout
+        S_tcp_user_timeout = 341,                // tcp_user_timeout
+        S_reconnect_wait_time = 342,             // reconnect_wait_time
+        S_on_fail = 343,                         // on_fail
+        S_344_40 = 344,                          // $@40
+        S_on_fail_mode = 345,                    // on_fail_mode
+        S_max_row_errors = 346,                  // max_row_errors
+        S_max_reconnect_tries = 347,             // max_reconnect_tries
+        S_trust_anchor = 348,                    // trust_anchor
+        S_349_41 = 349,                          // $@41
+        S_cert_file = 350,                       // cert_file
+        S_351_42 = 351,                          // $@42
+        S_key_file = 352,                        // key_file
+        S_353_43 = 353,                          // $@43
+        S_cipher_list = 354,                     // cipher_list
+        S_355_44 = 355,                          // $@44
+        S_sanity_checks = 356,                   // sanity_checks
+        S_357_45 = 357,                          // $@45
+        S_sanity_checks_params = 358,            // sanity_checks_params
+        S_sanity_checks_param = 359,             // sanity_checks_param
+        S_lease_checks = 360,                    // lease_checks
+        S_361_46 = 361,                          // $@46
+        S_mac_sources = 362,                     // mac_sources
+        S_363_47 = 363,                          // $@47
+        S_mac_sources_list = 364,                // mac_sources_list
+        S_mac_sources_value = 365,               // mac_sources_value
+        S_duid_id = 366,                         // duid_id
+        S_string_id = 367,                       // string_id
+        S_host_reservation_identifiers = 368,    // host_reservation_identifiers
+        S_369_48 = 369,                          // $@48
+        S_host_reservation_identifiers_list = 370, // host_reservation_identifiers_list
+        S_host_reservation_identifier = 371,     // host_reservation_identifier
+        S_hw_address_id = 372,                   // hw_address_id
+        S_flex_id = 373,                         // flex_id
+        S_relay_supplied_options = 374,          // relay_supplied_options
+        S_375_49 = 375,                          // $@49
+        S_dhcp_multi_threading = 376,            // dhcp_multi_threading
+        S_377_50 = 377,                          // $@50
+        S_multi_threading_params = 378,          // multi_threading_params
+        S_multi_threading_param = 379,           // multi_threading_param
+        S_enable_multi_threading = 380,          // enable_multi_threading
+        S_thread_pool_size = 381,                // thread_pool_size
+        S_packet_queue_size = 382,               // packet_queue_size
+        S_hooks_libraries = 383,                 // hooks_libraries
+        S_384_51 = 384,                          // $@51
+        S_hooks_libraries_list = 385,            // hooks_libraries_list
+        S_not_empty_hooks_libraries_list = 386,  // not_empty_hooks_libraries_list
+        S_hooks_library = 387,                   // hooks_library
+        S_388_52 = 388,                          // $@52
+        S_sub_hooks_library = 389,               // sub_hooks_library
+        S_390_53 = 390,                          // $@53
+        S_hooks_params = 391,                    // hooks_params
+        S_hooks_param = 392,                     // hooks_param
+        S_library = 393,                         // library
+        S_394_54 = 394,                          // $@54
+        S_parameters = 395,                      // parameters
+        S_396_55 = 396,                          // $@55
+        S_expired_leases_processing = 397,       // expired_leases_processing
+        S_398_56 = 398,                          // $@56
+        S_expired_leases_params = 399,           // expired_leases_params
+        S_expired_leases_param = 400,            // expired_leases_param
+        S_reclaim_timer_wait_time = 401,         // reclaim_timer_wait_time
+        S_flush_reclaimed_timer_wait_time = 402, // flush_reclaimed_timer_wait_time
+        S_hold_reclaimed_time = 403,             // hold_reclaimed_time
+        S_max_reclaim_leases = 404,              // max_reclaim_leases
+        S_max_reclaim_time = 405,                // max_reclaim_time
+        S_unwarned_reclaim_cycles = 406,         // unwarned_reclaim_cycles
+        S_subnet6_list = 407,                    // subnet6_list
+        S_408_57 = 408,                          // $@57
+        S_subnet6_list_content = 409,            // subnet6_list_content
+        S_not_empty_subnet6_list = 410,          // not_empty_subnet6_list
+        S_subnet6 = 411,                         // subnet6
+        S_412_58 = 412,                          // $@58
+        S_sub_subnet6 = 413,                     // sub_subnet6
+        S_414_59 = 414,                          // $@59
+        S_subnet6_params = 415,                  // subnet6_params
+        S_subnet6_param = 416,                   // subnet6_param
+        S_subnet = 417,                          // subnet
+        S_418_60 = 418,                          // $@60
+        S_interface = 419,                       // interface
+        S_420_61 = 420,                          // $@61
+        S_interface_id = 421,                    // interface_id
+        S_422_62 = 422,                          // $@62
+        S_client_class = 423,                    // client_class
+        S_424_63 = 424,                          // $@63
+        S_require_client_classes = 425,          // require_client_classes
+        S_426_64 = 426,                          // $@64
+        S_reservations_global = 427,             // reservations_global
+        S_reservations_in_subnet = 428,          // reservations_in_subnet
+        S_reservations_out_of_pool = 429,        // reservations_out_of_pool
+        S_reservation_mode = 430,                // reservation_mode
+        S_431_65 = 431,                          // $@65
+        S_hr_mode = 432,                         // hr_mode
+        S_id = 433,                              // id
+        S_rapid_commit = 434,                    // rapid_commit
+        S_shared_networks = 435,                 // shared_networks
+        S_436_66 = 436,                          // $@66
+        S_shared_networks_content = 437,         // shared_networks_content
+        S_shared_networks_list = 438,            // shared_networks_list
+        S_shared_network = 439,                  // shared_network
+        S_440_67 = 440,                          // $@67
+        S_shared_network_params = 441,           // shared_network_params
+        S_shared_network_param = 442,            // shared_network_param
+        S_option_def_list = 443,                 // option_def_list
+        S_444_68 = 444,                          // $@68
+        S_sub_option_def_list = 445,             // sub_option_def_list
+        S_446_69 = 446,                          // $@69
+        S_option_def_list_content = 447,         // option_def_list_content
+        S_not_empty_option_def_list = 448,       // not_empty_option_def_list
+        S_option_def_entry = 449,                // option_def_entry
+        S_450_70 = 450,                          // $@70
+        S_sub_option_def = 451,                  // sub_option_def
+        S_452_71 = 452,                          // $@71
+        S_option_def_params = 453,               // option_def_params
+        S_not_empty_option_def_params = 454,     // not_empty_option_def_params
+        S_option_def_param = 455,                // option_def_param
+        S_option_def_name = 456,                 // option_def_name
+        S_code = 457,                            // code
+        S_option_def_code = 458,                 // option_def_code
+        S_option_def_type = 459,                 // option_def_type
+        S_460_72 = 460,                          // $@72
+        S_option_def_record_types = 461,         // option_def_record_types
+        S_462_73 = 462,                          // $@73
+        S_space = 463,                           // space
+        S_464_74 = 464,                          // $@74
+        S_option_def_space = 465,                // option_def_space
+        S_option_def_encapsulate = 466,          // option_def_encapsulate
+        S_467_75 = 467,                          // $@75
+        S_option_def_array = 468,                // option_def_array
+        S_option_data_list = 469,                // option_data_list
+        S_470_76 = 470,                          // $@76
+        S_option_data_list_content = 471,        // option_data_list_content
+        S_not_empty_option_data_list = 472,      // not_empty_option_data_list
+        S_option_data_entry = 473,               // option_data_entry
+        S_474_77 = 474,                          // $@77
+        S_sub_option_data = 475,                 // sub_option_data
+        S_476_78 = 476,                          // $@78
+        S_option_data_params = 477,              // option_data_params
+        S_not_empty_option_data_params = 478,    // not_empty_option_data_params
+        S_option_data_param = 479,               // option_data_param
+        S_option_data_name = 480,                // option_data_name
+        S_option_data_data = 481,                // option_data_data
+        S_482_79 = 482,                          // $@79
+        S_option_data_code = 483,                // option_data_code
+        S_option_data_space = 484,               // option_data_space
+        S_option_data_csv_format = 485,          // option_data_csv_format
+        S_option_data_always_send = 486,         // option_data_always_send
+        S_pools_list = 487,                      // pools_list
+        S_488_80 = 488,                          // $@80
+        S_pools_list_content = 489,              // pools_list_content
+        S_not_empty_pools_list = 490,            // not_empty_pools_list
+        S_pool_list_entry = 491,                 // pool_list_entry
+        S_492_81 = 492,                          // $@81
+        S_sub_pool6 = 493,                       // sub_pool6
+        S_494_82 = 494,                          // $@82
+        S_pool_params = 495,                     // pool_params
+        S_pool_param = 496,                      // pool_param
+        S_pool_entry = 497,                      // pool_entry
+        S_498_83 = 498,                          // $@83
+        S_user_context = 499,                    // user_context
+        S_500_84 = 500,                          // $@84
+        S_comment = 501,                         // comment
+        S_502_85 = 502,                          // $@85
+        S_pd_pools_list = 503,                   // pd_pools_list
+        S_504_86 = 504,                          // $@86
+        S_pd_pools_list_content = 505,           // pd_pools_list_content
+        S_not_empty_pd_pools_list = 506,         // not_empty_pd_pools_list
+        S_pd_pool_entry = 507,                   // pd_pool_entry
+        S_508_87 = 508,                          // $@87
+        S_sub_pd_pool = 509,                     // sub_pd_pool
+        S_510_88 = 510,                          // $@88
+        S_pd_pool_params = 511,                  // pd_pool_params
+        S_pd_pool_param = 512,                   // pd_pool_param
+        S_pd_prefix = 513,                       // pd_prefix
+        S_514_89 = 514,                          // $@89
+        S_pd_prefix_len = 515,                   // pd_prefix_len
+        S_excluded_prefix = 516,                 // excluded_prefix
+        S_517_90 = 517,                          // $@90
+        S_excluded_prefix_len = 518,             // excluded_prefix_len
+        S_pd_delegated_len = 519,                // pd_delegated_len
+        S_reservations = 520,                    // reservations
+        S_521_91 = 521,                          // $@91
+        S_reservations_list = 522,               // reservations_list
+        S_not_empty_reservations_list = 523,     // not_empty_reservations_list
+        S_reservation = 524,                     // reservation
+        S_525_92 = 525,                          // $@92
+        S_sub_reservation = 526,                 // sub_reservation
+        S_527_93 = 527,                          // $@93
+        S_reservation_params = 528,              // reservation_params
+        S_not_empty_reservation_params = 529,    // not_empty_reservation_params
+        S_reservation_param = 530,               // reservation_param
+        S_ip_addresses = 531,                    // ip_addresses
+        S_532_94 = 532,                          // $@94
+        S_prefixes = 533,                        // prefixes
+        S_534_95 = 534,                          // $@95
+        S_duid = 535,                            // duid
+        S_536_96 = 536,                          // $@96
+        S_hw_address = 537,                      // hw_address
+        S_538_97 = 538,                          // $@97
+        S_hostname = 539,                        // hostname
+        S_540_98 = 540,                          // $@98
+        S_flex_id_value = 541,                   // flex_id_value
+        S_542_99 = 542,                          // $@99
+        S_reservation_client_classes = 543,      // reservation_client_classes
+        S_544_100 = 544,                         // $@100
+        S_relay = 545,                           // relay
+        S_546_101 = 546,                         // $@101
+        S_relay_map = 547,                       // relay_map
+        S_ip_address = 548,                      // ip_address
+        S_549_102 = 549,                         // $@102
+        S_client_classes = 550,                  // client_classes
+        S_551_103 = 551,                         // $@103
+        S_client_classes_list = 552,             // client_classes_list
+        S_client_class_entry = 553,              // client_class_entry
+        S_554_104 = 554,                         // $@104
+        S_client_class_params = 555,             // client_class_params
+        S_not_empty_client_class_params = 556,   // not_empty_client_class_params
+        S_client_class_param = 557,              // client_class_param
+        S_client_class_name = 558,               // client_class_name
+        S_client_class_test = 559,               // client_class_test
+        S_560_105 = 560,                         // $@105
+        S_only_if_required = 561,                // only_if_required
+        S_server_id = 562,                       // server_id
+        S_563_106 = 563,                         // $@106
+        S_server_id_params = 564,                // server_id_params
+        S_server_id_param = 565,                 // server_id_param
+        S_server_id_type = 566,                  // server_id_type
+        S_567_107 = 567,                         // $@107
+        S_duid_type = 568,                       // duid_type
+        S_htype = 569,                           // htype
+        S_identifier = 570,                      // identifier
+        S_571_108 = 571,                         // $@108
+        S_time = 572,                            // time
+        S_enterprise_id = 573,                   // enterprise_id
+        S_dhcp4o6_port = 574,                    // dhcp4o6_port
+        S_control_socket = 575,                  // control_socket
+        S_576_109 = 576,                         // $@109
+        S_control_socket_params = 577,           // control_socket_params
+        S_control_socket_param = 578,            // control_socket_param
+        S_socket_type = 579,                     // socket_type
+        S_580_110 = 580,                         // $@110
+        S_socket_name = 581,                     // socket_name
+        S_582_111 = 582,                         // $@111
+        S_dhcp_queue_control = 583,              // dhcp_queue_control
+        S_584_112 = 584,                         // $@112
+        S_queue_control_params = 585,            // queue_control_params
+        S_queue_control_param = 586,             // queue_control_param
+        S_enable_queue = 587,                    // enable_queue
+        S_queue_type = 588,                      // queue_type
+        S_589_113 = 589,                         // $@113
+        S_capacity = 590,                        // capacity
+        S_arbitrary_map_entry = 591,             // arbitrary_map_entry
+        S_592_114 = 592,                         // $@114
+        S_dhcp_ddns = 593,                       // dhcp_ddns
+        S_594_115 = 594,                         // $@115
+        S_sub_dhcp_ddns = 595,                   // sub_dhcp_ddns
+        S_596_116 = 596,                         // $@116
+        S_dhcp_ddns_params = 597,                // dhcp_ddns_params
+        S_dhcp_ddns_param = 598,                 // dhcp_ddns_param
+        S_enable_updates = 599,                  // enable_updates
+        S_dep_qualifying_suffix = 600,           // dep_qualifying_suffix
+        S_601_117 = 601,                         // $@117
+        S_server_ip = 602,                       // server_ip
+        S_603_118 = 603,                         // $@118
+        S_server_port = 604,                     // server_port
+        S_sender_ip = 605,                       // sender_ip
+        S_606_119 = 606,                         // $@119
+        S_sender_port = 607,                     // sender_port
+        S_max_queue_size = 608,                  // max_queue_size
+        S_ncr_protocol = 609,                    // ncr_protocol
+        S_610_120 = 610,                         // $@120
+        S_ncr_protocol_value = 611,              // ncr_protocol_value
+        S_ncr_format = 612,                      // ncr_format
+        S_613_121 = 613,                         // $@121
+        S_dep_override_no_update = 614,          // dep_override_no_update
+        S_dep_override_client_update = 615,      // dep_override_client_update
+        S_dep_replace_client_name = 616,         // dep_replace_client_name
+        S_617_122 = 617,                         // $@122
+        S_dep_generated_prefix = 618,            // dep_generated_prefix
+        S_619_123 = 619,                         // $@123
+        S_dep_hostname_char_set = 620,           // dep_hostname_char_set
+        S_621_124 = 621,                         // $@124
+        S_dep_hostname_char_replacement = 622,   // dep_hostname_char_replacement
+        S_623_125 = 623,                         // $@125
+        S_config_control = 624,                  // config_control
+        S_625_126 = 625,                         // $@126
+        S_sub_config_control = 626,              // sub_config_control
+        S_627_127 = 627,                         // $@127
+        S_config_control_params = 628,           // config_control_params
+        S_config_control_param = 629,            // config_control_param
+        S_config_databases = 630,                // config_databases
+        S_631_128 = 631,                         // $@128
+        S_config_fetch_wait_time = 632,          // config_fetch_wait_time
+        S_loggers = 633,                         // loggers
+        S_634_129 = 634,                         // $@129
+        S_loggers_entries = 635,                 // loggers_entries
+        S_logger_entry = 636,                    // logger_entry
+        S_637_130 = 637,                         // $@130
+        S_logger_params = 638,                   // logger_params
+        S_logger_param = 639,                    // logger_param
+        S_debuglevel = 640,                      // debuglevel
+        S_severity = 641,                        // severity
+        S_642_131 = 642,                         // $@131
+        S_output_options_list = 643,             // output_options_list
+        S_644_132 = 644,                         // $@132
+        S_output_options_list_content = 645,     // output_options_list_content
+        S_output_entry = 646,                    // output_entry
+        S_647_133 = 647,                         // $@133
+        S_output_params_list = 648,              // output_params_list
+        S_output_params = 649,                   // output_params
+        S_output = 650,                          // output
+        S_651_134 = 651,                         // $@134
+        S_flush = 652,                           // flush
+        S_maxsize = 653,                         // maxsize
+        S_maxver = 654,                          // maxver
+        S_pattern = 655,                         // pattern
+        S_656_135 = 656,                         // $@135
+        S_compatibility = 657,                   // compatibility
+        S_658_136 = 658,                         // $@136
+        S_compatibility_params = 659,            // compatibility_params
+        S_compatibility_param = 660,             // compatibility_param
+        S_lenient_option_parsing = 661           // lenient_option_parsing
       };
     };
 
@@ -2327,6 +2336,51 @@ switch (yykind)
         return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
       }
 #endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_READ_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_READ_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_READ_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_READ_TIMEOUT, l);
+      }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_WRITE_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_WRITE_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_WRITE_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_WRITE_TIMEOUT, l);
+      }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_TCP_USER_TIMEOUT (location_type l)
+      {
+        return symbol_type (token::TOKEN_TCP_USER_TIMEOUT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_TCP_USER_TIMEOUT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_TCP_USER_TIMEOUT, l);
+      }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       static
       symbol_type
@@ -5327,8 +5381,8 @@ switch (yykind)
     /// Constants.
     enum
     {
-      yylast_ = 1327,     ///< Last index in yytable_.
-      yynnts_ = 442,  ///< Number of nonterminal symbols.
+      yylast_ = 1339,     ///< Last index in yytable_.
+      yynnts_ = 445,  ///< Number of nonterminal symbols.
       yyfinal_ = 30 ///< Termination state number.
     };
 
@@ -5394,10 +5448,11 @@ switch (yykind)
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216
     };
     // Last valid token kind.
-    const int code_max = 468;
+    const int code_max = 471;
 
     if (t <= 0)
       return symbol_kind::S_YYEOF;
@@ -5568,7 +5623,7 @@ switch (yykind)
 
 #line 14 "dhcp6_parser.yy"
 } } // isc::dhcp
-#line 5572 "dhcp6_parser.h"
+#line 5627 "dhcp6_parser.h"
 
 
 
diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy
index 5de00e1d26..6a9c50e80e 100644
--- a/src/bin/dhcp6/dhcp6_parser.yy
+++ b/src/bin/dhcp6/dhcp6_parser.yy
@@ -78,6 +78,9 @@ using namespace std;
   LFC_INTERVAL "lfc-interval"
   READONLY "readonly"
   CONNECT_TIMEOUT "connect-timeout"
+  READ_TIMEOUT "read-timeout"
+  WRITE_TIMEOUT "write-timeout"
+  TCP_USER_TIMEOUT "tcp-user-timeout"
   MAX_RECONNECT_TRIES "max-reconnect-tries"
   RECONNECT_WAIT_TIME "reconnect-wait-time"
   ON_FAIL "on-fail"
@@ -939,6 +942,9 @@ database_map_param: database_type
                   | lfc_interval
                   | readonly
                   | connect_timeout
+                  | read_timeout
+                  | write_timeout
+                  | tcp_user_timeout
                   | max_reconnect_tries
                   | reconnect_wait_time
                   | on_fail
@@ -1029,6 +1035,25 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER {
     ctx.stack_.back()->set("connect-timeout", n);
 };
 
+read_timeout: READ_TIMEOUT COLON INTEGER {
+    ctx.unique("read-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("connect-timeout", n);
+};
+
+write_timeout: WRITE_TIMEOUT COLON INTEGER {
+    ctx.unique("write-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("write-timeout", n);
+};
+
+tcp_user_timeout: TCP_USER_TIMEOUT COLON INTEGER {
+    ctx.unique("tcp-user-timeout", ctx.loc2pos(@1));
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("tcp-user-timeout", n);
+};
+
+
 reconnect_wait_time: RECONNECT_WAIT_TIME COLON INTEGER {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(@1));
     ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));

From 44644201e33838da83a2949d33b072d03b433ec6 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 22:07:35 +0100
Subject: [PATCH 07/12] [#2688] Fixed invalid error message

---
 src/lib/database/dbaccess_parser.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc
index e60fd91d5a..2048b3b8ed 100644
--- a/src/lib/database/dbaccess_parser.cc
+++ b/src/lib/database/dbaccess_parser.cc
@@ -211,7 +211,7 @@ DbAccessParser::parse(std::string& access_string,
     }
     if (tcp_user_timeout > 0 && (dbtype != "postgresql")) {
         ConstElementPtr value = database_config->get("tcp-user-timeout");
-        isc_throw(DbConfigError, "tcp-user-timeout value is only supported by the mysql backend"
+        isc_throw(DbConfigError, "tcp-user-timeout value is only supported by the postgresql backend"
                   << " (" << value->getPosition() << ")");
     }
 

From a7999f684886b8c5da656787b1a5cab80b2f4b2c Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Thu, 12 Jan 2023 22:14:09 +0100
Subject: [PATCH 08/12] [#2688] Added ChangeLog for #2688

---
 ChangeLog | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 34fcd8e71b..87b067d0bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2046.	[func]		marcin
+	New database connection parameters, "read-timeout" and
+	"write-timeout", control the timeouts in communication with the
+	MySQL database. The "tcp-user-timeout" controls the timeout in
+	communication with the PostgreSQL database. Setting these
+	timeouts can prevent occasional Kea hangs due to issues with
+	the database connectivity.
+	(Gitlab #2688)
+
 Kea 2.2.0 (stable) released on July 27, 2022
 
 2045.	[build]		tmark

From d01a8e4fb50e922694975d466e237078f570b33e Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Mon, 16 Jan 2023 22:15:19 +0100
Subject: [PATCH 09/12] [#2688] Fixed failing parser test

---
 src/bin/agent/tests/parser_unittests.cc   | 7 ++++++-
 src/bin/d2/tests/parser_unittest.cc       | 7 ++++++-
 src/bin/dhcp4/tests/parser_unittest.cc    | 7 ++++++-
 src/bin/dhcp6/dhcp6_parser.cc             | 2 +-
 src/bin/dhcp6/dhcp6_parser.yy             | 2 +-
 src/bin/dhcp6/tests/parser_unittest.cc    | 7 ++++++-
 src/bin/netconf/tests/parser_unittests.cc | 7 ++++++-
 7 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/src/bin/agent/tests/parser_unittests.cc b/src/bin/agent/tests/parser_unittests.cc
index 2b35ac62c0..d129291beb 100644
--- a/src/bin/agent/tests/parser_unittests.cc
+++ b/src/bin/agent/tests/parser_unittests.cc
@@ -11,6 +11,7 @@
 #include <cc/dhcp_config_error.h>
 #include <testutils/io_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <testutils/user_context_utils.h>
 
 #include <gtest/gtest.h>
@@ -37,7 +38,11 @@ namespace test {
 void compareJSON(ConstElementPtr a, ConstElementPtr b) {
     ASSERT_TRUE(a);
     ASSERT_TRUE(b);
-    EXPECT_EQ(a->str(), b->str());
+    EXPECT_EQ(a->str(), b->str())
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(a), prettyPrint(b)) << "\n"
+#endif
+    ;
 }
 
 /// @brief Tests if the input string can be parsed with specific parser
diff --git a/src/bin/d2/tests/parser_unittest.cc b/src/bin/d2/tests/parser_unittest.cc
index 910051172a..4635a3bf97 100644
--- a/src/bin/d2/tests/parser_unittest.cc
+++ b/src/bin/d2/tests/parser_unittest.cc
@@ -10,6 +10,7 @@
 #include <d2/tests/parser_unittest.h>
 #include <testutils/io_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <testutils/user_context_utils.h>
 
 #include <gtest/gtest.h>
@@ -38,7 +39,11 @@ namespace test {
 void compareJSON(ConstElementPtr a, ConstElementPtr b) {
     ASSERT_TRUE(a);
     ASSERT_TRUE(b);
-    EXPECT_EQ(a->str(), b->str());
+    EXPECT_EQ(a->str(), b->str())
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(a), prettyPrint(b)) << "\n"
+#endif
+    ;
 }
 
 /// @brief Tests if the input string can be parsed with specific parser
diff --git a/src/bin/dhcp4/tests/parser_unittest.cc b/src/bin/dhcp4/tests/parser_unittest.cc
index 9a7e0db995..e6b8c4ce2a 100644
--- a/src/bin/dhcp4/tests/parser_unittest.cc
+++ b/src/bin/dhcp4/tests/parser_unittest.cc
@@ -11,6 +11,7 @@
 #include <testutils/gtest_utils.h>
 #include <testutils/io_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <testutils/user_context_utils.h>
 
 #include <gtest/gtest.h>
@@ -37,7 +38,11 @@ namespace test {
 void compareJSON(ConstElementPtr a, ConstElementPtr b) {
     ASSERT_TRUE(a);
     ASSERT_TRUE(b);
-    EXPECT_EQ(a->str(), b->str());
+    EXPECT_EQ(a->str(), b->str())
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(a), prettyPrint(b)) << "\n"
+#endif
+    ;
 }
 
 /// @brief Tests if the input string can be parsed with specific parser
diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc
index 8e8b15543f..b999959062 100644
--- a/src/bin/dhcp6/dhcp6_parser.cc
+++ b/src/bin/dhcp6/dhcp6_parser.cc
@@ -1928,7 +1928,7 @@ namespace isc { namespace dhcp {
                                          {
     ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("connect-timeout", n);
+    ctx.stack_.back()->set("read-timeout", n);
 }
 #line 1934 "dhcp6_parser.cc"
     break;
diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy
index 6a9c50e80e..e0609e1def 100644
--- a/src/bin/dhcp6/dhcp6_parser.yy
+++ b/src/bin/dhcp6/dhcp6_parser.yy
@@ -1038,7 +1038,7 @@ connect_timeout: CONNECT_TIMEOUT COLON INTEGER {
 read_timeout: READ_TIMEOUT COLON INTEGER {
     ctx.unique("read-timeout", ctx.loc2pos(@1));
     ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
-    ctx.stack_.back()->set("connect-timeout", n);
+    ctx.stack_.back()->set("read-timeout", n);
 };
 
 write_timeout: WRITE_TIMEOUT COLON INTEGER {
diff --git a/src/bin/dhcp6/tests/parser_unittest.cc b/src/bin/dhcp6/tests/parser_unittest.cc
index 3d3b39b117..e2f3b13545 100644
--- a/src/bin/dhcp6/tests/parser_unittest.cc
+++ b/src/bin/dhcp6/tests/parser_unittest.cc
@@ -10,6 +10,7 @@
 #include <dhcpsrv/parsers/simple_parser6.h>
 #include <testutils/io_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <testutils/user_context_utils.h>
 #include <testutils/gtest_utils.h>
 
@@ -37,7 +38,11 @@ namespace test {
 void compareJSON(ConstElementPtr a, ConstElementPtr b) {
     ASSERT_TRUE(a);
     ASSERT_TRUE(b);
-    EXPECT_EQ(a->str(), b->str());
+    EXPECT_EQ(a->str(), b->str())
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(a), prettyPrint(b)) << "\n"
+#endif
+    ;
 }
 
 /// @brief Tests if the input string can be parsed with specific parser
diff --git a/src/bin/netconf/tests/parser_unittests.cc b/src/bin/netconf/tests/parser_unittests.cc
index b496470b00..b0acbb491d 100644
--- a/src/bin/netconf/tests/parser_unittests.cc
+++ b/src/bin/netconf/tests/parser_unittests.cc
@@ -12,6 +12,7 @@
 #include <testutils/gtest_utils.h>
 #include <testutils/io_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <testutils/user_context_utils.h>
 
 #include <gtest/gtest.h>
@@ -38,7 +39,11 @@ namespace test {
 void compareJSON(ConstElementPtr a, ConstElementPtr b) {
     ASSERT_TRUE(a);
     ASSERT_TRUE(b);
-    EXPECT_EQ(a->str(), b->str());
+    EXPECT_EQ(a->str(), b->str())
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(a), prettyPrint(b)) << "\n"
+#endif
+    ;
 }
 
 /// @brief Tests if the input string can be parsed with specific parser

From 61a502281e18b2163b30be90662a1504a942c035 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Mon, 16 Jan 2023 22:25:08 +0100
Subject: [PATCH 10/12] [#2688] Mention that tcp-user-timeout is in seconds

---
 doc/sphinx/arm/dhcp4-srv.rst | 4 ++--
 doc/sphinx/arm/dhcp6-srv.rst | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst
index f75ee6e3fd..96e106b039 100644
--- a/doc/sphinx/arm/dhcp4-srv.rst
+++ b/doc/sphinx/arm/dhcp4-srv.rst
@@ -579,8 +579,8 @@ read and write operations. Moreover, the ``read-timeout`` and ``write-timeout``
 parameters can only be specified for the MySQL backend. Setting them for
 any other backend type causes a configuration error.
 
-To set a timeout for PostgreSQL, use the ``tcp-user-timeout`` parameter
-instead. For example:
+Use the ``tcp-user-timeout`` parameter to set a timeout for PostgreSQL
+in seconds. For example:
 
 ::
 
diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst
index 2fed23c104..d5e86aec0a 100644
--- a/doc/sphinx/arm/dhcp6-srv.rst
+++ b/doc/sphinx/arm/dhcp6-srv.rst
@@ -536,8 +536,8 @@ read and write operations. Moreover, the ``read-timeout`` and ``write-timeout``
 parameters can only be specified for the MySQL backend. Setting them for
 any other backend type causes a configuration error.
 
-To set a timeout for PostgreSQL, use the ``tcp-user-timeout`` parameter
-instead. For example:
+Use the ``tcp-user-timeout`` parameter to set a timeout for PostgreSQL
+in seconds. For example:
 
 ::
 

From d2405ae4ede9779b328f6d7091aab1221e9f6232 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Mon, 16 Jan 2023 22:34:27 +0100
Subject: [PATCH 11/12] [#2688] Add timeout units to example files

---
 doc/examples/kea4/all-keys.json | 7 ++++---
 doc/examples/kea6/all-keys.json | 7 ++++---
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json
index b64450db23..7946a73e6a 100644
--- a/doc/examples/kea4/all-keys.json
+++ b/doc/examples/kea4/all-keys.json
@@ -352,6 +352,7 @@
                 "user": "keatest",
 
                 // TCP user timeout while communicating with the database.
+                // It is specified in seconds.
                 "tcp-user-timeout": 100
             },
             {
@@ -384,13 +385,13 @@
                 // serve-retry-continue
                 "on-fail": "stop-retry-exit",
 
-                // Connection connect timeout.
+                // Connection connect timeout in seconds.
                 "connect-timeout": 100,
 
-                // Data read from the database timeout.
+                // Data read from the database timeout in seconds.
                 "read-timeout": 120,
 
-                // Data write to the database timeout.
+                // Data write to the database timeout in seconds.
                 "write-timeout": 180
             }
         ],
diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json
index 5e2f438b82..ba3c66f828 100644
--- a/doc/examples/kea6/all-keys.json
+++ b/doc/examples/kea6/all-keys.json
@@ -311,6 +311,7 @@
                 "user": "keatest",
 
                 // TCP user timeout while communicating with the database.
+                // It is specified in seconds.
                 "tcp-user-timeout": 100
             },
             {
@@ -343,13 +344,13 @@
                 // serve-retry-continue
                 "on-fail": "stop-retry-exit",
 
-                // Connection connect timeout.
+                // Connection connect timeout in seconds.
                 "connect-timeout": 100,
 
-                // Data read from the database timeout.
+                // Data read from the database timeout in seconds.
                 "read-timeout": 120,
 
-                // Data write to the database timeout.
+                // Data write to the database timeout in seconds.
                 "write-timeout": 180
             }
         ],

From 67e95949b42383a045e9c274ad02e67809ec2696 Mon Sep 17 00:00:00 2001
From: Marcin Siodelski <marcin@isc.org>
Date: Mon, 16 Jan 2023 23:03:45 +0100
Subject: [PATCH 12/12] [#2688] Added a note into the ARM

It says that the timeouts are only effective for TCP connections.
---
 doc/sphinx/arm/dhcp4-srv.rst | 8 ++++++++
 doc/sphinx/arm/dhcp6-srv.rst | 8 ++++++++
 2 files changed, 16 insertions(+)

diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst
index 96e106b039..91c55687b4 100644
--- a/doc/sphinx/arm/dhcp4-srv.rst
+++ b/doc/sphinx/arm/dhcp4-srv.rst
@@ -590,6 +590,14 @@ in seconds. For example:
 Specifying this parameter for other backend types causes a configuration
 error.
 
+.. note::
+
+    The timeouts described here are only effective for TCP connections.
+    Please note that the MySQL client library used by the Kea servers
+    typically connects to the database via a UNIX domain socket when the
+    ``host`` parameter is ``localhost`` but establishes a TCP connection
+    for ``127.0.0.1``.
+
 
 .. _hosts4-storage:
 
diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst
index d5e86aec0a..18a3892e0e 100644
--- a/doc/sphinx/arm/dhcp6-srv.rst
+++ b/doc/sphinx/arm/dhcp6-srv.rst
@@ -547,6 +547,14 @@ in seconds. For example:
 Specifying this parameter for other backend types causes a configuration
 error.
 
+.. note::
+
+    The timeouts described here are only effective for TCP connections.
+    Please note that the MySQL client library used by the Kea servers
+    typically connects to the database via a UNIX domain socket when the
+    ``host`` parameter is ``localhost`` but establishes a TCP connection
+    for ``127.0.0.1``.
+
 
 .. _hosts6-storage: