Commit ce14110b authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[#35,!517] Rework kea-dhcp6 parsing and server

src/bin/dhcp6/ctrl_dhcp6_srv.cc
    Removed setting D2ClientCfg fetch function

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

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

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

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

src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/fqdn_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc
    Updated tests
parent 256feda6
......@@ -796,6 +796,9 @@ public:
EXPECT_TRUE(pool);
}
/// @brief Tests if the current config has a given global parameter value
/// @param name name of the global parameter expected to exist
/// @param value expected value of the global parameter
template <typename ValueType>
void checkGlobal(const std::string name, ValueType value) {
ConstElementPtr param;
......@@ -4281,6 +4284,9 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigValid) {
EXPECT_EQ(dhcp_ddns::NCR_UDP, d2_client_config->getNcrProtocol());
EXPECT_EQ(dhcp_ddns::FMT_JSON, d2_client_config->getNcrFormat());
// ddns-send-updates should be global default
checkGlobal("ddns-send-updates", true);
// The following, deprecated dhcp-ddns parameters,
// should all have global default values.
checkGlobal("ddns-send-updates", true);
......
......@@ -375,13 +375,6 @@ ControlledDhcpv6Srv::commandConfigSetHandler(const string&,
isc::config::parseAnswer(rcode, result);
if (rcode == CONTROL_RESULT_SUCCESS) {
CfgMgr::instance().getStagingCfg()->applyLoggingCfg();
// Update the fetch globals callback.
auto cfg = CfgMgr::instance().getStagingCfg()->getD2ClientConfig();
cfg->setFetchGlobalsFn([]() -> ConstElementPtr {
return (CfgMgr::instance().getCurrentCfg()->getConfiguredGlobals());
});
// Use new configuration.
CfgMgr::instance().commit();
} else {
......
#line 1 "dhcp6_lexer.cc"
#line 2 "dhcp6_lexer.cc"
#line 3 "dhcp6_lexer.cc"
#line 4 "dhcp6_lexer.cc"
#define YY_INT_ALIGNED short int
......@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
(yy_c_buf_p) = yy_cp;
/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
#define YY_NUM_RULES 192
#define YY_END_OF_BUFFER 193
#define YY_NUM_RULES 198
#define YY_END_OF_BUFFER 199
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
......@@ -700,187 +700,199 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static const flex_int16_t yy_accept[1631] =
static const flex_int16_t yy_accept[1736] =
{ 0,
185, 185, 0, 0, 0, 0, 0, 0, 0, 0,
193, 191, 10, 11, 191, 1, 185, 182, 185, 185,
191, 184, 183, 191, 191, 191, 191, 191, 178, 179,
191, 191, 191, 180, 181, 5, 5, 5, 191, 191,
191, 10, 11, 0, 0, 174, 0, 0, 0, 0,
191, 191, 0, 0, 0, 0, 0, 0, 0, 0,
199, 197, 10, 11, 197, 1, 191, 188, 191, 191,
197, 190, 189, 197, 197, 197, 197, 197, 184, 185,
197, 197, 197, 186, 187, 5, 5, 5, 197, 197,
197, 10, 11, 0, 0, 180, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 185,
185, 0, 184, 185, 3, 2, 6, 0, 185, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 191,
191, 0, 190, 191, 3, 2, 6, 0, 191, 0,
0, 0, 0, 0, 0, 4, 0, 0, 9, 0,
175, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 177, 0, 0, 0,
181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 183, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0, 0, 8,
0, 0, 0, 0, 152, 0, 0, 153, 0, 0,
0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
8, 0, 0, 0, 0, 158, 0, 0, 159, 0,
0, 0, 0, 0, 0, 0, 176, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 182, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 190,
188, 0, 187, 186, 0, 0, 0, 0, 0, 0,
0, 151, 0, 0, 28, 0, 27, 0, 0, 110,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 196, 194, 0, 193, 192, 0, 0, 0, 0,
0, 0, 0, 157, 0, 0, 28, 0, 27, 0,
0, 116, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 107, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 113, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 189, 186, 0, 0,
0, 0, 0, 0, 0, 0, 29, 0, 0, 31,
0, 0, 0, 0, 0, 0, 111, 0, 0, 0,
0, 0, 0, 0, 88, 0, 0, 0, 0, 0,
0, 0, 136, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 58, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
192, 0, 0, 0, 0, 0, 0, 0, 0, 29,
0, 0, 31, 0, 0, 0, 0, 0, 0, 117,
0, 0, 0, 0, 0, 0, 0, 94, 0, 0,
0, 0, 0, 0, 0, 0, 142, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 58, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 93, 0, 0, 0, 0, 0, 0,
0, 0, 0, 97, 0, 59, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 103, 0, 59,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 131, 156, 51, 0,
56, 0, 0, 0, 0, 0, 0, 171, 37, 0,
34, 0, 33, 0, 0, 0, 144, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
122, 0, 0, 0, 0, 0, 0, 0, 0, 155,
137, 162, 51, 0, 56, 0, 0, 0, 0, 0,
0, 177, 37, 0, 34, 0, 33, 0, 0, 0,
150, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
0, 0, 0, 0, 0, 0, 0, 0, 161, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53, 0, 0, 32, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 90, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 145, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 96, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 151, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 146,
0, 0, 0, 0, 0, 0, 0, 0, 7, 35,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
140, 0, 0, 0, 0, 0, 0, 0, 0, 7,
35, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 109, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 130,
0, 0, 0, 0, 0, 0, 0, 0, 127, 0,
0, 0, 0, 0, 0, 0, 0, 0, 98, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 124, 0, 0, 0, 0,
0, 0, 0, 0, 121, 0, 0, 0, 0, 0,
0, 0, 0, 0, 92, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 100, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 118,
0, 0, 0, 0, 0, 99, 0, 0, 0, 0,
0, 0, 106, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 124, 0, 0, 0, 0, 0, 105,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 139, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 149, 119, 0, 0, 0, 0, 0,
0, 0, 123, 52, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 125, 0, 60, 0, 0,
0, 0, 0, 0, 0, 0, 145, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 155, 125, 0, 0, 0, 0, 0, 0,
0, 129, 52, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 131, 0, 60, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 83, 0, 0,
0, 0, 0, 0, 0, 0, 172, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
0, 0, 0, 0, 0, 0, 89, 0, 0, 0,
0, 0, 0, 0, 0, 178, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 138, 0,
0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 57, 91, 0,
0, 0, 135, 0, 0, 0, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 127, 0, 0, 0, 0,
0, 112, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 144, 0, 0, 0, 0, 0, 0, 63,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 170, 0, 0, 0, 0, 0,
0, 57, 97, 0, 0, 0, 141, 0, 0, 0,
50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 133,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 101, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 176, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 41, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 16, 0, 0, 150, 14, 0,
107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 141, 0, 126, 0, 0, 0,
0, 41, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 16, 0, 0, 156, 14, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 137, 154, 0, 40, 0, 146, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 20, 0, 0, 0, 85, 0, 0, 0,
0, 148, 54, 0, 93, 0, 0, 0, 0, 0,
0, 0, 0, 147, 0, 0, 0, 0, 0, 0,
132, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 143, 160, 0,
40, 0, 152, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 20, 0, 0, 0,
91, 0, 0, 0, 0, 154, 54, 0, 99, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 82, 0, 0, 0, 116, 117, 0, 0, 0,
0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
0, 143, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 112, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 79, 0, 0, 0, 0, 0, 0, 17,
0, 15, 0, 168, 167, 0, 69, 0, 0, 0,
0, 0, 30, 0, 130, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 165, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 102, 0,
134, 43, 0, 61, 0, 0, 0, 0, 0, 0,
0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
104, 80, 0, 0, 142, 0, 0, 0, 0, 0,
133, 0, 0, 0, 0, 0, 98, 0, 173, 0,
0, 0, 0, 0, 0, 82, 0, 0, 0, 122,
123, 0, 0, 0, 0, 0, 0, 0, 0, 95,
0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96, 0, 0, 157, 0, 0, 0, 0, 0, 0,
149, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 118, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 92, 114,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 79, 0, 0, 0, 0, 0, 0, 17, 0,
15, 0, 174, 173, 0, 69, 0, 0, 0, 0,
0, 30, 0, 136, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 42, 0, 0,
68, 0, 0, 0, 0, 128, 47, 0, 0, 0,
70, 166, 38, 0, 0, 12, 0, 0, 0, 0,
0, 0, 0, 0, 0, 45, 0, 0, 44, 0,
18, 0, 0, 0, 72, 0, 0, 0, 0, 120,
171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 108, 0, 140, 43, 0, 61, 0, 0,
0, 0, 0, 0, 0, 0, 0, 19, 0, 0,
0, 0, 0, 0, 110, 80, 0, 0, 148, 0,
0, 0, 0, 0, 139, 0, 0, 0, 0, 0,
104, 0, 179, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 102,
0, 0, 163, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 76, 0, 0, 0, 0, 62,
0, 0, 94, 0, 0, 0, 0, 0, 147, 0,
0, 0, 46, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 42, 0, 0, 68,
0, 0, 0, 0, 134, 47, 0, 0, 0, 70,
172, 38, 0, 0, 0, 0, 0, 0, 0, 0,
12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
45, 0, 0, 44, 0, 18, 0, 0, 0, 72,
0, 0, 0, 0, 126, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 76,
0, 0, 0, 0, 62, 0, 0, 0, 0, 0,
0, 0, 0, 100, 0, 0, 0, 0, 0, 153,
0, 0, 0, 46, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67, 0, 0, 0, 84, 0, 36, 0, 48, 0,
0, 0, 0, 0, 0, 24, 0, 0, 0, 0,
0, 0, 0, 163, 0, 0, 0, 0, 132, 0,
0, 0, 0, 0, 0, 0, 0, 0, 105, 0,
0, 67, 0, 0, 0, 90, 0, 36, 0, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 24, 0, 0, 0, 0, 0, 0, 0,
169, 0, 0, 0, 0, 138, 0, 0, 0, 0,
0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
0, 0, 0, 0, 0, 83, 0, 0, 0, 0,
0, 0, 0, 0, 25, 39, 0, 0, 0, 0,
0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 25, 39, 0, 0, 0, 0, 0, 0, 0,
0, 0, 13, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 169, 0, 0, 0, 0, 0, 0,
0, 162, 0, 78, 0, 77, 0, 21, 73, 0,
0, 0, 0, 0, 65, 0, 115, 0, 0, 95,
0, 0, 161, 0, 0, 0, 71, 0, 0, 0,
66, 0, 23, 0, 0, 0, 0, 0, 0, 0,
0, 175, 0, 0, 0, 0, 0, 0, 0, 168,
0, 78, 0, 77, 0, 21, 73, 0, 0, 0,
0, 0, 65, 0, 121, 0, 0, 0, 0, 0,
0, 0, 101, 0, 0, 167, 0, 0, 0, 71,
0, 0, 0, 66, 0, 23, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 87, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 49, 0, 0, 0, 0, 0, 75, 74, 22,
0, 0, 0, 0, 49, 0, 0, 88, 0, 0,
0, 0, 0, 0, 75, 74, 22, 0, 119, 135,
0, 113, 129, 0, 0, 0, 0, 0, 0, 159,
164, 81, 0, 0, 0, 0, 158, 0, 0, 26,
0, 0, 0, 0, 0, 114, 0, 0, 160, 0
0, 0, 84, 0, 0, 0, 0, 0, 0, 165,
170, 0, 86, 81, 0, 0, 0, 0, 0, 164,
0, 0, 26, 0, 0, 0, 85, 0, 0, 0,
120, 0, 0, 166, 0
} ;
static const YY_CHAR yy_ec[256] =
......@@ -927,394 +939,416 @@ static const YY_CHAR yy_meta[74] =
3, 3, 3
} ;
static const flex_int16_t yy_base[1643] =
static const flex_int16_t yy_base[1748] =
{ 0,
0, 72, 21, 31, 43, 51, 54, 60, 91, 99,
2032, 2033, 34, 2028, 145, 0, 207, 2033, 214, 221,
13, 228, 2033, 2008, 118, 25, 2, 6, 2033, 2033,
73, 11, 17, 2033, 2033, 2033, 104, 2016, 1969, 0,
2006, 108, 2023, 24, 256, 2033, 67, 1965, 1971, 1991,
2137, 2138, 34, 2133, 145, 0, 207, 2138, 214, 221,
13, 228, 2138, 2113, 118, 25, 2, 6, 2138, 2138,
73, 11, 17, 2138, 2138, 2138, 104, 2121, 2074, 0,
2111, 108, 2128, 24, 256, 2138, 67, 2070, 2076, 2096,
84, 75, 189, 88, 226, 91, 89, 284, 196, 206,
219, 191, 210, 197, 60, 242, 1972, 278, 287, 298,
294, 313, 1955, 212, 318, 350, 328, 1974, 0, 379,
400, 417, 424, 429, 2033, 0, 2033, 393, 407, 269,
299, 301, 406, 418, 304, 2033, 1971, 2012, 2033, 293,
2033, 442, 312, 1958, 1968, 2009, 421, 10, 345, 1962,
319, 338, 336, 369, 248, 2007, 0, 495, 413, 1949,
1954, 1956, 332, 1952, 1941, 1942, 410, 1958, 1941, 1950,
418, 340, 226, 1944, 1942, 405, 1931, 1989, 448, 1934,
1987, 1927, 1950, 1947, 1947, 1941, 411, 1934, 1932, 1926,
1931, 1925, 421, 1936, 1929, 1920, 1919, 1933, 408, 1971,
1918, 427, 1930, 1933, 1917, 491, 1918, 433, 1930, 1927,
1928, 1926, 1961, 1960, 434, 1906, 1911, 1907, 1899, 1916,
1908, 0, 440, 446, 434, 450, 468, 467, 1907, 2033,
0, 483, 1898, 1901, 2033, 490, 465, 2033, 1955, 1908,
501, 1953, 506, 1952, 498, 1951, 2033, 544, 1950, 517,
1909, 1906, 1903, 1902, 1893, 514, 1944, 1938, 1902, 1881,
1889, 1895, 1883, 1897, 1893, 1894, 1894, 1889, 1881, 1883,
1867, 1871, 1884, 1886, 1883, 1875, 1865, 1868, 1882, 2033,
1868, 1876, 1879, 1860, 1859, 1911, 1858, 1868, 1908, 516,
1867, 1906, 1854, 1865, 1903, 537, 1907, 1842, 1857, 358,
1847, 1863, 1844, 1842, 1845, 1841, 1847, 1838, 1837, 1850,
1843, 1845, 1849, 1848, 1842, 220, 1849, 1844, 1836, 1826,
1841, 1836, 1840, 480, 1838, 1824, 1830, 1837, 1825, 1822,
1821, 525, 1816, 1830, 1829, 1832, 1814, 1822, 539, 2033,
2033, 547, 2033, 2033, 1809, 0, 534, 1811, 559, 555,
1867, 2033, 1818, 546, 2033, 1865, 2033, 1859, 596, 2033,
545, 1799, 1802, 1808, 1860, 1815, 1810, 1813, 1808, 80,
2033, 1810, 590, 1808, 1805, 1806, 323, 1810, 1850, 1798,
1793, 1790, 1786, 1788, 1839, 1796, 1785, 1801, 1835, 1781,
592, 1794, 1794, 1777, 1778, 1791, 1778, 1788, 1783, 1790,
1785, 1770, 564, 1779, 1782, 1777, 322, 1773, 1823, 555,
565, 2033, 1817, 1767, 1766, 1759, 1761, 1765, 1754, 1771,
1760, 1765, 543, 1812, 1765, 534, 1762, 1766, 1764, 1753,
1753, 1765, 570, 1740, 1741, 1762, 580, 1744, 1741, 1755,
1758, 1753, 1739, 1751, 1750, 1749, 1748, 1747, 1746, 476,
1789, 1788, 1787, 1729, 626, 1742, 2033, 2033, 1741, 0,
572, 1729, 1782, 1781, 1737, 1779, 2033, 1725, 1777, 2033,
606, 654, 599, 1776, 1724, 1715, 2033, 1720, 1726, 1729,
1712, 1727, 1714, 1713, 2033, 1723, 1714, 1711, 1723, 590,
1708, 1710, 2033, 1716, 1701, 1703, 1714, 1712, 1707, 642,
1714, 1702, 1695, 1746, 2033, 1693, 1709, 1743, 1747, 1703,
1697, 1699, 1700, 1702, 1736, 1687, 1682, 1681, 1683, 1679,
1675, 599, 1694, 1668, 1675, 1680, 1673, 1689, 1728, 2033,
1673, 1669, 1725, 1676, 1670, 1677, 1662, 1672, 1675, 1664,
1660, 1662, 1657, 2033, 1714, 2033, 1656, 1655, 1648, 1665,
1704, 1649, 1654, 1663, 1657, 1651, 1660, 644, 1697, 1659,
1642, 1642, 1637, 1633, 1639, 1644, 1637, 1645, 1649, 1632,
1690, 1630, 1631, 1630, 1642, 1631, 2033, 2033, 2033, 1631,
2033, 1641, 1677, 1637, 0, 1680, 1628, 2033, 2033, 1625,
2033, 1631, 2033, 624, 623, 655, 2033, 1636, 1670, 1615,
1668, 1613, 1612, 1611, 1618, 1611, 1619, 1622, 1621, 1605,
1620, 1602, 1649, 1616, 1654, 1598, 1600, 1612, 1612, 1611,
2033, 1596, 1593, 1651, 1606, 1598, 1604, 1595, 1603, 2033,
1588, 1599, 1603, 1585, 1599, 467, 1581, 1575, 1580, 1577,
1592, 1591, 1592, 1571, 1581, 1587, 1630, 1585, 1584, 1576,
2033, 1569, 1571, 2033, 1579, 1618, 1617, 16, 1578, 1561,
1562, 1565, 1566, 1557, 2033, 1571, 1557, 677, 1549, 1570,
1567, 1559, 1604, 1556, 1563, 1601, 2033, 1547, 1545, 1559,
1543, 1557, 1560, 1594, 1593, 1592, 1591, 1536, 1589, 1588,
2033, 656, 1550, 1549, 1546, 1546, 1544, 1533, 1535, 2033,
2033, 1580, 1526, 1583, 627, 591, 1524, 1522, 1538, 1579,
642, 1573, 1533, 1571, 1570, 1522, 1516, 1511, 1566, 1526,
1516, 1524, 1562, 1523, 1505, 1513, 1515, 1519, 1556, 1560,
1515, 1514, 2033, 1515, 1508, 1497, 1510, 1513, 1508, 1503,
1508, 1505, 1504, 1500, 1506, 1501, 1544, 1543, 1485, 1496,
1480, 542, 1534, 1490, 1537, 2033, 1536, 1490, 1486, 1481,
1473, 1526, 1487, 1474, 2033, 1474, 91, 245, 356, 476,
553, 648, 596, 623, 2033, 618, 612, 631, 627, 641,
624, 630, 685, 649, 633, 633, 652, 696, 697, 698,
645, 663, 658, 665, 660, 645, 657, 658, 2033, 712,
670, 672, 663, 676, 679, 670, 676, 685, 726, 2033,
722, 698, 685, 686, 680, 2033, 678, 693, 690, 676,
683, 682, 680, 699, 696, 697, 687, 700, 686, 685,
691, 747, 693, 709, 692, 746, 701, 2033, 711, 711,
704, 716, 714, 759, 701, 703, 718, 719, 707, 766,
723, 709, 712, 2033, 2033, 728, 727, 728, 733, 721,
731, 733, 2033, 2033, 733, 735, 739, 726, 724, 742,
729, 729, 780, 730, 788, 2033, 789, 2033, 734, 748,
748, 793, 741, 743, 737, 797, 750, 740, 741, 737,
747, 751, 762, 746, 764, 759, 761, 754, 756, 757,
769, 759, 774, 815, 772, 777, 754, 2033, 766, 767,
781, 771, 818, 766, 781, 781, 2033, 800, 808, 777,
826, 792, 780, 775, 776, 788, 795, 784, 785, 781,
799, 791, 786, 839, 845, 802, 793, 2033, 805, 790,
806, 796, 809, 803, 851, 817, 801, 802, 2033, 818,
821, 804, 806, 864, 807, 2033, 824, 827, 807, 826,
814, 867, 825, 821, 818, 871, 820, 873, 820, 838,
837, 823, 838, 830, 826, 844, 829, 2033, 2033, 837,
884, 837, 2033, 845, 840, 893, 2033, 842, 847, 891,
843, 844, 856, 850, 854, 852, 850, 861, 906, 850,
855, 909, 910, 854, 866, 2033, 854, 862, 860, 857,
858, 867, 879, 863, 877, 879, 880, 896, 901, 883,
869, 871, 871, 891, 890, 881, 870, 887, 894, 937,
879, 939, 886, 890, 2033, 937, 886, 904, 901, 941,
890, 908, 909, 895, 903, 912, 894, 909, 916, 958,
959, 2033, 912, 961, 962, 913, 923, 925, 909, 911,
911, 918, 927, 915, 922, 917, 924, 976, 923, 922,
939, 980, 930, 934, 932, 930, 985, 986, 936, 988,
984, 942, 2033, 947, 940, 931, 950, 944, 939, 949,
946, 951, 947, 959, 2033, 943, 945, 2033, 2033, 945,
1005, 945, 964, 965, 1010, 1011, 964, 949, 970, 952,
957, 964, 997, 988, 1020, 977, 964, 966, 983, 978,
982, 1027, 975, 979, 2033, 976, 2033, 990, 988, 991,
975, 976, 1036, 989, 994, 981, 992, 985, 991, 987,
1005, 1006, 1008, 2033, 2033, 1006, 2033, 1008, 2033, 993,
994, 1013, 1003, 1055, 1012, 1009, 1053, 1017, 1006, 1013,
1018, 1015, 2033, 1013, 1005, 1066, 2033, 1067, 1014, 1021,
1065, 2033, 2033, 1023, 2033, 1014, 1014, 1017, 1031, 1036,
1019, 1030, 1079, 1036, 1037, 1038, 1078, 1034, 1085, 1038,
1087, 2033, 1034, 1089, 1090, 2033, 2033, 1030, 1092, 1051,
1035, 1047, 1037, 1067, 1098, 2033, 1055, 1100, 1047, 1062,
1098, 1050, 2033, 1046, 1062, 1050, 1068, 1056, 1056, 1111,
1068, 2033, 1070, 1069, 1071, 1064, 1073, 1074, 1071, 1061,
1064, 1064, 1123, 1070, 1126, 1127, 1070, 1129, 2033, 1087,
1066, 1081, 1074, 1077, 1090, 1094, 1093, 1139, 1093, 2033,
2033, 1089, 1099, 1085, 1101, 1087, 1148, 1149, 1093, 1103,
1152, 1109, 2033, 1101, 1101, 1103, 1105, 1158, 1101, 2033,
1102, 2033, 1104, 2033, 2033, 1118, 2033, 1112, 1164, 1113,
1166, 1146, 2033, 1163, 2033, 1111, 1119, 1113, 1110, 1113,
1116, 1116, 1112, 1118, 1178, 1126, 2033, 1122, 1181, 1134,
1125, 1140, 1140, 1143, 1143, 1140, 1184, 1147, 2033, 1139,
2033, 2033, 1149, 2033, 1189, 1151, 1152, 1149, 1193, 1141,
1156, 1196, 1158, 2033, 1146, 1146, 1152, 1151, 1163, 1163,
2033, 2033, 1204, 1151, 2033, 1168, 1153, 1153, 1155, 1161,
2033, 1216, 1158, 1168, 1219, 1180, 2033, 1177, 2033, 1196,
1164, 1224, 1225, 1182, 1187, 1169, 1229, 1230, 1231, 1184,
2033, 1174, 1234, 2033, 1172, 1231, 1194, 1190, 1234, 1182,
1187, 1185, 1244, 1200, 1246, 1196, 1248, 1210, 1199, 1193,
1253, 1195, 1204, 1197, 1213, 1258, 1200, 1217, 1202, 1217,
1201, 1259, 1260, 1261, 1208, 1263, 1226, 2033, 1226, 1213,
2033, 1224, 1273, 1244, 1226, 2033, 2033, 1218, 1229, 1278,
2033, 2033, 2033, 1225, 1223, 2033, 1281, 1227, 1278, 1221,
1226, 1287, 1235, 1245, 1246, 2033, 1291, 1244, 2033, 1245,
2033, 1236, 1251, 1239, 2033, 1249, 1250, 1251, 1257, 2033,
1296, 1264, 1257, 1258, 1267, 1249, 1255, 1257, 1311, 1270,
1269, 1261, 1315, 1264, 2033, 1317, 1266, 1319, 1261, 2033,
1268, 1268, 2033, 1272, 1267, 1266, 1326, 1279, 2033, 1323,
1274, 1271, 2033, 1285, 1287, 1289, 1334, 1287, 1284, 1292,
1286, 1339, 1280, 1282, 1290, 1280, 1296, 1297, 1291, 1307,
2033, 1297, 1349, 1308, 2033, 1346, 2033, 1308, 2033, 1348,
1349, 1304, 1312, 1303, 1310, 2033, 1307, 1312, 1310, 1362,
1363, 1320, 1307, 2033, 1322, 1323, 1324, 1325, 2033, 1315,
1327, 1328, 1373, 1315, 1323, 1317, 1325, 1338, 2033, 1315,
1338, 1323, 1323, 1328, 1384, 1332, 1344, 1335, 1344, 1346,
1350, 2033, 2033, 1332, 1392, 1335, 1394, 1336, 1396, 1354,
1398, 1399, 2033, 1395, 1357, 1354, 1359, 1346, 1405, 1342,
1407, 1360, 1365, 2033, 1410, 1367, 1368, 1413, 1370, 1373,
1368, 2033, 1417, 2033, 1370, 2033, 1379, 2033, 2033, 1361,
1421, 1368, 1423, 1366, 2033, 1383, 2033, 1374, 1370, 2033,
1370, 1372, 2033, 1377, 1387, 1380, 2033, 1381, 1375, 1387,
2033, 1383, 2033, 1393, 1387, 1395, 1392, 1383, 1437, 1384,
1392, 1401, 1402, 1403, 1396, 1391, 1392, 1407, 1452, 1399,
1406, 1393, 1408, 1413, 1458, 1459, 1460, 1417, 1462, 1463,
1406, 2033, 1422, 1413, 1427, 1423, 1416, 2033, 2033, 2033,
1470, 2033, 2033, 1471, 1472, 1427, 1426, 1427, 1417, 2033,
2033, 2033, 1477, 1419, 1435, 1480, 2033, 1476, 1425, 2033,
1424, 1426, 1437, 1486, 1435, 2033, 1444, 1489, 2033, 2033,
1495, 1500, 1505, 1510, 1515, 1520, 1525, 1528, 1502, 1507,
1509, 1522
279, 191, 210, 197, 60, 216, 2077, 241, 284, 309,
297, 316, 2060, 212, 321, 345, 326, 2079, 0, 386,
402, 416, 423, 428, 2138, 0, 2138, 442, 447, 241,
242, 302, 269, 315, 303, 2138, 2076, 2117, 2138, 345,
2138, 441, 337, 2063, 2073, 2114, 352, 10, 336, 2067,
339, 242, 346, 360, 399, 2112, 0, 494, 411, 2054,
2059, 2061, 417, 2057, 2046, 2047, 2052, 350, 2062, 2045,
2054, 421, 362, 219, 2048, 2046, 332, 2035, 2093, 422,
2038, 2091, 2031, 2054, 2051, 2051, 2045, 405, 2038, 2036,
2030, 2035, 2029, 431, 2040, 2033, 2024, 2023, 2037, 417,
2075, 2022, 427, 2034, 2037, 2021, 490, 2022, 426, 2034,
2031, 2032, 2030, 2065, 2064, 462, 2010, 2015, 2011, 2003,
2020, 2012, 0, 435, 391, 475, 441, 472, 489, 2011,
2138, 0, 504, 2002, 2005, 2138, 492, 465, 2138, 2059,