diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/config_file.c | 98 | ||||
-rw-r--r-- | util/config_file.h | 22 | ||||
-rw-r--r-- | util/configlexer.c | 4558 | ||||
-rw-r--r-- | util/configlexer.lex | 8 | ||||
-rw-r--r-- | util/configparser.c | 2340 | ||||
-rw-r--r-- | util/configparser.h | 150 | ||||
-rw-r--r-- | util/configparser.y | 113 | ||||
-rw-r--r-- | util/data/msgencode.c | 12 | ||||
-rw-r--r-- | util/data/msgparse.c | 2 | ||||
-rw-r--r-- | util/fptr_wlist.c | 34 | ||||
-rw-r--r-- | util/fptr_wlist.h | 9 | ||||
-rw-r--r-- | util/iana_ports.inc | 5 | ||||
-rw-r--r-- | util/log.c | 8 | ||||
-rw-r--r-- | util/module.h | 31 | ||||
-rw-r--r-- | util/netevent.c | 84 | ||||
-rw-r--r-- | util/netevent.h | 10 | ||||
-rw-r--r-- | util/shm_side/shm_main.c | 79 | ||||
-rw-r--r-- | util/shm_side/shm_main.h | 26 | ||||
-rw-r--r-- | util/timehist.c | 8 | ||||
-rw-r--r-- | util/timehist.h | 4 |
20 files changed, 4100 insertions, 3501 deletions
diff --git a/util/config_file.c b/util/config_file.c index af176929dc35..d0fdb2daaa25 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -178,6 +178,7 @@ config_create(void) cfg->forwards = NULL; #ifdef CLIENT_SUBNET cfg->client_subnet = NULL; + cfg->client_subnet_zone = NULL; cfg->client_subnet_opcode = LDNS_EDNS_CLIENT_SUBNET; cfg->client_subnet_always_forward = 0; cfg->max_client_subnet_ipv4 = 24; @@ -206,6 +207,7 @@ config_create(void) cfg->trust_anchor_file_list = NULL; cfg->trust_anchor_list = NULL; cfg->trusted_keys_file_list = NULL; + cfg->trust_anchor_signaling = 0; cfg->dlv_anchor_file = NULL; cfg->dlv_anchor_list = NULL; cfg->domain_insecure = NULL; @@ -227,6 +229,7 @@ config_create(void) cfg->neg_cache_size = 1 * 1024 * 1024; cfg->local_zones = NULL; cfg->local_zones_nodefault = NULL; + cfg->local_zones_disable_default = 0; cfg->local_data = NULL; cfg->local_zone_overrides = NULL; cfg->unblock_lan_zones = 0; @@ -279,6 +282,14 @@ config_create(void) cfg->dnscrypt_provider = NULL; cfg->dnscrypt_provider_cert = NULL; cfg->dnscrypt_secret_key = NULL; +#ifdef USE_IPSECMOD + cfg->ipsecmod_enabled = 1; + cfg->ipsecmod_ignore_bogus = 0; + cfg->ipsecmod_hook = NULL; + cfg->ipsecmod_max_ttl = 3600; + cfg->ipsecmod_whitelist = NULL; + cfg->ipsecmod_strict = 0; +#endif return cfg; error_exit: config_delete(cfg); @@ -480,6 +491,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST("trust-anchor-file:", trust_anchor_file_list) else S_STRLIST("trust-anchor:", trust_anchor_list) else S_STRLIST("trusted-keys-file:", trusted_keys_file_list) + else S_YNO("trust-anchor-signaling:", trust_anchor_signaling) else S_STR("dlv-anchor-file:", dlv_anchor_file) else S_STRLIST("dlv-anchor:", dlv_anchor_list) else S_STRLIST("domain-insecure:", domain_insecure) @@ -523,6 +535,33 @@ int config_set_option(struct config_file* cfg, const char* opt, /* No client-subnet-always-forward here, module registration depends on * this option. */ #endif +#ifdef USE_DNSTAP + else S_YNO("dnstap-enable:", dnstap) + else S_STR("dnstap-socket-path:", dnstap_socket_path) + else S_YNO("dnstap-send-identity:", dnstap_send_identity) + else S_YNO("dnstap-send-version:", dnstap_send_version) + else S_STR("dnstap-identity:", dnstap_identity) + else S_STR("dnstap-version:", dnstap_version) + else S_YNO("dnstap-log-resolver-query-messages:", + dnstap_log_resolver_query_messages) + else S_YNO("dnstap-log-resolver-response-messages:", + dnstap_log_resolver_response_messages) + else S_YNO("dnstap-log-client-query-messages:", + dnstap_log_client_query_messages) + else S_YNO("dnstap-log-client-response-messages:", + dnstap_log_client_response_messages) + else S_YNO("dnstap-log-forwarder-query-messages:", + dnstap_log_forwarder_query_messages) + else S_YNO("dnstap-log-forwarder-response-messages:", + dnstap_log_forwarder_response_messages) +#endif +#ifdef USE_DNSCRYPT + else S_YNO("dnscrypt-enable:", dnscrypt) + else S_NUMBER_NONZERO("dnscrypt-port:", dnscrypt_port) + else S_STR("dnscrypt-provider:", dnscrypt_provider) + else S_STRLIST("dnscrypt-provider-cert:", dnscrypt_provider_cert) + else S_STRLIST("dnscrypt-secret-key:", dnscrypt_secret_key) +#endif else if(strcmp(opt, "ip-ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val); infra_ip_ratelimit=cfg->ip_ratelimit; @@ -539,6 +578,13 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) else S_YNO("qname-minimisation:", qname_minimisation) else S_YNO("qname-minimisation-strict:", qname_minimisation_strict) +#ifdef USE_IPSECMOD + else S_YNO("ipsecmod-enabled:", ipsecmod_enabled) + else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus) + else if(strcmp(opt, "ipsecmod-max-ttl:") == 0) + { IS_NUMBER_OR_ZERO; cfg->ipsecmod_max_ttl = atoi(val); } + else S_YNO("ipsecmod-strict:", ipsecmod_strict) +#endif else if(strcmp(opt, "define-tag:") ==0) { return config_add_tag(cfg, val); /* val_sig_skew_min and max are copied into val_env during init, @@ -560,15 +606,16 @@ int config_set_option(struct config_file* cfg, const char* opt, cfg->out_ifs = oi; } else { /* unknown or unsupported (from the set_option interface): - * interface, outgoing-interface, access-control, + * interface, outgoing-interface, access-control, * stub-zone, name, stub-addr, stub-host, stub-prime * forward-first, stub-first, forward-ssl-upstream, * stub-ssl-upstream, forward-zone, * name, forward-addr, forward-host, * ratelimit-for-domain, ratelimit-below-domain, - * local-zone-tag, access-control-view - * send-client-subnet client-subnet-always-forward - * max-client-subnet-ipv4 max-client-subnet-ipv6 */ + * local-zone-tag, access-control-view, + * send-client-subnet, client-subnet-always-forward, + * max-client-subnet-ipv4, max-client-subnet-ipv6, ipsecmod_hook, + * ipsecmod_whitelist. */ return 0; } return 1; @@ -834,6 +881,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LST(opt, "trust-anchor-file", trust_anchor_file_list) else O_LST(opt, "trust-anchor", trust_anchor_list) else O_LST(opt, "trusted-keys-file", trusted_keys_file_list) + else O_YNO(opt, "trust-anchor-signaling", trust_anchor_signaling) else O_LST(opt, "dlv-anchor", dlv_anchor_list) else O_LST(opt, "control-interface", control_ifs) else O_LST(opt, "domain-insecure", domain_insecure) @@ -842,11 +890,39 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin) #ifdef CLIENT_SUBNET else O_LST(opt, "send-client-subnet", client_subnet) + else O_LST(opt, "client-subnet-zone", client_subnet_zone) else O_DEC(opt, "max-client-subnet-ipv4", max_client_subnet_ipv4) else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6) else O_YNO(opt, "client-subnet-always-forward:", client_subnet_always_forward) #endif +#ifdef USE_DNSTAP + else O_YNO(opt, "dnstap-enable", dnstap) + else O_STR(opt, "dnstap-socket-path", dnstap_socket_path) + else O_YNO(opt, "dnstap-send-identity", dnstap_send_identity) + else O_YNO(opt, "dnstap-send-version", dnstap_send_version) + else O_STR(opt, "dnstap-identity", dnstap_identity) + else O_STR(opt, "dnstap-version", dnstap_version) + else O_YNO(opt, "dnstap-log-resolver-query-messages", + dnstap_log_resolver_query_messages) + else O_YNO(opt, "dnstap-log-resolver-response-messages", + dnstap_log_resolver_response_messages) + else O_YNO(opt, "dnstap-log-client-query-messages", + dnstap_log_client_query_messages) + else O_YNO(opt, "dnstap-log-client-response-messages", + dnstap_log_client_response_messages) + else O_YNO(opt, "dnstap-log-forwarder-query-messages", + dnstap_log_forwarder_query_messages) + else O_YNO(opt, "dnstap-log-forwarder-response-messages", + dnstap_log_forwarder_response_messages) +#endif +#ifdef USE_DNSCRYPT + else O_YNO(opt, "dnscrypt-enable", dnscrypt) + else O_DEC(opt, "dnscrypt-port", dnscrypt_port) + else O_STR(opt, "dnscrypt-provider", dnscrypt_provider) + else O_LST(opt, "dnscrypt-provider-cert", dnscrypt_provider_cert) + else O_LST(opt, "dnscrypt-secret-key", dnscrypt_secret_key) +#endif else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones) else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) @@ -874,6 +950,14 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) else O_LS2(opt, "access-control-view", acl_view) +#ifdef USE_IPSECMOD + else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled) + else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus) + else O_STR(opt, "ipsecmod-hook", ipsecmod_hook) + else O_DEC(opt, "ipsecmod-max-ttl", ipsecmod_max_ttl) + else O_LST(opt, "ipsecmod-whitelist", ipsecmod_whitelist) + else O_YNO(opt, "ipsecmod-strict", ipsecmod_strict) +#endif /* not here: * outgoing-permit, outgoing-avoid - have list of ports * local-zone - zones and nodefault variables @@ -1131,11 +1215,13 @@ config_delete(struct config_file* cfg) config_delstrlist(cfg->root_hints); #ifdef CLIENT_SUBNET config_delstrlist(cfg->client_subnet); + config_delstrlist(cfg->client_subnet_zone); #endif free(cfg->identity); free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); + free(cfg->python_script); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); @@ -1169,6 +1255,10 @@ config_delete(struct config_file* cfg) free(cfg->dnstap_version); config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); +#ifdef USE_IPSECMOD + free(cfg->ipsecmod_hook); + config_delstrlist(cfg->ipsecmod_whitelist); +#endif free(cfg); } diff --git a/util/config_file.h b/util/config_file.h index 79b094894022..bb7a292050b4 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -176,6 +176,8 @@ struct config_file { /** list of servers we send edns-client-subnet option to and * accept option from, linked list */ struct config_strlist* client_subnet; + /** list of zones we send edns-client-subnet option for */ + struct config_strlist* client_subnet_zone; /** opcode assigned by IANA for edns0-client-subnet option */ uint16_t client_subnet_opcode; /** Do not check whitelist if incoming query contains an ECS record */ @@ -274,6 +276,8 @@ struct config_file { struct config_strlist* dlv_anchor_list; /** insecure domain list */ struct config_strlist* domain_insecure; + /** send key tag query */ + int trust_anchor_signaling; /** if not 0, this value is the validation date for RRSIGs */ int32_t val_date_override; @@ -317,6 +321,8 @@ struct config_file { struct config_str2list* local_zones; /** local zones nodefault list */ struct config_strlist* local_zones_nodefault; + /** do not add any default local zone */ + int local_zones_disable_default; /** local data RRs configured */ struct config_strlist* local_data; /** local zone override types per netblock */ @@ -458,6 +464,22 @@ struct config_file { struct config_strlist* dnscrypt_secret_key; /** dnscrypt provider certs 1.cert */ struct config_strlist* dnscrypt_provider_cert; + + /** IPsec module */ +#ifdef USE_IPSECMOD + /** false to bypass the IPsec module */ + int ipsecmod_enabled; + /** whitelisted domains for ipsecmod */ + struct config_strlist* ipsecmod_whitelist; + /** path to external hook */ + char* ipsecmod_hook; + /** true to proceed even with a bogus IPSECKEY */ + int ipsecmod_ignore_bogus; + /** max TTL for the A/AAAA records that call the hook */ + int ipsecmod_max_ttl; + /** false to proceed even when ipsecmod_hook fails */ + int ipsecmod_strict; +#endif }; /** from cfg username, after daemonise setup performed */ diff --git a/util/configlexer.c b/util/configlexer.c index 0043165c2d2f..b180068c5392 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 221 -#define YY_END_OF_BUFFER 222 +#define YY_NUM_RULES 229 +#define YY_END_OF_BUFFER 230 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -387,246 +387,254 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2165] = +static yyconst flex_int16_t yy_accept[2238] = { 0, - 1, 1, 203, 203, 207, 207, 211, 211, 215, 215, - 1, 1, 222, 219, 1, 201, 201, 220, 2, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 220, - 203, 204, 204, 205, 220, 207, 208, 208, 209, 220, - 214, 211, 212, 212, 213, 220, 215, 216, 216, 217, - 220, 218, 202, 2, 206, 218, 220, 219, 0, 1, - 2, 2, 2, 2, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 203, 0, 207, 0, 214, 0, 211, 215, 0, 218, - 0, 2, 2, 218, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 218, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 77, 219, 219, 219, - 219, 219, 219, 8, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 88, 218, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 218, - 219, 219, 219, 219, 219, 37, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 168, 219, - 14, 15, 219, 18, 17, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 154, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 3, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 218, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 210, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 40, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 41, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 143, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 20, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 102, 219, 210, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 195, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 118, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 101, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 75, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 25, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 38, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 39, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 119, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 28, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 183, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 32, 219, 33, - 219, 219, 219, 78, 219, 79, 219, 219, 76, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 7, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 161, 219, 219, 219, 219, 104, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 29, 219, 219, 219, - - 219, 219, 219, 219, 135, 219, 134, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 16, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 42, 219, 219, - 219, 219, 219, 219, 142, 219, 219, 219, 219, 81, - 80, 219, 219, 219, 219, 219, 219, 219, 219, 129, - 219, 219, 219, 219, 219, 219, 219, 219, 89, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 60, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 64, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 36, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 132, - 133, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 6, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 193, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 26, 219, 219, 219, 219, 219, 219, 219, 219, 125, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 147, 219, 126, 219, 219, 159, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 27, 219, 219, 219, 219, 84, 219, 85, 219, 83, - 219, 219, 219, 219, 219, 219, 219, 219, 99, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 182, 219, 219, 127, 219, 219, 219, 219, 219, 130, - 219, 219, 158, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 74, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 34, 219, 219, 22, 219, - 219, 219, 219, 19, 219, 109, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 49, 51, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 197, 219, 219, 169, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 86, 219, 219, 219, 219, 219, 219, 219, 98, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 103, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 153, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 117, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 113, 219, 120, 219, 219, 219, - 219, 219, 92, 219, 219, 70, 219, 219, 219, 145, - 219, 219, 219, 219, 219, 160, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 174, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 116, 219, 219, 219, 219, 219, 52, 53, 219, 219, - 219, 219, 219, 35, 59, 121, 219, 136, 219, 162, - - 131, 219, 219, 219, 45, 219, 123, 219, 219, 219, - 219, 219, 9, 219, 219, 219, 73, 219, 219, 219, - 219, 187, 219, 144, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 105, 196, 219, 219, 173, 219, 219, 219, 219, 219, - 219, 219, 219, 155, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 122, 219, 219, 219, 44, 46, - - 219, 219, 219, 219, 219, 219, 219, 72, 219, 219, - 219, 219, 185, 219, 192, 219, 219, 219, 219, 219, - 149, 23, 24, 219, 219, 219, 219, 219, 219, 219, - 219, 69, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 151, 148, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 43, - 219, 219, 219, 219, 219, 219, 219, 219, 100, 13, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 12, 219, 219, 21, 219, 219, - 219, 191, 219, 194, 47, 219, 157, 219, 150, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 112, 111, 219, 219, 219, 219, 219, 219, 152, - 146, 219, 219, 198, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 54, 219, 219, 219, 186, 219, - 219, 219, 156, 219, 219, 219, 219, 219, 219, 219, - 219, 48, 219, 219, 219, 82, 219, 106, 108, 137, - 219, 219, 219, 110, 219, 219, 163, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 170, 219, 219, 219, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 138, 219, 219, 184, 219, - 219, 219, 30, 219, 219, 219, 219, 4, 219, 219, - 93, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 166, 219, 219, 219, 219, 219, 219, 199, 219, 219, - 219, 219, 219, 172, 219, 219, 141, 219, 219, 219, - 219, 219, 219, 219, 219, 57, 219, 31, 190, 167, - 219, 219, 11, 219, 219, 219, 219, 219, 219, 139, - 61, 219, 219, 219, 115, 219, 219, 219, 219, 219, - 95, 219, 219, 219, 219, 219, 219, 219, 171, 90, - 219, 87, 219, 219, 219, 63, 67, 62, 219, 55, - - 219, 219, 10, 219, 219, 219, 188, 219, 219, 114, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 68, 66, 219, 56, 219, - 219, 219, 128, 219, 219, 140, 219, 219, 219, 219, - 107, 50, 219, 219, 200, 219, 219, 219, 219, 219, - 219, 91, 65, 96, 97, 58, 219, 189, 219, 219, - 219, 165, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 71, 219, 164, 219, 181, 219, 219, - 219, 219, 219, 219, 5, 219, 219, 219, 219, 219, - - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 94, 219, 219, 219, 219, 219, 219, 124, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 177, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 175, 219, 178, 179, 219, 219, 219, 219, - 219, 176, 180, 0 + 1, 1, 211, 211, 215, 215, 219, 219, 223, 223, + 1, 1, 230, 227, 1, 209, 209, 228, 2, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, + 211, 212, 212, 213, 228, 215, 216, 216, 217, 228, + 222, 219, 220, 220, 221, 228, 223, 224, 224, 225, + 228, 226, 210, 2, 214, 226, 228, 227, 0, 1, + 2, 2, 2, 2, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 211, 0, 215, 0, 222, 0, 219, 223, 0, 226, + 0, 2, 2, 226, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 226, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 226, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 77, + 227, 227, 227, 227, 227, 227, 8, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 88, 226, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 226, 227, 227, 227, 227, 227, 37, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 170, 227, 14, 15, 227, 18, 17, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 156, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 3, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 226, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 218, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 40, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 41, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 145, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 20, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 103, 227, 218, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 197, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 120, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 102, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 75, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 25, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 38, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 39, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 121, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 28, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 185, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 32, 227, 33, 227, 227, 227, 78, 227, 79, 227, + 227, 76, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 7, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 163, 227, 227, 227, 227, 105, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 29, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 137, 227, 136, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 16, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 42, 227, 227, 227, + 227, 227, 227, 144, 227, 227, 227, 227, 81, 80, + 227, 227, 227, 227, 227, 227, 227, 227, 131, 227, + 227, 227, 227, 227, 227, 227, 227, 89, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 60, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 64, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 36, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 134, 135, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 6, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 195, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 26, 227, 227, 227, 227, + 227, 227, 227, 227, 127, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 149, 227, 128, 227, 227, + 161, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 27, 227, 227, 227, 227, + 84, 227, 85, 227, 83, 227, 227, 227, 227, 227, + 227, 227, 227, 100, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 184, 227, 227, 227, 227, + 227, 227, 227, 227, 129, 227, 227, 227, 227, 227, + + 132, 227, 227, 160, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 74, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 34, 227, 227, 22, + 227, 227, 227, 227, 19, 227, 110, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 49, 51, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 199, 227, 227, 171, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 86, 227, 227, 227, 227, 227, 227, 227, 99, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 205, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 104, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 155, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 119, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 115, 227, 122, 227, 227, 227, 227, 227, + 92, 227, 227, 70, 227, 227, 227, 227, 147, 227, + 227, 227, 227, 227, 162, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 176, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 118, + 227, 227, 227, 227, 227, 52, 53, 227, 227, 227, + 227, 227, 35, 227, 227, 227, 227, 227, 59, 123, + 227, 138, 227, 164, 133, 227, 227, 227, 45, 227, + 125, 227, 227, 227, 227, 227, 9, 227, 227, 227, + 73, 227, 227, 227, 227, 189, 227, 146, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 106, 198, 227, 227, + 175, 227, 227, 227, 227, 227, 227, 227, 227, 157, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 208, 227, 124, 227, 227, 227, 44, + 46, 227, 227, 227, 227, 227, 227, 227, 72, 227, + 227, 227, 227, 187, 227, 194, 227, 227, 227, 227, + 227, 151, 23, 24, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 69, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 153, + + 150, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 43, 227, 227, 227, 227, 227, 227, 227, + 227, 101, 13, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 203, 227, 206, 227, 227, 227, 227, 227, + 227, 12, 227, 227, 21, 227, 227, 227, 193, 227, + 196, 47, 227, 159, 227, 152, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 114, + 113, 227, 227, 227, 227, 227, 227, 227, 154, 148, + 227, 227, 200, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 54, 227, 227, 227, 188, 227, 227, + 227, 227, 227, 158, 227, 227, 227, 227, 227, 227, + 227, 227, 48, 227, 227, 227, 82, 227, 107, 227, + 109, 139, 227, 227, 227, 112, 227, 227, 165, 227, + 227, 227, 227, 227, 94, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 172, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 140, 227, + 227, 186, 227, 207, 227, 227, 227, 30, 227, 227, + 227, 227, 4, 227, 227, 93, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 168, 227, 227, 227, + + 227, 227, 227, 201, 227, 227, 227, 227, 227, 174, + 227, 227, 143, 227, 227, 227, 227, 227, 227, 227, + 227, 57, 227, 31, 192, 227, 169, 227, 227, 11, + 227, 227, 227, 227, 227, 227, 141, 61, 227, 227, + 227, 227, 117, 227, 227, 227, 227, 227, 96, 227, + 227, 227, 227, 227, 227, 227, 173, 90, 227, 87, + 227, 227, 227, 63, 67, 62, 227, 55, 227, 227, + 227, 10, 227, 227, 227, 190, 227, 227, 227, 116, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 68, 66, 227, 56, 204, + + 227, 227, 227, 130, 227, 227, 142, 227, 227, 227, + 227, 227, 108, 50, 227, 227, 202, 227, 227, 227, + 227, 227, 227, 91, 65, 97, 98, 58, 227, 191, + 111, 227, 227, 227, 167, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 71, 227, 166, 227, + 183, 227, 227, 227, 227, 227, 227, 5, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 95, 227, 227, 227, 227, + 227, 227, 126, 227, 227, 227, 227, 227, 227, 227, + + 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 179, 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 177, 227, 180, 181, 227, + 227, 227, 227, 227, 178, 182, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -672,493 +680,511 @@ static yyconst YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2179] = +static yyconst flex_uint16_t yy_base[2252] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 473, 390, 96, 6214, 6214, 6214, 109, 111, + 131, 137, 420, 366, 96, 6399, 6399, 6399, 109, 111, 142, 180, 86, 133, 138, 172, 50, 151, 91, 181, 197, 124, 241, 187, 225, 289, 233, 228, 253, 307, - 385, 6214, 6214, 6214, 95, 362, 6214, 6214, 6214, 102, - 331, 364, 6214, 6214, 6214, 311, 317, 6214, 6214, 6214, - 116, 245, 6214, 321, 6214, 265, 328, 221, 334, 160, + 362, 6399, 6399, 6399, 95, 359, 6399, 6399, 6399, 102, + 326, 355, 6399, 6399, 6399, 311, 245, 6399, 6399, 6399, + 116, 221, 6399, 321, 6399, 265, 328, 212, 334, 160, 0, 338, 0, 0, 141, 206, 184, 330, 322, 255, 323, 335, 324, 222, 268, 350, 325, 334, 344, 357, - 358, 352, 367, 364, 389, 160, 361, 388, 394, 214, - - 373, 400, 391, 383, 399, 416, 410, 414, 407, 421, - 437, 424, 448, 425, 434, 178, 431, 464, 441, 460, - 458, 462, 461, 468, 263, 490, 488, 487, 476, 491, - 212, 171, 170, 241, 164, 533, 146, 85, 284, 77, - 539, 543, 0, 509, 511, 534, 526, 536, 523, 530, - 546, 527, 539, 554, 553, 559, 557, 580, 624, 561, - 571, 572, 586, 569, 589, 597, 581, 579, 619, 585, - 609, 610, 646, 612, 627, 570, 622, 661, 630, 626, - 642, 653, 670, 673, 681, 671, 669, 677, 665, 680, - 662, 679, 688, 690, 703, 700, 699, 715, 717, 702, - - 704, 714, 708, 729, 723, 727, 728, 738, 741, 735, - 763, 742, 764, 744, 758, 755, 765, 745, 772, 769, - 760, 784, 761, 789, 778, 782, 792, 810, 813, 578, - 797, 816, 819, 802, 806, 823, 824, 822, 832, 838, - 837, 834, 849, 841, 836, 839, 846, 847, 868, 872, - 853, 866, 859, 881, 873, 876, 883, 886, 878, 902, - 897, 904, 899, 909, 938, 359, 924, 915, 928, 936, - 944, 901, 951, 949, 942, 955, 946, 917, 959, 966, - 961, 971, 970, 984, 987, 977, 994, 996, 999, 998, - 1007, 980, 997, 1017, 1026, 1019, 1071, 1021, 1032, 1043, - - 1030, 1035, 1034, 1044, 1040, 1042, 1055, 1057, 1078, 1084, - 1079, 1100, 1076, 1095, 1101, 1102, 1099, 1092, 1104, 1134, - 1098, 1114, 1121, 1125, 1136, 1140, 1143, 1128, 1142, 1159, - 1149, 1145, 1171, 1151, 1164, 1161, 1174, 1186, 1187, 1173, - 1183, 1189, 1039, 1195, 1202, 1199, 1191, 1200, 1206, 1213, - 1216, 1220, 1230, 1229, 1214, 1236, 6214, 1243, 1227, 1238, - 1240, 1233, 1247, 6214, 1261, 1257, 1255, 1209, 1263, 1273, - 1271, 1260, 1288, 1286, 1296, 1280, 1292, 1295, 1282, 1298, - 1305, 1306, 1310, 1308, 1354, 1316, 1312, 1318, 1345, 1339, - 1329, 1265, 1332, 1347, 1337, 1356, 1363, 1366, 1364, 1383, - - 1387, 1375, 1377, 1393, 6214, 1397, 1376, 1404, 1283, 1395, - 1390, 979, 1411, 1406, 1414, 1415, 1426, 1417, 1425, 1431, - 1420, 1421, 1451, 1442, 1440, 1449, 1465, 1450, 1462, 1470, - 1447, 1466, 1453, 1467, 1469, 1484, 1477, 1483, 1480, 1486, - 1488, 1482, 1476, 1513, 1500, 1504, 1502, 1514, 1517, 1509, - 1529, 1526, 1527, 1533, 1534, 1546, 1542, 1550, 1560, 1561, - 1552, 1555, 1547, 1566, 1573, 1577, 1578, 1557, 1582, 1586, - 1584, 1603, 1588, 1601, 1617, 1595, 1607, 1619, 1602, 1615, - 1622, 1614, 1627, 1636, 1637, 1618, 1648, 1639, 1653, 1642, - 1644, 1649, 1652, 1657, 1647, 1663, 1673, 1667, 1666, 1697, - - 1677, 1679, 1700, 1699, 1704, 1702, 1693, 1692, 1708, 1705, - 1717, 1726, 1732, 1735, 1723, 1736, 1738, 1731, 1742, 1749, - 1752, 1753, 1725, 1774, 1762, 6214, 1758, 1761, 1766, 1787, - 1778, 1776, 1792, 1788, 1779, 1782, 1800, 1843, 6214, 1784, - 6214, 6214, 1795, 6214, 6214, 1822, 1802, 1826, 1815, 1832, - 1805, 1892, 1836, 1819, 1827, 1839, 1847, 1844, 1849, 1860, - 1858, 1879, 1876, 1875, 1885, 1895, 1874, 1906, 1889, 1908, - 1907, 1913, 1903, 1929, 1921, 1920, 1923, 1944, 1941, 1842, - 1934, 1948, 1947, 1949, 1950, 1942, 1959, 1955, 1969, 1963, - 1956, 1971, 1954, 1974, 6214, 1985, 1986, 1996, 1992, 1989, - - 2001, 1990, 1991, 1980, 2022, 6214, 2007, 2008, 2016, 2034, - 2017, 2020, 2019, 2028, 2036, 2046, 2024, 2035, 2044, 2047, - 2043, 2052, 2056, 2062, 2064, 2081, 2092, 2084, 2071, 2083, - 2089, 2072, 2096, 2101, 2099, 2086, 2087, 2106, 2098, 2107, - 2114, 2112, 2120, 2133, 2117, 2116, 2124, 2122, 2125, 2171, - 2156, 2144, 2139, 2143, 2173, 2163, 2167, 2175, 2158, 2179, - 2184, 2181, 2207, 2186, 2183, 2200, 2203, 2219, 2231, 2228, - 75, 2258, 2223, 2224, 2226, 2230, 2244, 2233, 2246, 2247, - 2249, 2251, 2236, 2271, 6214, 2252, 2279, 2273, 2267, 2288, - 2285, 2286, 2287, 2294, 2283, 2307, 2301, 2313, 2302, 2310, - - 2311, 2326, 2327, 2306, 6214, 2325, 2323, 2328, 2329, 2343, - 2352, 2354, 2351, 2340, 2366, 2361, 6214, 2349, 2377, 2379, - 2382, 2375, 2370, 2376, 2369, 2378, 2392, 2373, 2403, 2397, - 2406, 2409, 2415, 6214, 2393, 2407, 2422, 2429, 2430, 2419, - 2440, 2426, 2432, 2425, 2434, 2436, 2453, 2455, 6214, 2450, - 2459, 2454, 2457, 2478, 2480, 2461, 2474, 2483, 2471, 2477, - 2481, 291, 2482, 2485, 2492, 2472, 6214, 2495, 68, 2488, - 2498, 2496, 2531, 2533, 2525, 2532, 2537, 2521, 2522, 2539, - 2538, 2527, 2540, 2541, 2551, 2545, 2561, 2558, 2571, 2559, - 2589, 6214, 2554, 2582, 2583, 2585, 2588, 2566, 2586, 2596, - - 2573, 2602, 2606, 6214, 2620, 2623, 2615, 2616, 2611, 2621, - 2632, 2628, 2618, 2635, 2626, 2643, 2645, 2641, 2653, 2665, - 6214, 2651, 2655, 2667, 2657, 2676, 2678, 2691, 2666, 2683, - 2682, 2688, 2686, 2698, 2684, 2705, 2709, 2710, 2715, 2716, - 2722, 2708, 2718, 2724, 2717, 2712, 2743, 2745, 2747, 2749, - 2772, 2766, 153, 2751, 6214, 2756, 2758, 2750, 2755, 2771, - 2770, 2787, 2782, 2794, 2789, 2791, 2795, 2806, 2785, 2815, - 2807, 2811, 2825, 6214, 2832, 2822, 2817, 2839, 2821, 2840, - 2838, 2829, 2845, 2837, 2853, 2847, 2856, 2859, 2851, 2865, - 2866, 2862, 6214, 2881, 2884, 2885, 2886, 2882, 2876, 2883, - - 2897, 2879, 2887, 2878, 2909, 2905, 2896, 2903, 2906, 2911, - 2926, 2917, 2914, 2913, 2930, 2945, 2928, 2943, 6214, 2940, - 2965, 2941, 2953, 2949, 2956, 2964, 2977, 2967, 2978, 2980, - 2976, 2966, 2973, 2991, 2990, 2992, 2993, 6214, 2998, 2997, - 2970, 3011, 3007, 3012, 3016, 3014, 3025, 3028, 3039, 3029, - 3036, 3048, 3038, 3040, 3043, 3054, 3056, 3066, 3067, 3076, - 6214, 3069, 3074, 3070, 3071, 3080, 3073, 3063, 3113, 3115, - 3072, 3098, 3099, 3101, 3107, 3095, 3104, 3105, 3129, 3108, - 3114, 3124, 3130, 3125, 3132, 3131, 3135, 3134, 3155, 3165, - 3163, 3170, 3156, 3162, 3159, 3185, 6214, 3158, 3184, 3175, - - 3176, 3189, 3186, 3192, 3195, 3182, 3207, 6214, 3199, 6214, - 3216, 3222, 3229, 6214, 3225, 6214, 3228, 3214, 6214, 3232, - 3237, 3224, 3220, 3226, 3231, 3246, 3254, 3256, 3248, 3269, - 3249, 3263, 3273, 3259, 3275, 6214, 3279, 3264, 3285, 3283, - 3287, 3288, 3293, 3294, 3311, 3297, 3320, 3318, 3298, 3307, - 3333, 6214, 3315, 3331, 3332, 3330, 6214, 3328, 3338, 3340, - 3319, 3346, 3345, 3350, 3349, 3368, 3358, 3365, 3372, 3375, - 3357, 3384, 3388, 3389, 3373, 3385, 3383, 3398, 3400, 3399, - 3396, 3401, 3420, 3416, 3411, 3414, 3415, 3410, 3422, 3427, - 3431, 3445, 3430, 3432, 3441, 3443, 6214, 3453, 3440, 3468, - - 3454, 3458, 3466, 3467, 6214, 3484, 6214, 3449, 3486, 3488, - 3487, 3470, 3493, 3491, 3494, 3500, 3497, 3513, 3517, 3508, - 3512, 3510, 3511, 3514, 3526, 3531, 6214, 3520, 3530, 3550, - 3536, 3553, 3549, 3559, 3555, 3565, 3566, 6214, 3570, 3572, - 3573, 3579, 3576, 3582, 6214, 3575, 3578, 3585, 3604, 6214, - 6214, 3577, 3600, 3601, 3602, 3597, 3623, 3603, 3615, 6214, - 3621, 3612, 3622, 3631, 3639, 3640, 3628, 3629, 6214, 3642, - 3638, 3647, 3655, 3656, 3658, 3654, 3660, 3659, 3663, 3674, - 3671, 3651, 3688, 3676, 6214, 3689, 3684, 3696, 3687, 3703, - 3686, 3690, 3704, 3719, 3700, 3698, 3713, 3729, 3726, 3718, - - 3727, 3741, 3749, 3731, 3740, 3723, 3747, 3737, 3760, 3745, - 3763, 3767, 3778, 3774, 6214, 3783, 3762, 3786, 3770, 3779, - 3785, 3787, 3796, 3805, 3800, 3801, 3804, 3806, 6214, 3808, - 3802, 3809, 3811, 3813, 3833, 3822, 3828, 3836, 3825, 6214, - 6214, 3832, 3835, 3854, 3843, 3860, 3862, 3846, 3864, 3848, - 3863, 6214, 3873, 3881, 3866, 3875, 3885, 3889, 3888, 3890, - 3887, 3877, 3884, 3898, 3904, 3900, 3893, 3920, 3911, 3924, - 6214, 3913, 3914, 3916, 3938, 3927, 3930, 3936, 3956, 3949, - 3931, 3947, 3948, 3955, 3964, 3978, 3975, 3954, 3965, 3989, - 6214, 3973, 3982, 3981, 3962, 3995, 3974, 4002, 3991, 6214, - - 4007, 3997, 4006, 4011, 3999, 4020, 4015, 4012, 4022, 4018, - 6214, 4026, 6214, 4029, 4023, 6214, 4024, 4040, 4041, 4034, - 4055, 4057, 4044, 4056, 4048, 4050, 4068, 4071, 4078, 4067, - 6214, 4073, 4062, 4077, 4079, 6214, 4090, 6214, 4093, 6214, - 4087, 4083, 4116, 4101, 4120, 4117, 4122, 4115, 6214, 4124, - 4105, 4126, 4128, 4112, 4129, 4145, 4147, 4108, 4148, 4160, - 6214, 4142, 4150, 6214, 4168, 4138, 4153, 4176, 4175, 6214, - 4169, 4183, 6214, 4174, 4191, 4187, 4189, 4190, 4199, 4202, - 4193, 4203, 4227, 4219, 4212, 4220, 6214, 4214, 4218, 4235, - 4236, 4229, 4222, 4241, 4238, 4246, 4245, 4252, 4260, 4265, - - 4256, 4255, 4266, 4269, 4279, 6214, 4262, 4281, 6214, 4282, - 4270, 4280, 4283, 6214, 4294, 6214, 4296, 4297, 4289, 4306, - 4311, 4310, 4320, 4309, 4326, 4327, 4318, 4340, 4335, 4324, - 6214, 6214, 4334, 4348, 4341, 4352, 4355, 4353, 4342, 4369, - 4361, 4372, 4368, 6214, 4370, 4358, 6214, 4359, 4376, 4371, - 4387, 4386, 4388, 4393, 4389, 4400, 4392, 4405, 4396, 4398, - 6214, 4411, 4401, 4415, 4416, 4419, 4414, 4427, 6214, 4432, - 4445, 4449, 4437, 4441, 4443, 4457, 4460, 4461, 4454, 4465, - 4462, 4482, 4471, 4473, 4480, 4474, 4486, 4477, 4497, 4499, - 4488, 4484, 6214, 4501, 4508, 4498, 4510, 4496, 4513, 4509, - - 4515, 4527, 4526, 4523, 4528, 4532, 6214, 4529, 4525, 4536, - 4530, 4560, 4543, 4564, 4546, 4561, 4553, 4570, 4558, 4575, - 6214, 4557, 4576, 4565, 4573, 4578, 4596, 4602, 4594, 4603, - 4605, 4597, 4588, 4606, 6214, 4598, 6214, 4613, 4615, 4624, - 4626, 4628, 6214, 4629, 4637, 6214, 4640, 4604, 4645, 6214, - 4655, 4654, 4641, 4651, 4660, 6214, 4665, 4664, 4671, 4670, - 4662, 4673, 4668, 4679, 4675, 4682, 6214, 4695, 4701, 4705, - 4703, 4691, 4692, 4700, 4709, 4696, 4710, 4722, 4718, 4707, - 6214, 4717, 4741, 4734, 4739, 4748, 6214, 6214, 4740, 4752, - 4755, 4730, 4761, 6214, 6214, 6214, 4759, 6214, 4745, 6214, - - 6214, 4760, 4764, 4770, 6214, 4771, 6214, 4781, 4777, 4768, - 4772, 4788, 6214, 4782, 4790, 4800, 6214, 4797, 4808, 4789, - 4795, 6214, 4812, 6214, 4813, 4818, 4820, 4817, 4809, 4816, - 4821, 4831, 4832, 4838, 4837, 4824, 4853, 4843, 4844, 4848, - 4857, 4841, 4863, 4858, 4846, 4859, 4864, 4868, 4882, 4873, - 4884, 4880, 4875, 4885, 4900, 4905, 4909, 4878, 4913, 4915, - 6214, 6214, 4899, 4907, 6214, 4901, 4904, 4911, 4919, 4920, - 4930, 4934, 4953, 6214, 4951, 4946, 4940, 4956, 4944, 4947, - 4957, 4960, 4943, 4964, 4968, 4974, 4970, 4978, 4977, 4967, - 4980, 4986, 5003, 5007, 6214, 4989, 4990, 4992, 6214, 6214, - - 4994, 5015, 5012, 5013, 5004, 5024, 5025, 6214, 5017, 5039, - 5026, 5033, 6214, 5047, 6214, 5048, 5031, 5054, 5052, 5061, - 6214, 6214, 6214, 5062, 5042, 5055, 5056, 5066, 5067, 5059, - 5077, 6214, 5081, 5075, 5082, 5086, 5076, 5097, 5093, 5105, - 5111, 5112, 5114, 5103, 5116, 5119, 6214, 6214, 5108, 5131, - 5120, 5127, 5129, 5135, 5141, 5134, 5128, 5146, 5145, 6214, - 5156, 5148, 5147, 5158, 5155, 5160, 5178, 5161, 6214, 6214, - 5162, 5173, 5175, 5190, 5176, 5192, 5184, 5204, 5188, 5205, - 5139, 5210, 5206, 5208, 6214, 5203, 5211, 6214, 5219, 5202, - 5227, 6214, 5217, 6214, 6214, 5225, 6214, 5228, 6214, 5229, - - 5246, 5253, 5254, 5258, 5259, 5260, 5243, 5250, 5267, 5263, - 5262, 6214, 6214, 5272, 5255, 5265, 5270, 5275, 5279, 6214, - 6214, 5290, 5293, 6214, 5276, 5291, 5299, 5289, 5292, 5297, - 5313, 5302, 5306, 5318, 5324, 5329, 5331, 5326, 5338, 5327, - 5323, 5335, 5340, 5341, 6214, 5346, 5352, 5345, 6214, 5366, - 5370, 5368, 6214, 5362, 5378, 5379, 5372, 5369, 5391, 5385, - 5392, 6214, 5394, 5400, 5402, 6214, 5388, 6214, 6214, 6214, - 5411, 5419, 5408, 6214, 5418, 5429, 6214, 5422, 5415, 5412, - 5407, 5443, 5436, 5447, 5437, 5434, 5449, 5440, 5467, 5441, - 5465, 6214, 5450, 5456, 5472, 5460, 5474, 5475, 5464, 5470, - - 5482, 5481, 5477, 5488, 5487, 6214, 5495, 5510, 6214, 5512, - 5502, 5514, 6214, 5520, 5501, 5500, 5505, 6214, 5525, 5517, - 6214, 5513, 5534, 5536, 5530, 5542, 5539, 5538, 5540, 5555, - 6214, 5548, 5544, 5547, 5568, 5569, 5561, 6214, 5573, 5558, - 5585, 5575, 5584, 6214, 5589, 5571, 6214, 5594, 5596, 5583, - 5598, 5607, 5608, 5609, 5610, 6214, 5613, 6214, 6214, 6214, - 5600, 5617, 6214, 5614, 5612, 5611, 5620, 5632, 5628, 6214, - 6214, 5635, 5646, 5645, 6214, 5634, 5637, 5647, 5636, 5659, - 6214, 5658, 5649, 5653, 5651, 5670, 5662, 5663, 6214, 6214, - 5679, 6214, 5682, 5691, 5696, 6214, 6214, 6214, 5701, 6214, - - 5704, 5703, 6214, 5705, 5690, 5697, 6214, 5712, 5698, 6214, - 5702, 5710, 5715, 5721, 5722, 5718, 5731, 5741, 5725, 5729, - 5730, 5748, 5749, 5740, 5755, 6214, 6214, 5761, 6214, 5762, - 5764, 5765, 6214, 5757, 5769, 6214, 5758, 5771, 5768, 5773, - 6214, 6214, 5776, 5784, 6214, 5779, 5788, 5785, 5782, 5786, - 5789, 6214, 6214, 6214, 6214, 6214, 5815, 6214, 5803, 5799, - 5806, 6214, 5800, 5797, 5809, 5821, 5825, 5828, 5812, 5826, - 5831, 5838, 5845, 5856, 5858, 5857, 5855, 5861, 5848, 5847, - 5868, 5863, 5869, 6214, 5864, 6214, 5874, 6214, 5875, 5881, - 5885, 5883, 5886, 5884, 6214, 5891, 5910, 5888, 5896, 5904, - - 5901, 5911, 5922, 5906, 5929, 5934, 5937, 5940, 5941, 5931, - 5944, 5948, 6214, 5952, 5936, 5938, 5956, 5947, 5963, 6214, - 5965, 5961, 5962, 5972, 5977, 5982, 5975, 5990, 5995, 5993, - 5999, 5992, 6000, 6003, 6008, 5997, 6023, 6012, 6214, 6024, - 6027, 6017, 6021, 6033, 6022, 6026, 6046, 6052, 6050, 6062, - 6064, 6058, 6214, 6061, 6214, 6214, 6070, 6059, 6063, 6069, - 6071, 6214, 6214, 6214, 6122, 6129, 6136, 6143, 6150, 100, - 6157, 6164, 6171, 6178, 6185, 6192, 6199, 6206 + 358, 352, 367, 364, 389, 385, 369, 393, 394, 214, + + 373, 402, 128, 400, 403, 419, 414, 399, 435, 420, + 443, 422, 449, 431, 441, 178, 436, 453, 459, 416, + 461, 463, 456, 469, 263, 487, 488, 480, 477, 497, + 170, 284, 164, 241, 160, 514, 174, 85, 367, 77, + 534, 541, 0, 514, 504, 518, 512, 513, 515, 523, + 542, 526, 540, 556, 550, 551, 548, 560, 604, 561, + 539, 559, 565, 571, 568, 588, 582, 585, 590, 583, + 606, 609, 636, 617, 599, 623, 576, 633, 652, 621, + 644, 638, 635, 650, 648, 662, 660, 657, 666, 668, + 684, 651, 683, 679, 669, 687, 682, 685, 699, 703, + + 686, 721, 709, 725, 713, 720, 716, 726, 718, 712, + 740, 743, 747, 744, 735, 745, 750, 748, 749, 754, + 770, 751, 765, 762, 768, 783, 773, 784, 792, 800, + 804, 781, 802, 811, 789, 807, 810, 816, 806, 809, + 821, 828, 823, 836, 849, 825, 838, 832, 833, 857, + 851, 843, 860, 848, 868, 859, 871, 855, 862, 876, + 878, 891, 883, 894, 886, 895, 926, 676, 913, 903, + 910, 905, 922, 912, 939, 932, 930, 941, 936, 934, + 947, 956, 949, 970, 959, 973, 974, 953, 966, 981, + 975, 983, 986, 996, 1003, 1005, 1017, 1008, 1062, 1006, + + 1015, 1055, 1004, 1010, 1012, 1033, 1043, 1034, 1039, 1048, + 1052, 1066, 1058, 1045, 1063, 1075, 1082, 1093, 1072, 1090, + 1102, 1113, 1095, 1100, 1103, 1104, 1123, 1117, 1122, 1110, + 1124, 1147, 1127, 1130, 1154, 1150, 1137, 1139, 1155, 1166, + 1168, 1151, 1174, 1163, 1179, 1178, 1188, 1152, 1195, 1183, + 1187, 1198, 1196, 1197, 1213, 1211, 1215, 1200, 1227, 6399, + 1229, 1216, 1224, 1236, 1226, 1238, 6399, 1240, 1241, 1235, + 1257, 1262, 1264, 1252, 1267, 1279, 1277, 1283, 1256, 1276, + 1268, 1265, 1278, 1284, 1295, 1296, 1297, 1343, 1294, 1306, + 1302, 1341, 1327, 1311, 1333, 1315, 1336, 1305, 1338, 1357, + + 1329, 1352, 1361, 1371, 1363, 1368, 1375, 6399, 1387, 1358, + 1385, 1376, 1379, 1396, 1400, 1360, 1393, 1416, 1401, 1412, + 1402, 1420, 1419, 1414, 1410, 1450, 1421, 1435, 1436, 1443, + 1451, 1454, 1460, 1437, 1461, 1440, 1448, 1464, 1470, 1465, + 1453, 1467, 1462, 1478, 1474, 1476, 1499, 1486, 1509, 1494, + 1495, 1503, 1501, 1505, 1489, 1514, 1516, 1529, 1513, 1539, + 1532, 1536, 1546, 1543, 1537, 1542, 1530, 1556, 1558, 1564, + 1560, 1550, 1570, 1563, 1569, 1577, 1583, 1588, 1603, 1587, + 1589, 1604, 1590, 1596, 1615, 1595, 1614, 1626, 1611, 1610, + 1622, 1621, 1623, 1629, 1636, 1638, 1639, 1651, 1634, 1649, + + 1650, 1652, 1658, 1663, 1653, 1656, 1686, 1665, 1677, 1684, + 1678, 1674, 1690, 1699, 1692, 1700, 1704, 1705, 1711, 1701, + 1713, 1698, 1714, 1737, 1740, 1741, 1725, 1750, 1735, 6399, + 1728, 1753, 1734, 1756, 1763, 1739, 1758, 1768, 1761, 1764, + 1772, 1815, 6399, 1767, 6399, 6399, 1781, 6399, 6399, 1787, + 1795, 1808, 1803, 1816, 1770, 1864, 1806, 1805, 1818, 1788, + 1843, 1821, 1822, 1851, 1835, 1857, 1854, 1869, 1862, 1873, + 1878, 1861, 1870, 1884, 1887, 1900, 1911, 1898, 1901, 1842, + 1907, 1916, 1918, 1917, 1925, 1928, 1923, 1924, 1929, 1933, + 1936, 1942, 1951, 1940, 1961, 1953, 1957, 1971, 1956, 6399, + + 1963, 1964, 1967, 1974, 1968, 1976, 1978, 1987, 1983, 2005, + 6399, 2009, 2012, 1992, 2010, 1997, 2001, 1995, 2006, 2020, + 2023, 2028, 2022, 2042, 2040, 2043, 2053, 2031, 2044, 2047, + 2035, 2065, 2062, 2056, 2070, 2067, 2060, 2076, 2068, 2093, + 2080, 2087, 2106, 2085, 2110, 2095, 2111, 2101, 2114, 2102, + 2107, 2112, 2115, 2103, 2160, 2145, 2143, 2137, 2130, 2157, + 2141, 2162, 2164, 2159, 2166, 2173, 2170, 2194, 2190, 2187, + 2189, 2188, 2200, 2216, 2213, 75, 2243, 2207, 2215, 2204, + 2211, 2229, 2227, 2231, 2234, 2233, 2236, 2241, 2260, 6399, + 2240, 2250, 2246, 2259, 2279, 2276, 2266, 2274, 2275, 2278, + + 2293, 2286, 2271, 2292, 2280, 2301, 2289, 2305, 2316, 2323, + 6399, 2312, 2310, 2313, 2318, 2330, 2339, 2341, 2338, 2348, + 2328, 2321, 6399, 2343, 2369, 2350, 2360, 2353, 2352, 2368, + 2387, 2364, 2382, 2371, 2388, 2373, 2396, 2397, 2391, 6399, + 2398, 2390, 2399, 2407, 2412, 2395, 2424, 2417, 2418, 2416, + 2425, 2446, 2442, 2444, 6399, 2432, 2452, 2445, 2441, 2451, + 2462, 2443, 2461, 2460, 2448, 2470, 2469, 291, 2468, 2482, + 2471, 2474, 6399, 2473, 68, 2488, 2489, 2483, 2510, 2511, + 2507, 2518, 2509, 2508, 2513, 2516, 2517, 2506, 2535, 2531, + 2534, 2523, 2537, 2538, 2549, 2540, 2552, 6399, 2562, 2561, + + 2565, 2567, 2574, 2573, 2576, 2570, 2586, 2601, 2588, 6399, + 2596, 2610, 2600, 2602, 2592, 2615, 2613, 2604, 2626, 2625, + 2621, 2629, 2634, 2631, 2640, 2641, 6399, 2627, 2655, 2656, + 2643, 2654, 2653, 2679, 2666, 2657, 2662, 2687, 2711, 2681, + 2686, 2702, 2698, 2696, 2691, 2704, 2705, 2732, 2715, 2731, + 2712, 2727, 2737, 2750, 2753, 2744, 2748, 2774, 2768, 153, + 2759, 6399, 2762, 2757, 2760, 2764, 2803, 2793, 2795, 2787, + 2800, 2797, 2798, 2809, 2805, 2801, 2824, 2813, 2822, 2816, + 6399, 2838, 2839, 2827, 2842, 2828, 2847, 2852, 2840, 2858, + 2843, 2854, 2864, 2855, 2875, 2862, 2871, 2885, 2870, 6399, + + 2758, 2867, 2873, 2898, 2886, 2882, 2897, 2896, 2891, 2894, + 2893, 2920, 2912, 2907, 2917, 2919, 2913, 2935, 2910, 2923, + 2924, 2940, 2949, 2938, 2947, 6399, 2951, 2971, 2946, 2956, + 2954, 2962, 2979, 2983, 2972, 2992, 2989, 2990, 2975, 2982, + 2978, 2995, 2997, 2998, 6399, 2999, 3011, 3012, 3020, 3019, + 3021, 3022, 3024, 3035, 3007, 3039, 3034, 3041, 3053, 3042, + 3049, 3051, 3060, 3058, 3078, 3073, 3082, 6399, 3075, 3084, + 3077, 3071, 3076, 3079, 3100, 3092, 3098, 3087, 3103, 3109, + 3105, 3131, 3133, 3117, 3119, 3120, 3121, 3102, 3115, 3130, + 3146, 3148, 3134, 3135, 3136, 3150, 3145, 3157, 3156, 3173, + + 3167, 3175, 3185, 3183, 3186, 3176, 3182, 3179, 3202, 6399, + 3200, 3195, 3199, 3218, 3203, 3205, 3206, 3216, 3233, 3237, + 6399, 3222, 6399, 3234, 3241, 3246, 6399, 3244, 6399, 3253, + 3238, 6399, 3252, 3256, 3243, 3247, 3248, 3271, 3263, 3259, + 3273, 3267, 3290, 3266, 3281, 3293, 3282, 3302, 6399, 3295, + 3294, 3296, 3305, 3308, 3311, 3316, 3317, 3320, 3321, 3328, + 3322, 3347, 3339, 3350, 6399, 3337, 3346, 3342, 3354, 6399, + 3338, 3355, 3366, 3352, 3357, 3368, 3363, 3365, 3397, 3381, + 3386, 3387, 3399, 3380, 3398, 3411, 3408, 3392, 3402, 3413, + 3416, 3412, 3425, 3418, 3429, 3422, 3442, 3428, 3430, 3431, + + 3439, 3440, 3452, 3449, 3468, 3445, 3455, 3456, 3463, 6399, + 3459, 3467, 3466, 3495, 3473, 3485, 3477, 3489, 3494, 3490, + 3502, 3515, 3492, 6399, 3498, 6399, 3506, 3510, 3520, 3535, + 3522, 3534, 3528, 3537, 3529, 3551, 3543, 3555, 3553, 3547, + 3556, 3554, 3562, 3561, 3573, 6399, 3532, 3568, 3590, 3581, + 3583, 3588, 3601, 3613, 3587, 3606, 6399, 3603, 3608, 3612, + 3604, 3628, 3615, 6399, 3607, 3642, 3631, 3638, 6399, 6399, + 3632, 3637, 3633, 3639, 3643, 3655, 3640, 3658, 6399, 3611, + 3659, 3671, 3672, 3682, 3683, 3654, 3668, 6399, 3665, 3693, + 3686, 3689, 3685, 3699, 3698, 3674, 3710, 3707, 3704, 3702, + + 3728, 3727, 3732, 6399, 3731, 3724, 3739, 3729, 3738, 3723, + 3720, 3734, 3748, 3755, 3750, 3756, 3767, 3765, 3758, 3761, + 3773, 3786, 3763, 3777, 3775, 3793, 3788, 3797, 3785, 3807, + 3805, 3791, 3813, 6399, 3815, 3799, 3824, 3800, 3818, 3828, + 3829, 3834, 3846, 3819, 3827, 3836, 3842, 6399, 3872, 3823, + 3851, 3857, 3855, 3854, 3866, 3856, 3850, 3879, 3864, 3887, + 3874, 3878, 3895, 3904, 6399, 6399, 3898, 3889, 3908, 3897, + 3902, 3911, 3892, 3925, 3906, 3914, 6399, 3923, 3916, 3922, + 3933, 3949, 3951, 3948, 3953, 3945, 3936, 3943, 3952, 3963, + 3947, 3960, 3967, 3946, 3978, 6399, 3977, 3984, 3981, 3993, + + 3995, 3994, 4002, 4020, 4006, 3989, 4005, 3987, 4017, 4015, + 4040, 4022, 4012, 4029, 4023, 6399, 4033, 4039, 4042, 4026, + 4053, 4030, 4060, 4047, 6399, 4058, 4063, 4062, 4071, 4055, + 4078, 4070, 4072, 4086, 4074, 6399, 4079, 6399, 4090, 4082, + 6399, 4088, 4095, 4096, 4099, 4109, 4112, 4098, 4115, 4110, + 4111, 4125, 4126, 4121, 4119, 6399, 4142, 4122, 4123, 4135, + 6399, 4147, 6399, 4145, 6399, 4148, 4150, 4170, 4149, 4167, + 4171, 4178, 4172, 6399, 4175, 4159, 4183, 4176, 4187, 4177, + 4201, 4203, 4191, 4204, 4214, 6399, 4202, 4209, 4196, 4207, + 4212, 4223, 4238, 4231, 6399, 4240, 4235, 4236, 4250, 4249, + + 6399, 4248, 4259, 6399, 4252, 4268, 4247, 4264, 4278, 4282, + 4284, 4267, 4270, 4197, 4293, 4279, 4291, 6399, 4283, 4294, + 4301, 4303, 4300, 4312, 4276, 4317, 4311, 4321, 4323, 4335, + 4325, 4339, 4326, 4343, 4345, 4344, 6399, 4350, 4352, 6399, + 4360, 4338, 4349, 4353, 6399, 4372, 6399, 4380, 4374, 4363, + 4366, 4392, 4394, 4395, 4379, 4393, 4399, 4396, 4417, 4400, + 4412, 6399, 6399, 4410, 4427, 4402, 4414, 4433, 4431, 4422, + 4438, 4441, 4445, 4447, 6399, 4444, 4430, 6399, 4437, 4451, + 4458, 4461, 4477, 4466, 4470, 4463, 4483, 4479, 4490, 4465, + 4480, 6399, 4493, 4473, 4474, 4497, 4506, 4503, 4507, 6399, + + 4504, 4502, 4529, 4522, 4523, 4525, 4539, 4536, 4541, 4530, + 4531, 4546, 4566, 4553, 4555, 6399, 4556, 4549, 4550, 4567, + 4581, 4584, 4571, 4585, 4568, 4589, 4591, 4587, 4573, 6399, + 4594, 4603, 4588, 4604, 4602, 4616, 4606, 4623, 4610, 4608, + 4617, 4619, 4625, 6399, 4621, 4630, 4640, 4652, 4642, 4643, + 4645, 4644, 4651, 4634, 4672, 4654, 4674, 6399, 4665, 4670, + 4659, 4680, 4667, 4690, 4691, 4683, 4697, 4699, 4700, 4702, + 4710, 4715, 6399, 4694, 6399, 4703, 4727, 4718, 4731, 4729, + 6399, 4723, 4725, 6399, 4735, 4737, 4733, 4745, 6399, 4741, + 4758, 4746, 4765, 4769, 6399, 4770, 4774, 4786, 4782, 4773, + + 4788, 4771, 4780, 4772, 4801, 6399, 4799, 4792, 4805, 4806, + 4797, 4800, 4798, 4804, 4814, 4818, 4841, 4831, 4822, 6399, + 4826, 4838, 4851, 4844, 4846, 6399, 6399, 4845, 4853, 4857, + 4829, 4861, 6399, 4870, 4856, 4864, 4863, 4868, 6399, 6399, + 4866, 6399, 4867, 6399, 6399, 4887, 4891, 4898, 6399, 4899, + 6399, 4905, 4901, 4890, 4886, 4904, 6399, 4888, 4910, 4911, + 6399, 4912, 4915, 4923, 4925, 6399, 4916, 6399, 4919, 4924, + 4939, 4928, 4931, 4942, 4948, 4927, 4959, 4960, 4949, 4946, + 4962, 4958, 4965, 4967, 4966, 4976, 4975, 4979, 4973, 4972, + 4987, 4983, 4988, 4997, 5015, 5004, 4999, 5005, 5006, 5018, + + 5014, 5025, 5031, 5019, 5020, 5034, 6399, 6399, 5032, 5026, + 6399, 5040, 5047, 5044, 5048, 5042, 5052, 5055, 5069, 6399, + 5049, 5071, 5063, 5076, 5074, 5067, 5084, 5088, 5086, 5091, + 5106, 5093, 5096, 5094, 5098, 5119, 5107, 5108, 5121, 5120, + 5130, 5135, 5138, 6399, 5123, 6399, 5131, 5125, 5141, 6399, + 6399, 5136, 5158, 5139, 5144, 5152, 5173, 5171, 6399, 5162, + 5172, 5174, 5165, 6399, 5180, 6399, 5181, 5163, 5184, 5186, + 5193, 6399, 6399, 6399, 5194, 5188, 5199, 5187, 5201, 5202, + 5214, 5198, 5222, 6399, 5209, 5226, 5227, 5220, 5234, 5238, + 5233, 5237, 5250, 5243, 5251, 5241, 5258, 5255, 5266, 6399, + + 6399, 5259, 5276, 5268, 5279, 5277, 5275, 5278, 5269, 5283, + 5289, 5285, 6399, 5295, 5296, 5299, 5300, 5306, 5310, 5308, + 5311, 6399, 6399, 5312, 5314, 5324, 5329, 5326, 5321, 5335, + 5332, 5333, 6399, 5339, 6399, 5344, 5351, 5368, 5349, 5357, + 5362, 6399, 5360, 5361, 6399, 5371, 5359, 5370, 6399, 5379, + 6399, 6399, 5383, 6399, 5384, 6399, 5388, 5389, 5393, 5396, + 5403, 5412, 5405, 5409, 5400, 5407, 5419, 5422, 5420, 6399, + 6399, 5433, 5402, 5431, 5443, 5416, 5438, 5444, 6399, 6399, + 5445, 5451, 6399, 5428, 5439, 5458, 5449, 5455, 5447, 5459, + 5460, 5465, 5470, 5490, 5492, 5494, 5480, 5498, 5481, 5478, + + 5500, 5506, 5512, 6399, 5510, 5508, 5497, 6399, 5513, 5507, + 5529, 5538, 5535, 6399, 5527, 5546, 5547, 5539, 5534, 5552, + 5537, 5554, 6399, 5555, 5558, 5556, 6399, 5559, 6399, 5575, + 6399, 6399, 5564, 5579, 5583, 6399, 5588, 5596, 6399, 5589, + 5590, 5578, 5582, 5603, 6399, 5609, 5607, 5613, 5610, 5616, + 5611, 5623, 5617, 5622, 6399, 5614, 5630, 5632, 5634, 5648, + 5637, 5635, 5636, 5657, 5649, 5640, 5653, 5658, 6399, 5668, + 5670, 6399, 5662, 6399, 5671, 5672, 5681, 6399, 5687, 5674, + 5673, 5684, 6399, 5689, 5691, 6399, 5680, 5706, 5709, 5710, + 5693, 5713, 5704, 5722, 5723, 5727, 6399, 5729, 5715, 5732, + + 5734, 5740, 5720, 6399, 5739, 5745, 5750, 5756, 5748, 6399, + 5757, 5759, 6399, 5758, 5755, 5749, 5775, 5769, 5779, 5781, + 5783, 6399, 5789, 6399, 6399, 5776, 6399, 5770, 5793, 6399, + 5798, 5785, 5784, 5800, 5813, 5812, 6399, 6399, 5810, 5806, + 5818, 5823, 6399, 5815, 5826, 5825, 5820, 5837, 6399, 5821, + 5834, 5831, 5844, 5848, 5842, 5862, 6399, 6399, 5852, 6399, + 5868, 5874, 5873, 6399, 6399, 6399, 5878, 6399, 5880, 5884, + 5881, 6399, 5886, 5870, 5882, 6399, 5891, 5895, 5883, 6399, + 5899, 5894, 5905, 5914, 5916, 5904, 5915, 5924, 5909, 5912, + 5928, 5930, 5932, 5921, 5938, 6399, 6399, 5945, 6399, 6399, + + 5950, 5952, 5953, 6399, 5947, 5958, 6399, 5960, 5951, 5965, + 5954, 5968, 6399, 6399, 5955, 5967, 6399, 5976, 5961, 5979, + 5972, 5971, 5985, 6399, 6399, 6399, 6399, 6399, 5983, 6399, + 6399, 6000, 5987, 5994, 6399, 5982, 6006, 6002, 6003, 6018, + 6010, 5998, 6024, 6020, 6019, 6029, 6041, 6042, 6048, 6047, + 6049, 6030, 6044, 6063, 6046, 6061, 6399, 6057, 6399, 6062, + 6399, 6058, 6067, 6069, 6064, 6070, 6073, 6399, 6079, 6091, + 6082, 6085, 6089, 6084, 6108, 6109, 6096, 6117, 6120, 6119, + 6122, 6126, 6118, 6138, 6132, 6399, 6136, 6133, 6142, 6139, + 6148, 6144, 6399, 6145, 6149, 6154, 6165, 6155, 6169, 6166, + + 6179, 6186, 6184, 6183, 6172, 6197, 6195, 6196, 6200, 6193, + 6207, 6399, 6204, 6210, 6213, 6214, 6220, 6216, 6225, 6227, + 6238, 6242, 6239, 6245, 6243, 6399, 6246, 6399, 6399, 6252, + 6237, 6248, 6258, 6261, 6399, 6399, 6399, 6307, 6314, 6321, + 6328, 6335, 100, 6342, 6349, 6356, 6363, 6370, 6377, 6384, + 6391 } ; -static yyconst flex_int16_t yy_def[2179] = +static yyconst flex_int16_t yy_def[2252] = { 0, - 2164, 1, 2165, 2165, 2166, 2166, 2167, 2167, 2168, 2168, - 2169, 2169, 2164, 2170, 2164, 2164, 2164, 2164, 2171, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2172, 2164, 2164, 2164, 2172, 2173, 2164, 2164, 2164, 2173, - 2174, 2164, 2164, 2164, 2164, 2174, 2175, 2164, 2164, 2164, - 2175, 2176, 2164, 2177, 2164, 2176, 2176, 2170, 2170, 2164, - 2178, 2171, 2178, 2171, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2172, 2172, 2173, 2173, 2174, 2174, 2164, 2175, 2175, 2176, - 2176, 2177, 2177, 2176, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2176, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2176, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2164, 2176, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2176, - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2164, 2164, 2170, 2164, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2176, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2176, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2164, - 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2164, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2164, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2170, - 2170, 2170, 2170, 2164, 2164, 2164, 2170, 2164, 2170, 2164, - - 2164, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2164, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, - 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2164, 2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, - 2170, 2164, 2170, 2164, 2164, 2170, 2164, 2170, 2164, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2164, 2170, 2164, 2164, 2164, - 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2164, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2164, 2164, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2164, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164, - 2170, 2164, 2170, 2170, 2170, 2164, 2164, 2164, 2170, 2164, - - 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2164, 2170, - 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, - 2164, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - 2170, 2164, 2164, 2164, 2164, 2164, 2170, 2164, 2170, 2170, - 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2164, 2170, 2170, - 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, - - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, - 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, - 2170, 2170, 2164, 2170, 2164, 2164, 2170, 2170, 2170, 2170, - 2170, 2164, 2164, 0, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164 + 2237, 1, 2238, 2238, 2239, 2239, 2240, 2240, 2241, 2241, + 2242, 2242, 2237, 2243, 2237, 2237, 2237, 2237, 2244, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2245, 2237, 2237, 2237, 2245, 2246, 2237, 2237, 2237, 2246, + 2247, 2237, 2237, 2237, 2237, 2247, 2248, 2237, 2237, 2237, + 2248, 2249, 2237, 2250, 2237, 2249, 2249, 2243, 2243, 2237, + 2251, 2244, 2251, 2244, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2245, 2245, 2246, 2246, 2247, 2247, 2237, 2248, 2248, 2249, + 2249, 2250, 2250, 2249, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2249, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2249, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2249, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2249, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2237, 2237, 2243, 2237, 2237, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2249, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2249, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2237, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2237, 2243, + 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2237, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + + 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2237, + 2243, 2237, 2243, 2237, 2237, 2243, 2243, 2243, 2237, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2237, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2237, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, + 2237, 2237, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2237, 2243, + 2237, 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + + 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2243, 2237, 2237, 2243, 2237, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2237, + 2243, 2243, 2243, 2237, 2237, 2237, 2243, 2237, 2243, 2243, + 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2237, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2237, 2237, + + 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2237, 2237, 2243, 2243, 2237, 2243, 2243, 2243, + 2243, 2243, 2243, 2237, 2237, 2237, 2237, 2237, 2243, 2237, + 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, + 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + + 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2237, 2243, + 2243, 2243, 2243, 2243, 2237, 2237, 0, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237 } ; -static yyconst flex_uint16_t yy_nxt[6281] = +static yyconst flex_uint16_t yy_nxt[6466] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 14, 21, 22, 23, 24, 14, @@ -1168,691 +1194,712 @@ static yyconst flex_uint16_t yy_nxt[6281] = 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 14, 14, 14, 14, 42, 43, 44, 42, 43, 44, 47, 48, 47, 48, 49, 97, 49, 52, - 53, 54, 55, 805, 18, 52, 53, 54, 55, 69, + 53, 54, 55, 811, 18, 52, 53, 54, 55, 69, 18, 58, 59, 60, 58, 59, 60, 70, 131, 131, 68, 71, 87, 45, 97, 133, 45, 141, 133, 50, 73, 50, 73, 73, 69, 73, 141, 56, 99, 138, 138, 73, 88, 56, 139, 69, 75, 76, 61, 87, 69, 61, 15, 16, 17, 63, 64, 65, 15, 16, - 17, 63, 64, 65, 77, 99, 89, 137, 74, 88, + 17, 63, 64, 65, 77, 99, 89, 183, 74, 88, 69, 91, 66, 75, 76, 78, 145, 107, 66, 92, - 90, 70, 79, 69, 990, 71, 80, 173, 98, 81, - 67, 77, 69, 89, 131, 131, 67, 69, 91, 66, + 90, 70, 79, 69, 1003, 71, 80, 69, 98, 81, + 67, 77, 69, 89, 183, 137, 67, 69, 91, 66, 69, 69, 78, 145, 107, 66, 92, 90, 93, 79, - 69, 94, 69, 80, 100, 98, 81, 82, 95, 69, + 69, 94, 69, 80, 100, 98, 81, 82, 95, 136, - 96, 83, 101, 136, 84, 197, 85, 86, 102, 134, + 96, 83, 101, 134, 84, 198, 85, 86, 102, 132, 104, 69, 103, 113, 105, 93, 147, 69, 94, 69, 69, 100, 146, 69, 82, 95, 69, 96, 83, 101, - 106, 84, 197, 85, 86, 102, 69, 104, 114, 103, + 106, 84, 198, 85, 86, 102, 69, 104, 114, 103, 113, 105, 115, 147, 133, 69, 123, 133, 124, 146, - 179, 132, 116, 69, 126, 117, 157, 106, 108, 127, - 69, 69, 109, 125, 69, 114, 128, 69, 110, 115, - 129, 111, 69, 123, 130, 124, 151, 179, 112, 116, - 69, 126, 117, 157, 141, 108, 127, 138, 138, 109, - 125, 144, 69, 128, 69, 110, 208, 129, 111, 158, + 180, 69, 116, 69, 126, 117, 157, 106, 108, 127, + 141, 69, 109, 125, 69, 114, 128, 69, 110, 115, + 129, 111, 69, 123, 130, 124, 151, 180, 112, 116, + 69, 126, 117, 157, 139, 108, 127, 131, 131, 109, + 125, 144, 69, 128, 69, 110, 209, 129, 111, 158, - 897, 130, 69, 151, 141, 112, 118, 69, 68, 119, + 904, 130, 69, 151, 141, 112, 118, 69, 68, 119, 68, 68, 135, 68, 135, 135, 120, 135, 144, 68, - 121, 122, 73, 208, 73, 73, 158, 73, 69, 140, + 121, 122, 73, 209, 73, 73, 158, 73, 69, 140, 69, 140, 140, 118, 140, 68, 119, 68, 68, 73, 68, 73, 73, 120, 73, 148, 68, 121, 122, 152, - 73, 161, 150, 153, 155, 156, 139, 159, 149, 154, - 143, 69, 69, 69, 69, 137, 162, 163, 166, 69, - 136, 357, 148, 69, 69, 160, 152, 74, 161, 150, + 73, 161, 150, 153, 155, 156, 137, 159, 149, 154, + 143, 69, 69, 69, 69, 136, 162, 163, 166, 69, + 138, 138, 148, 69, 69, 160, 152, 74, 161, 150, 153, 155, 156, 69, 167, 149, 154, 164, 165, 69, - 168, 69, 174, 162, 163, 166, 69, 69, 69, 180, - - 69, 134, 160, 69, 169, 175, 69, 170, 183, 177, - 182, 167, 69, 178, 164, 165, 181, 168, 184, 174, - 171, 172, 69, 188, 132, 176, 180, 69, 69, 69, - 69, 169, 175, 69, 170, 183, 177, 182, 69, 69, - 178, 185, 186, 181, 187, 184, 69, 171, 172, 69, - 188, 189, 176, 69, 190, 69, 192, 194, 191, 195, - 69, 193, 198, 69, 69, 196, 201, 202, 185, 186, - 69, 187, 2164, 69, 2164, 204, 69, 2164, 189, 2164, - 69, 190, 203, 192, 194, 191, 195, 69, 193, 198, - 199, 206, 196, 201, 200, 205, 207, 69, 2164, 69, - - 69, 69, 204, 69, 209, 211, 213, 69, 214, 203, - 2164, 212, 2164, 2164, 2164, 69, 2164, 199, 206, 2164, - 2164, 200, 205, 207, 215, 210, 69, 69, 216, 69, - 69, 209, 211, 213, 135, 214, 135, 135, 212, 135, - 140, 217, 140, 140, 73, 140, 73, 73, 141, 73, - 69, 215, 210, 218, 220, 216, 219, 221, 2164, 223, - 224, 225, 69, 222, 229, 69, 69, 226, 2164, 69, - 227, 2164, 228, 69, 238, 69, 2164, 258, 69, 2164, - 218, 220, 143, 219, 221, 69, 223, 224, 316, 240, - 222, 230, 69, 69, 226, 231, 69, 227, 69, 228, - - 69, 238, 239, 241, 242, 243, 246, 245, 69, 69, - 69, 69, 232, 2164, 244, 249, 240, 69, 69, 69, - 69, 2164, 231, 2164, 69, 69, 250, 251, 69, 239, - 241, 242, 243, 246, 245, 259, 69, 262, 2164, 232, - 233, 244, 249, 247, 256, 234, 248, 263, 69, 69, - 235, 69, 2164, 250, 251, 257, 236, 237, 69, 252, - 265, 69, 259, 69, 253, 69, 69, 233, 260, 69, - 247, 256, 234, 248, 263, 264, 254, 235, 255, 261, - 267, 69, 257, 236, 237, 69, 252, 266, 268, 2164, - 269, 253, 69, 2164, 270, 271, 274, 272, 273, 275, - - 69, 69, 264, 254, 69, 255, 261, 277, 69, 69, - 69, 284, 69, 276, 266, 287, 69, 269, 69, 69, - 69, 270, 271, 274, 272, 273, 275, 69, 279, 69, - 278, 280, 281, 282, 277, 291, 283, 289, 69, 69, - 276, 69, 69, 69, 285, 286, 290, 69, 294, 297, - 2164, 2164, 304, 69, 69, 279, 69, 278, 280, 281, - 282, 288, 69, 283, 289, 293, 69, 69, 69, 292, - 295, 285, 286, 290, 69, 294, 306, 69, 298, 300, - 69, 69, 301, 69, 69, 303, 302, 307, 288, 305, - 2164, 309, 293, 296, 69, 299, 292, 141, 311, 69, - - 69, 2164, 69, 69, 69, 298, 300, 313, 69, 301, - 308, 69, 303, 302, 307, 310, 305, 69, 309, 312, - 296, 69, 299, 69, 314, 311, 315, 317, 69, 318, - 320, 69, 319, 321, 313, 2164, 69, 308, 322, 325, - 323, 69, 310, 324, 327, 69, 312, 328, 330, 69, - 2164, 314, 69, 315, 317, 69, 318, 320, 69, 319, - 321, 69, 69, 69, 326, 322, 329, 323, 331, 332, - 324, 69, 334, 69, 328, 69, 69, 69, 69, 333, - 69, 335, 338, 337, 2164, 69, 69, 336, 69, 339, - 343, 326, 69, 329, 340, 331, 332, 2164, 69, 334, - - 342, 344, 345, 341, 2164, 69, 333, 69, 335, 338, - 337, 69, 69, 364, 336, 69, 339, 69, 350, 351, - 69, 340, 69, 346, 353, 69, 2164, 342, 344, 345, - 341, 347, 348, 354, 349, 2164, 69, 352, 69, 358, - 69, 69, 2164, 69, 359, 350, 351, 360, 69, 370, - 346, 353, 355, 356, 69, 361, 69, 362, 347, 348, - 354, 349, 366, 69, 352, 363, 358, 69, 365, 367, - 369, 359, 368, 372, 360, 69, 370, 69, 374, 355, - 356, 69, 361, 69, 362, 69, 371, 375, 69, 366, - 69, 526, 363, 373, 69, 365, 367, 369, 69, 368, - - 69, 376, 378, 380, 379, 69, 385, 377, 2164, 69, - 69, 2164, 389, 371, 375, 386, 69, 384, 69, 69, - 373, 2164, 381, 69, 390, 382, 69, 383, 376, 378, - 380, 379, 387, 69, 377, 69, 69, 69, 69, 389, - 388, 392, 386, 391, 384, 394, 69, 410, 402, 381, - 404, 390, 382, 403, 383, 405, 69, 393, 69, 387, - 69, 408, 2164, 406, 452, 69, 407, 388, 392, 141, - 391, 69, 394, 69, 69, 402, 409, 411, 69, 69, - 403, 69, 69, 69, 393, 395, 396, 412, 408, 413, - 406, 452, 2164, 407, 69, 397, 69, 398, 399, 400, - - 2164, 415, 401, 409, 411, 414, 416, 417, 418, 421, - 69, 2164, 395, 396, 412, 69, 413, 69, 69, 419, - 423, 424, 397, 69, 398, 399, 400, 420, 415, 401, - 427, 69, 414, 416, 69, 418, 422, 69, 69, 69, - 69, 69, 428, 69, 425, 426, 419, 423, 424, 429, - 431, 430, 2164, 69, 420, 2164, 432, 427, 435, 433, - 69, 2164, 441, 422, 69, 2164, 2164, 69, 436, 428, - 440, 444, 443, 69, 434, 69, 429, 431, 430, 69, - 437, 69, 69, 432, 69, 435, 433, 442, 69, 441, - 69, 438, 446, 439, 445, 436, 450, 440, 69, 443, - - 69, 434, 447, 69, 448, 449, 451, 437, 453, 454, - 69, 2164, 69, 69, 442, 455, 476, 457, 438, 446, - 439, 445, 69, 450, 456, 69, 69, 458, 69, 447, - 69, 448, 449, 451, 69, 453, 461, 459, 69, 69, - 460, 69, 455, 462, 457, 69, 463, 464, 69, 465, - 2164, 456, 69, 69, 458, 69, 466, 2164, 468, 69, - 467, 469, 2164, 461, 459, 470, 69, 460, 69, 69, - 462, 471, 69, 463, 464, 69, 465, 69, 507, 69, - 480, 475, 69, 466, 477, 468, 69, 467, 469, 474, - 478, 472, 470, 473, 69, 481, 69, 479, 471, 69, - - 69, 482, 69, 483, 69, 507, 485, 480, 475, 486, - 69, 477, 69, 523, 489, 488, 474, 478, 472, 69, - 473, 69, 69, 491, 479, 69, 484, 69, 482, 487, - 2164, 69, 490, 485, 69, 69, 486, 69, 492, 493, - 523, 489, 488, 501, 69, 69, 502, 69, 500, 69, - 491, 69, 503, 484, 505, 69, 487, 69, 2164, 490, - 509, 506, 504, 2164, 510, 492, 493, 494, 69, 508, - 501, 69, 495, 502, 496, 500, 69, 2164, 69, 2164, - 511, 505, 497, 521, 69, 498, 69, 509, 506, 504, - 512, 510, 499, 69, 494, 69, 508, 513, 514, 495, - - 515, 496, 69, 69, 518, 69, 517, 511, 516, 497, - 525, 519, 498, 520, 69, 69, 69, 512, 527, 499, - 524, 529, 69, 2164, 513, 514, 69, 515, 522, 69, - 528, 518, 69, 517, 69, 516, 141, 525, 519, 530, - 520, 531, 533, 69, 532, 69, 534, 524, 535, 537, - 69, 536, 541, 69, 69, 522, 69, 528, 538, 69, - 69, 542, 544, 539, 69, 69, 530, 540, 531, 533, - 69, 532, 543, 534, 545, 535, 537, 546, 536, 69, - 547, 69, 2164, 548, 549, 551, 69, 550, 69, 69, - 69, 552, 69, 553, 540, 557, 2164, 555, 2164, 558, - - 2164, 69, 559, 2164, 69, 69, 69, 547, 69, 69, - 548, 549, 551, 554, 550, 69, 69, 564, 556, 69, - 553, 69, 69, 69, 555, 69, 558, 69, 560, 559, - 563, 566, 565, 561, 567, 568, 569, 562, 2164, 69, - 554, 69, 571, 69, 564, 556, 2164, 570, 69, 572, - 2164, 574, 69, 69, 582, 560, 69, 563, 566, 565, - 561, 567, 568, 575, 562, 69, 69, 2164, 69, 571, - 576, 573, 69, 69, 570, 577, 572, 578, 574, 581, - 580, 69, 579, 2164, 583, 69, 69, 587, 584, 69, - 575, 69, 585, 589, 69, 586, 69, 576, 573, 69, - - 69, 590, 577, 592, 578, 69, 581, 580, 588, 579, - 591, 583, 69, 2164, 587, 584, 69, 69, 593, 585, - 596, 69, 586, 69, 594, 69, 598, 69, 590, 595, - 592, 2164, 597, 599, 69, 588, 600, 601, 603, 2164, - 69, 69, 69, 605, 604, 593, 69, 596, 606, 2164, - 607, 2164, 602, 69, 69, 608, 69, 69, 69, 597, - 599, 69, 609, 600, 601, 603, 69, 611, 617, 2164, - 610, 604, 612, 616, 613, 69, 69, 607, 69, 602, - 614, 69, 608, 69, 615, 2164, 69, 69, 69, 609, - 618, 69, 69, 621, 611, 617, 69, 610, 620, 612, - - 616, 613, 69, 619, 622, 69, 69, 614, 623, 2164, - 624, 615, 69, 625, 2164, 626, 69, 618, 69, 628, - 621, 629, 2164, 630, 632, 620, 2164, 627, 2164, 2164, - 619, 69, 69, 631, 633, 623, 69, 624, 69, 69, - 625, 69, 626, 69, 69, 634, 628, 69, 629, 635, - 630, 632, 636, 637, 627, 638, 69, 640, 645, 639, - 631, 633, 69, 641, 69, 69, 642, 643, 650, 644, - 69, 69, 634, 2164, 69, 69, 635, 69, 2164, 636, - 637, 69, 638, 648, 640, 645, 639, 646, 141, 649, - 641, 69, 69, 642, 643, 647, 644, 69, 651, 655, - - 69, 69, 653, 652, 2164, 69, 654, 2164, 656, 657, - 648, 665, 672, 69, 646, 69, 649, 69, 69, 658, - 668, 69, 647, 69, 666, 651, 69, 69, 670, 653, - 652, 69, 659, 654, 69, 656, 657, 2164, 665, 69, - 2164, 69, 669, 667, 69, 671, 658, 668, 2164, 707, - 2164, 666, 681, 680, 69, 670, 685, 682, 69, 659, - 660, 69, 684, 2164, 661, 69, 69, 662, 686, 669, - 667, 69, 671, 687, 663, 69, 683, 664, 69, 681, - 680, 69, 69, 69, 682, 688, 69, 660, 69, 684, - 691, 661, 689, 690, 662, 686, 2164, 69, 694, 69, - - 687, 663, 692, 683, 664, 673, 674, 2164, 675, 693, - 2164, 676, 688, 69, 69, 69, 677, 691, 69, 689, - 690, 696, 678, 679, 69, 694, 699, 698, 69, 692, - 700, 69, 673, 674, 69, 675, 693, 695, 676, 697, - 704, 708, 69, 677, 703, 69, 69, 69, 696, 678, - 679, 702, 69, 699, 698, 701, 705, 700, 706, 69, - 69, 720, 69, 709, 695, 710, 697, 704, 69, 711, - 712, 703, 713, 69, 715, 717, 714, 718, 702, 2164, - 69, 69, 701, 69, 2164, 706, 69, 69, 69, 69, - 709, 719, 710, 69, 69, 69, 711, 712, 69, 713, - - 716, 715, 69, 714, 718, 721, 722, 723, 69, 725, - 69, 724, 729, 69, 727, 726, 730, 728, 719, 69, - 734, 733, 2164, 2164, 69, 69, 2164, 716, 69, 69, - 69, 69, 721, 722, 723, 69, 725, 731, 724, 729, - 69, 727, 726, 730, 728, 732, 69, 69, 733, 735, - 737, 736, 738, 739, 743, 69, 69, 741, 69, 69, - 740, 69, 742, 69, 731, 745, 744, 69, 749, 747, - 748, 746, 732, 69, 69, 69, 735, 737, 736, 738, - 739, 743, 69, 69, 741, 69, 69, 740, 752, 742, - 751, 69, 745, 744, 750, 69, 747, 748, 746, 753, - - 754, 69, 755, 69, 2164, 759, 758, 756, 761, 760, - 69, 69, 764, 765, 762, 757, 763, 751, 2164, 767, - 69, 750, 69, 69, 769, 69, 69, 754, 69, 755, - 766, 69, 759, 758, 756, 69, 760, 69, 69, 764, - 69, 762, 757, 763, 768, 69, 69, 770, 772, 771, - 774, 141, 773, 69, 775, 69, 69, 766, 776, 69, - 784, 69, 2164, 69, 69, 791, 785, 2164, 2164, 783, - 792, 768, 69, 2164, 770, 772, 771, 774, 69, 773, - 786, 775, 69, 69, 789, 776, 777, 784, 778, 787, - 788, 2164, 779, 785, 780, 69, 783, 69, 2164, 781, - - 794, 790, 69, 798, 782, 793, 69, 786, 795, 799, - 69, 789, 69, 777, 69, 778, 787, 788, 69, 779, - 69, 780, 69, 69, 796, 69, 781, 794, 790, 801, - 798, 782, 793, 800, 797, 795, 799, 802, 803, 69, - 804, 812, 69, 2164, 2164, 2164, 69, 811, 821, 2164, - 816, 796, 813, 2164, 814, 2164, 801, 815, 69, 823, - 800, 797, 69, 69, 802, 69, 817, 69, 812, 69, - 69, 806, 69, 818, 811, 69, 807, 816, 808, 813, - 819, 814, 820, 69, 815, 69, 69, 822, 69, 809, - 69, 69, 826, 817, 824, 827, 810, 69, 806, 2164, - - 818, 2164, 828, 807, 825, 808, 69, 819, 830, 820, - 69, 832, 69, 841, 822, 831, 809, 829, 69, 826, - 2164, 824, 69, 810, 69, 69, 69, 69, 833, 828, - 835, 825, 834, 69, 836, 830, 837, 2164, 832, 2164, - 69, 69, 831, 838, 829, 69, 69, 839, 840, 69, - 69, 842, 69, 850, 843, 833, 845, 835, 844, 834, - 846, 836, 69, 837, 69, 69, 69, 69, 69, 847, - 838, 848, 849, 851, 839, 840, 862, 853, 842, 69, - 850, 843, 69, 845, 854, 844, 852, 846, 69, 855, - 69, 69, 856, 69, 2164, 857, 847, 858, 848, 849, - - 69, 859, 860, 861, 853, 69, 865, 864, 69, 69, - 863, 871, 69, 852, 69, 69, 69, 69, 69, 856, - 866, 69, 857, 868, 858, 867, 869, 2164, 859, 860, - 861, 69, 69, 865, 864, 872, 69, 863, 871, 870, - 873, 874, 69, 882, 2164, 69, 69, 866, 69, 876, - 868, 875, 867, 869, 69, 877, 878, 880, 69, 881, - 2164, 69, 872, 879, 69, 69, 870, 873, 69, 69, - 883, 69, 884, 69, 886, 69, 876, 887, 875, 69, - 885, 888, 877, 878, 880, 889, 881, 890, 891, 69, - 879, 892, 69, 69, 69, 893, 69, 883, 69, 884, - - 69, 886, 894, 895, 887, 896, 899, 885, 888, 901, - 69, 69, 898, 69, 903, 891, 69, 69, 892, 69, - 69, 69, 69, 900, 69, 904, 902, 69, 905, 894, - 895, 69, 896, 899, 69, 69, 901, 69, 906, 898, - 907, 903, 908, 2164, 2164, 2164, 909, 911, 912, 2164, - 900, 2164, 904, 902, 910, 905, 913, 919, 915, 916, - 69, 69, 2164, 2164, 69, 914, 69, 927, 917, 908, - 69, 69, 69, 909, 911, 912, 69, 69, 69, 69, - 69, 910, 918, 913, 69, 915, 916, 920, 921, 922, - 69, 923, 914, 69, 927, 917, 932, 69, 69, 928, - - 69, 2164, 929, 931, 935, 69, 924, 933, 2164, 918, - 69, 930, 69, 934, 920, 921, 922, 925, 923, 936, - 926, 69, 69, 932, 69, 69, 928, 69, 69, 929, - 931, 935, 938, 924, 933, 69, 940, 937, 930, 939, - 934, 69, 942, 941, 925, 69, 936, 926, 943, 946, - 69, 944, 945, 2164, 69, 69, 948, 69, 954, 69, - 69, 949, 69, 940, 937, 69, 939, 69, 947, 942, - 941, 69, 950, 951, 69, 943, 946, 2164, 944, 945, - 69, 955, 69, 948, 69, 952, 953, 956, 949, 957, - 69, 968, 69, 958, 69, 947, 69, 962, 960, 950, - - 951, 965, 959, 961, 69, 69, 69, 964, 955, 963, - 2164, 966, 952, 953, 956, 69, 957, 69, 969, 967, - 958, 69, 69, 69, 962, 69, 970, 69, 965, 959, - 69, 971, 972, 973, 964, 974, 963, 69, 966, 976, - 975, 977, 979, 978, 69, 969, 967, 69, 69, 69, - 980, 69, 981, 970, 69, 69, 69, 69, 971, 972, - 973, 69, 974, 69, 982, 983, 976, 975, 977, 979, - 978, 2164, 992, 2164, 991, 2164, 995, 2164, 996, 989, - 994, 2164, 69, 997, 69, 993, 69, 2164, 69, 69, - 69, 982, 983, 984, 69, 69, 998, 69, 985, 992, - - 986, 991, 987, 995, 988, 69, 989, 994, 999, 69, - 69, 69, 993, 1000, 1001, 1002, 1004, 1003, 2164, 1008, - 984, 69, 1006, 998, 69, 985, 69, 986, 69, 987, - 69, 988, 1007, 69, 69, 999, 1005, 1010, 1009, 1012, - 1000, 1001, 1002, 1004, 1003, 69, 69, 1011, 1013, 1006, - 69, 1014, 1016, 1015, 69, 1017, 69, 1019, 2164, 1007, - 69, 69, 1018, 1005, 69, 1009, 1012, 1022, 69, 1020, - 1021, 69, 1024, 1023, 1011, 1013, 69, 69, 69, 69, - 1015, 1025, 1017, 1026, 69, 1027, 69, 1028, 1029, 1018, - 69, 1030, 69, 1032, 1022, 69, 1020, 1021, 69, 1024, - - 1023, 69, 1031, 1033, 69, 69, 1035, 1034, 1025, 1036, - 1026, 1037, 1027, 1039, 1028, 69, 1040, 69, 69, 1038, - 69, 69, 69, 69, 69, 69, 69, 1044, 1043, 1031, - 1033, 1041, 1045, 1035, 1034, 69, 69, 1042, 1037, 1047, - 1039, 1046, 69, 1050, 69, 69, 1038, 1051, 69, 1048, - 69, 1049, 69, 69, 1044, 1043, 69, 1052, 1041, 1045, - 1054, 2164, 1058, 1053, 1042, 69, 1047, 69, 1046, 69, - 1050, 1055, 1056, 1059, 1051, 1060, 1048, 1057, 1049, 69, - 69, 1063, 69, 1061, 69, 1066, 1062, 1054, 69, 1058, - 1053, 1064, 69, 1065, 2164, 69, 1067, 1069, 1055, 1068, - - 1059, 1077, 1060, 69, 69, 69, 69, 1072, 1063, 69, - 1061, 1070, 69, 1062, 1075, 69, 69, 69, 1064, 69, - 1065, 1071, 1073, 1067, 1069, 1074, 1068, 1076, 1077, 69, - 69, 69, 69, 1079, 1072, 1078, 69, 69, 1070, 1080, - 2164, 1075, 1083, 1081, 2164, 1082, 69, 1084, 1071, 1073, - 69, 69, 1074, 69, 1076, 69, 1085, 1087, 1090, 1086, - 1079, 1088, 1078, 1093, 69, 1089, 1080, 69, 69, 1083, - 1081, 1092, 1082, 1094, 1084, 69, 1091, 69, 69, 69, - 1095, 1097, 69, 1085, 1087, 1090, 1086, 69, 1088, 1096, - 1098, 1099, 1089, 69, 1103, 69, 2164, 1101, 1092, 1102, - - 2164, 1100, 69, 1091, 1108, 69, 69, 1095, 69, 69, - 69, 69, 69, 69, 1112, 69, 1096, 1098, 1099, 69, - 1104, 1103, 1106, 1115, 1101, 1105, 1102, 1107, 1100, 1109, - 1110, 1108, 1111, 1113, 69, 1114, 1116, 69, 69, 1117, - 69, 2164, 2164, 69, 69, 1118, 69, 69, 1124, 1125, - 1115, 1121, 69, 69, 69, 1119, 1109, 1110, 1123, 1111, - 1113, 1120, 1114, 69, 69, 1122, 1117, 2164, 69, 69, - 69, 69, 1118, 69, 69, 1124, 1125, 1127, 1121, 1126, - 1128, 1130, 1119, 1131, 1132, 1123, 1129, 1138, 1120, 1144, - 1136, 2164, 1122, 1139, 69, 69, 2164, 69, 69, 1133, - - 2164, 69, 69, 1134, 69, 1140, 1126, 1128, 1130, 69, - 1131, 1132, 1137, 1129, 69, 69, 1135, 1136, 1141, 1145, - 1139, 69, 1142, 69, 69, 69, 1133, 1143, 69, 1146, - 1134, 69, 1140, 1147, 69, 1148, 1149, 1150, 69, 1137, - 1151, 2164, 1152, 1135, 2164, 1141, 69, 1153, 1158, 1142, - 1154, 1155, 1157, 69, 1143, 69, 1146, 1156, 2164, 69, - 1147, 69, 1148, 69, 69, 69, 1160, 69, 69, 1152, - 69, 69, 1161, 1159, 1153, 1158, 69, 1154, 1155, 1157, - 1162, 2164, 1163, 1164, 1156, 69, 1165, 69, 69, 1166, - 1167, 1169, 1168, 69, 1170, 69, 1172, 2164, 69, 1161, - - 1159, 2164, 69, 69, 1173, 1181, 2164, 1162, 69, 1163, - 1164, 1171, 69, 1165, 69, 1176, 1166, 1167, 69, 1168, - 1174, 1170, 69, 1172, 69, 1175, 69, 69, 1177, 1178, - 2164, 1173, 69, 69, 1179, 1180, 69, 69, 1171, 1182, - 1183, 1184, 1176, 1185, 2164, 2164, 69, 1174, 1187, 1191, - 69, 1189, 1175, 1190, 69, 1177, 1178, 69, 69, 69, - 1193, 1179, 1180, 1186, 1188, 1199, 1182, 69, 1184, 69, - 69, 69, 69, 1192, 1194, 1187, 1191, 69, 1189, 69, - 1190, 1195, 1200, 1196, 69, 69, 1197, 1193, 69, 69, - 1186, 1188, 1202, 1201, 1203, 1205, 69, 69, 1198, 1204, - - 1192, 1194, 1206, 1207, 69, 1210, 1212, 69, 1195, 1200, - 1196, 69, 69, 1197, 69, 1209, 1208, 1211, 1214, 1202, - 1201, 1203, 69, 69, 69, 1198, 1204, 69, 69, 1206, - 1207, 1213, 1215, 1216, 2164, 69, 1220, 69, 69, 69, - 69, 1217, 1209, 1208, 1211, 1214, 1218, 1219, 1221, 69, - 69, 1222, 1224, 69, 69, 69, 1223, 2164, 1213, 69, - 1216, 69, 1225, 1220, 1226, 1229, 69, 1227, 1217, 69, - 69, 69, 1230, 1218, 1219, 1221, 1228, 1233, 1222, 69, - 69, 1232, 69, 1223, 69, 1231, 1239, 1234, 69, 1225, - 1235, 1226, 69, 69, 1227, 1236, 2164, 69, 1240, 1230, - - 1241, 1243, 1242, 1228, 1233, 69, 69, 69, 1232, 69, - 1244, 1237, 1231, 1239, 1234, 1246, 1238, 1235, 1248, 1245, - 1252, 1249, 1236, 69, 1251, 69, 69, 69, 1243, 1242, - 69, 1247, 69, 69, 1250, 1254, 69, 1244, 1237, 69, - 1256, 1255, 1246, 1238, 1253, 1248, 1245, 69, 1249, 69, - 69, 69, 69, 69, 1257, 1258, 69, 1259, 1247, 69, - 1260, 1250, 1254, 1261, 1262, 69, 1264, 1256, 1255, 69, - 69, 1253, 1265, 1270, 1263, 69, 1267, 1272, 1271, 1268, - 1274, 1257, 1258, 1276, 1259, 1279, 1266, 1260, 69, 69, - 1261, 1262, 69, 1264, 69, 1269, 1275, 2164, 69, 1265, - - 1277, 1263, 1273, 1267, 69, 69, 1268, 1278, 1283, 69, - 1280, 69, 69, 1266, 69, 69, 69, 69, 69, 1281, - 1284, 69, 1269, 1275, 69, 1282, 1285, 1277, 1287, 1273, - 1288, 1289, 1286, 1291, 1278, 1283, 69, 1280, 1293, 69, - 69, 69, 69, 69, 1292, 1290, 1281, 1284, 1294, 1297, - 1300, 69, 1282, 1285, 69, 1287, 1295, 1296, 1289, 1286, - 69, 69, 69, 1311, 1298, 1293, 1307, 69, 69, 1299, - 69, 1292, 1290, 1301, 1302, 1294, 1297, 69, 69, 69, - 1303, 69, 1304, 1295, 1296, 1305, 69, 1308, 1313, 1310, - 69, 1298, 1306, 69, 69, 69, 1299, 69, 69, 69, - - 1301, 1302, 69, 1312, 1309, 1315, 1314, 1303, 1316, 1304, - 69, 1317, 1305, 69, 1308, 69, 1310, 1318, 1319, 1306, - 2164, 1323, 1324, 69, 1320, 69, 69, 69, 69, 69, - 1312, 1309, 1315, 1314, 1321, 69, 1322, 69, 1317, 69, - 1325, 2164, 69, 69, 1318, 1319, 1326, 1327, 1323, 1324, - 1329, 1320, 69, 1331, 1330, 1335, 1332, 69, 69, 1336, - 1328, 1321, 69, 1322, 1333, 69, 69, 1325, 69, 1337, - 69, 1334, 1338, 1326, 1327, 1340, 69, 1329, 1339, 69, - 69, 1330, 1335, 1341, 69, 1342, 69, 1328, 69, 1343, - 1344, 1333, 1345, 1346, 1348, 2164, 1337, 1349, 1334, 69, - - 1350, 69, 69, 1351, 2164, 1339, 69, 1347, 2164, 69, - 1341, 1358, 2164, 69, 2164, 1360, 1343, 69, 69, 1345, - 1361, 1348, 69, 1364, 69, 69, 69, 1350, 1362, 1352, - 1353, 1354, 1356, 1357, 1347, 69, 1355, 1370, 1359, 69, - 69, 69, 1363, 69, 69, 69, 1366, 69, 69, 1369, - 69, 1365, 69, 1371, 1367, 1362, 1352, 1353, 1354, 1356, - 1357, 69, 1368, 1355, 69, 1359, 1373, 69, 1372, 1363, - 1374, 69, 69, 1366, 69, 69, 1369, 1378, 1365, 1375, - 1371, 1367, 69, 1376, 1377, 69, 1379, 69, 1382, 1368, - 1381, 1380, 1385, 69, 1384, 1372, 1386, 1374, 1383, 69, - - 1387, 69, 69, 69, 1378, 69, 1375, 1388, 1389, 1390, - 1376, 1377, 69, 1379, 69, 1391, 69, 1381, 1380, 1393, - 69, 1384, 1392, 69, 69, 1383, 69, 69, 69, 69, - 1394, 1395, 69, 1396, 1388, 1389, 1390, 69, 1397, 69, - 1398, 1401, 1391, 69, 1400, 1404, 1393, 1402, 1406, 1392, - 69, 1405, 69, 69, 1403, 69, 1399, 1394, 1395, 69, - 1396, 1409, 1413, 69, 1410, 1397, 69, 1398, 1401, 69, - 69, 1400, 1404, 1411, 1402, 69, 1414, 69, 1405, 1407, - 1412, 1403, 1417, 1399, 1408, 1415, 69, 69, 69, 1419, - 1416, 1410, 1418, 69, 69, 69, 1420, 1421, 1422, 1424, - - 1411, 69, 1425, 69, 69, 1423, 1407, 1412, 1426, 1427, - 1430, 1408, 69, 69, 69, 1428, 1419, 69, 1431, 1418, - 69, 69, 1429, 1432, 1421, 1422, 1424, 1434, 69, 1436, - 69, 1433, 1423, 1435, 69, 1426, 69, 1430, 69, 1438, - 1437, 69, 1428, 1439, 1440, 69, 69, 1441, 1442, 1429, - 69, 69, 2164, 1444, 69, 1445, 1436, 69, 1433, 69, - 1435, 69, 69, 69, 1443, 69, 1438, 1437, 69, 1447, - 1439, 1440, 1446, 69, 1441, 1442, 1448, 1449, 1450, 69, - 69, 1451, 1445, 69, 1452, 1454, 1456, 69, 1453, 69, - 2164, 1443, 1458, 1455, 69, 69, 69, 1457, 1459, 1446, - - 1460, 69, 1461, 1448, 1449, 1450, 69, 69, 1451, 1464, - 69, 1452, 69, 1456, 1463, 1453, 69, 69, 69, 1458, - 1455, 1462, 69, 1465, 1457, 1459, 69, 1460, 2164, 69, - 1466, 1468, 69, 1467, 1469, 1470, 1464, 1472, 2164, 1473, - 69, 1463, 2164, 1471, 69, 1475, 1479, 69, 1462, 1474, - 2164, 69, 1486, 1476, 69, 69, 69, 1466, 1468, 69, - 1467, 69, 1470, 69, 1472, 69, 1473, 69, 69, 1477, - 1471, 1478, 1475, 1479, 1483, 1480, 1474, 69, 1481, 1486, - 1476, 69, 1484, 1487, 69, 1485, 69, 69, 2164, 69, - 1490, 1482, 69, 1488, 1489, 2164, 1477, 1491, 1478, 69, - - 1492, 1483, 1480, 1493, 1496, 1481, 1495, 69, 69, 1484, - 1487, 2164, 1485, 69, 69, 69, 1497, 1490, 1482, 1498, - 1488, 1489, 69, 1499, 1491, 1494, 69, 1492, 69, 69, - 69, 1496, 69, 1495, 1501, 1500, 1502, 1503, 69, 2164, - 1504, 69, 69, 1497, 1506, 1505, 1498, 1507, 1511, 1508, - 1499, 69, 1494, 69, 1510, 1512, 1509, 69, 69, 69, - 1513, 69, 1500, 1502, 1503, 1515, 69, 1504, 69, 1514, - 1519, 1506, 1505, 1516, 69, 69, 1508, 69, 1521, 1524, - 69, 1510, 1512, 1509, 69, 69, 1517, 1513, 1520, 1518, - 1522, 69, 1515, 2164, 69, 69, 1514, 1519, 1525, 69, - - 1516, 69, 1527, 1523, 69, 69, 1524, 1526, 69, 69, - 1528, 1529, 1530, 1517, 1531, 1520, 1518, 1522, 69, 69, - 69, 69, 69, 1535, 1532, 1525, 1533, 1534, 69, 1527, - 1523, 1536, 1537, 69, 1526, 69, 69, 1528, 1529, 1530, - 1538, 1531, 1539, 1541, 1540, 69, 1546, 1542, 69, 69, - 69, 1532, 1543, 1533, 1534, 1544, 1545, 69, 1536, 69, - 2164, 1547, 1549, 69, 1550, 69, 69, 1538, 1551, 1539, - 1541, 1540, 1553, 69, 69, 1548, 1554, 1552, 1555, 69, - 69, 69, 1544, 1545, 1556, 1557, 1558, 69, 1547, 1549, - 1559, 69, 69, 1561, 69, 1551, 1560, 69, 69, 1553, - - 69, 1567, 1548, 1564, 1552, 1555, 1562, 69, 69, 69, - 69, 69, 1557, 1558, 1563, 69, 1568, 1559, 1565, 1569, - 1561, 1566, 1570, 1560, 2164, 69, 69, 69, 69, 1572, - 1564, 69, 69, 1562, 1571, 69, 1574, 69, 1578, 69, - 69, 1563, 1573, 1568, 69, 1565, 1569, 1576, 1566, 1570, - 69, 1575, 1577, 69, 69, 69, 1572, 1581, 69, 1580, - 1579, 1571, 1583, 1574, 1582, 1578, 69, 1584, 1585, 1573, - 1586, 69, 1587, 1588, 1576, 1591, 69, 2164, 1575, 1577, - 69, 1589, 69, 1594, 69, 1595, 1580, 1579, 69, 1583, - 1590, 1582, 1596, 69, 1584, 1585, 69, 1586, 1598, 69, - - 69, 69, 1591, 1592, 69, 1597, 1593, 1599, 1589, 1600, - 69, 1601, 69, 69, 1602, 1603, 69, 1590, 1604, 69, - 1605, 69, 1607, 69, 1610, 69, 1608, 69, 1611, 1606, - 1592, 1609, 1597, 1593, 1599, 69, 69, 69, 69, 1613, - 69, 1602, 1603, 1612, 1617, 1604, 1621, 69, 69, 69, - 1615, 1610, 69, 1608, 69, 1611, 1606, 1614, 1609, 1616, - 1619, 1618, 69, 1620, 69, 69, 69, 69, 69, 69, - 1612, 69, 1622, 1621, 1623, 69, 1624, 1615, 1625, 1629, - 1626, 1631, 69, 1628, 1614, 69, 1616, 1619, 1618, 1630, - 1620, 1627, 69, 1632, 2164, 1642, 69, 69, 1634, 69, - - 69, 1623, 1633, 69, 69, 1625, 1629, 1626, 1631, 69, - 1628, 1635, 69, 1636, 69, 69, 1630, 69, 1627, 1637, - 1632, 1638, 1643, 1641, 1639, 1634, 1640, 69, 1646, 1633, - 1644, 1647, 1655, 69, 1645, 69, 69, 69, 1635, 1648, - 1636, 69, 69, 69, 69, 69, 1637, 1649, 1638, 1643, - 1641, 1639, 69, 1640, 69, 1646, 1652, 1644, 1653, 1655, - 1650, 1645, 1651, 69, 1654, 69, 1648, 69, 69, 1656, - 1657, 1658, 1661, 1659, 1649, 1660, 69, 1662, 1664, 69, - 69, 1663, 1665, 1652, 69, 1653, 1667, 1650, 1666, 1651, - 69, 1654, 1668, 69, 69, 1671, 1656, 1657, 1658, 69, - - 1659, 69, 1660, 69, 69, 1669, 1670, 69, 1663, 69, - 69, 1672, 69, 1667, 69, 1666, 1673, 1674, 69, 1668, - 1675, 69, 1671, 1676, 1677, 1679, 1678, 1681, 1680, 1682, - 69, 69, 1669, 1670, 69, 69, 1683, 1684, 1672, 69, - 69, 1687, 69, 1673, 69, 1685, 69, 1675, 69, 69, - 1676, 1677, 1679, 1678, 1681, 1680, 69, 69, 1686, 1688, - 2164, 69, 1689, 1683, 1684, 1691, 1690, 2164, 1693, 69, - 1692, 1695, 1685, 69, 1694, 1696, 2164, 1697, 69, 69, - 69, 1698, 1699, 1700, 69, 1686, 1688, 69, 1701, 1689, - 1702, 69, 1691, 1690, 69, 1693, 1703, 1692, 69, 69, - - 69, 1694, 1696, 69, 1697, 1705, 1704, 69, 1698, 69, - 69, 69, 1708, 1706, 1707, 1710, 69, 1702, 1709, 1711, - 69, 69, 1712, 1703, 1713, 2164, 1714, 69, 69, 69, - 1715, 1717, 1705, 1704, 69, 1718, 69, 1716, 1720, 69, - 1706, 1707, 1719, 1721, 1722, 1709, 1711, 69, 69, 1712, - 1723, 69, 69, 1714, 1725, 69, 69, 69, 1717, 69, - 69, 1724, 1718, 69, 1716, 1720, 1726, 1727, 1728, 1719, - 69, 69, 1729, 1731, 1730, 1732, 69, 69, 2164, 1733, - 69, 1725, 69, 69, 1734, 69, 1739, 69, 1724, 1736, - 1747, 1735, 69, 1726, 1727, 1728, 69, 69, 69, 1729, - - 1731, 1730, 69, 69, 1737, 1740, 1733, 69, 1738, 1742, - 1741, 1734, 69, 1739, 69, 1744, 1736, 69, 1735, 69, - 1743, 69, 1745, 69, 69, 1748, 1746, 2164, 1749, 1750, - 1751, 1737, 1740, 1752, 1753, 1738, 1742, 1741, 69, 69, - 69, 1756, 1744, 69, 69, 1754, 69, 1743, 69, 1745, - 69, 1755, 69, 1746, 69, 1749, 1750, 1751, 69, 69, - 1752, 1753, 1757, 1760, 1758, 2164, 1759, 1761, 1756, 69, - 1762, 1764, 1754, 69, 1768, 1763, 1769, 1765, 1755, 69, - 1770, 1771, 69, 69, 1775, 69, 69, 1766, 1767, 1757, - 69, 1758, 69, 1759, 1761, 69, 69, 1762, 1764, 69, - - 1772, 1768, 1763, 69, 1765, 1773, 69, 69, 1774, 69, - 1780, 1775, 1776, 69, 1766, 1767, 69, 69, 1777, 69, - 1778, 1779, 1781, 1782, 1785, 69, 1783, 1772, 69, 69, - 1784, 69, 1773, 69, 1787, 1774, 1788, 1780, 1792, 1776, - 1786, 1789, 69, 69, 1790, 1777, 69, 1778, 1779, 1781, - 1782, 69, 69, 1783, 69, 1791, 69, 1784, 1793, 1794, - 1795, 1787, 1796, 69, 69, 69, 1797, 1786, 1789, 1798, - 69, 1790, 69, 1799, 2164, 1800, 1801, 1803, 69, 2164, - 1802, 69, 1791, 1804, 1805, 1793, 69, 69, 1812, 1796, - 1806, 69, 1809, 69, 69, 69, 1798, 1807, 69, 1810, - - 69, 69, 1800, 1801, 1803, 69, 69, 1802, 1808, 1813, - 1804, 1805, 1814, 1811, 69, 69, 69, 1806, 1816, 1809, - 69, 69, 1815, 2164, 1807, 69, 1810, 1818, 1820, 1817, - 1819, 1821, 69, 1822, 1826, 1808, 69, 1825, 1823, 1814, - 1811, 2164, 69, 1824, 69, 1827, 1852, 69, 1831, 1815, - 69, 69, 1828, 69, 1818, 69, 1817, 1819, 69, 69, - 1822, 1830, 1829, 1832, 1825, 1835, 69, 69, 69, 1833, - 69, 1834, 1827, 69, 69, 1831, 1838, 1836, 69, 1828, - 69, 1839, 1841, 1837, 69, 69, 69, 69, 1830, 1829, - 1832, 1840, 1835, 1842, 69, 69, 1833, 69, 1834, 69, - - 69, 69, 1845, 1838, 1836, 1843, 1844, 1846, 1839, 1841, - 1837, 1848, 69, 1847, 69, 69, 1849, 69, 1840, 1850, - 1842, 1851, 1853, 69, 1856, 1855, 1854, 69, 1859, 69, - 1861, 69, 1843, 1844, 1846, 1858, 1857, 1862, 1848, 2164, - 1847, 69, 69, 69, 69, 69, 1850, 69, 1851, 69, - 69, 1856, 1855, 1854, 1860, 1859, 69, 1861, 69, 1865, - 1863, 1864, 1858, 1857, 69, 1866, 69, 69, 69, 1867, - 1868, 1869, 1870, 1871, 1873, 1874, 1872, 1880, 1875, 1876, - 2164, 1860, 69, 1879, 1877, 69, 1865, 1863, 1864, 69, - 1878, 2164, 69, 69, 69, 1882, 1867, 69, 69, 69, - - 1871, 69, 69, 1872, 69, 1875, 69, 1883, 1884, 69, - 1879, 69, 1881, 1885, 69, 69, 1888, 1878, 69, 1889, - 1886, 1887, 1882, 1891, 1890, 1892, 1894, 2164, 69, 69, - 69, 69, 69, 1893, 1883, 1884, 69, 1896, 69, 1881, - 1885, 69, 1897, 1888, 1898, 69, 1889, 1886, 1887, 1895, - 1891, 1890, 69, 1894, 1899, 1900, 1903, 69, 1906, 1901, - 1893, 1902, 69, 69, 1896, 69, 69, 1907, 69, 1897, - 69, 1898, 1904, 1905, 69, 1908, 1895, 69, 1909, 69, - 69, 1899, 1900, 1903, 69, 69, 1901, 1910, 1902, 1911, - 1913, 69, 1912, 1915, 1907, 1914, 1916, 2164, 1917, 1904, - - 1905, 69, 1908, 1918, 2164, 69, 1921, 69, 69, 69, - 1919, 69, 2164, 1920, 1910, 2164, 1911, 69, 69, 1912, - 1915, 1922, 1914, 1916, 69, 1924, 1923, 69, 1925, 1927, - 69, 69, 1926, 69, 1931, 1928, 1932, 1919, 1934, 69, - 1920, 69, 1929, 1936, 1933, 1930, 69, 69, 1922, 1938, - 69, 69, 1924, 1923, 69, 1925, 1927, 69, 69, 1926, - 1935, 69, 1928, 1932, 1937, 1934, 1940, 1939, 69, 1929, - 1941, 1933, 1930, 69, 1942, 69, 69, 1944, 1943, 69, - 69, 1945, 69, 1946, 1947, 1948, 69, 1935, 69, 69, - 1949, 1937, 1951, 1940, 1939, 69, 1950, 1941, 1954, 69, - - 1956, 1952, 1953, 69, 69, 1943, 69, 1958, 1945, 69, - 1946, 69, 1948, 69, 69, 1955, 69, 1949, 1957, 1951, - 69, 69, 1959, 1950, 1960, 1954, 69, 69, 1952, 1953, - 1961, 1962, 1963, 1964, 69, 1965, 1966, 2164, 1967, 69, - 69, 69, 1955, 1968, 69, 1957, 1970, 1969, 1971, 69, - 1975, 69, 69, 69, 1980, 1976, 69, 1961, 1962, 69, - 1964, 1972, 1965, 1966, 69, 1967, 1973, 2164, 1977, 69, - 1968, 1974, 1978, 69, 1969, 69, 1979, 69, 69, 69, - 1981, 69, 1976, 69, 1982, 2164, 69, 69, 1972, 1985, - 1984, 1983, 1986, 1973, 69, 1977, 1989, 69, 1974, 1978, - - 69, 1990, 1991, 1979, 1987, 1988, 1992, 69, 69, 1994, - 69, 1982, 69, 1993, 69, 1995, 1985, 1984, 1983, 1996, - 1997, 1998, 69, 69, 69, 2000, 2003, 1999, 69, 1991, - 2002, 1987, 1988, 69, 2001, 69, 1994, 69, 2004, 69, - 1993, 2006, 1995, 2005, 2007, 2008, 69, 69, 69, 69, - 69, 69, 69, 69, 1999, 2009, 69, 2002, 2010, 69, - 2015, 2001, 2011, 2164, 2014, 2004, 2012, 69, 2006, 2013, - 2005, 69, 2008, 69, 69, 69, 69, 2016, 2017, 2020, - 2024, 2018, 2009, 2019, 69, 69, 69, 2015, 69, 2011, - 69, 2014, 69, 2012, 2026, 2023, 2013, 69, 69, 2021, - - 2022, 69, 69, 2027, 2016, 2017, 2020, 2024, 2018, 69, - 2019, 2025, 2028, 2029, 2030, 2031, 2164, 2033, 69, 2032, - 2034, 69, 2023, 2035, 2036, 2037, 2021, 2022, 2040, 69, - 69, 2039, 2038, 2041, 2042, 69, 69, 69, 2025, 2028, - 69, 69, 69, 69, 69, 2043, 2032, 2034, 2044, 69, - 2035, 69, 2037, 2045, 69, 2040, 2047, 69, 2039, 2038, - 69, 69, 2046, 2048, 69, 2049, 2050, 2052, 69, 69, - 69, 2051, 2043, 2053, 2054, 2044, 2055, 2056, 2057, 69, - 69, 2058, 2059, 2047, 2060, 2062, 2065, 69, 69, 2046, - 2048, 2164, 2049, 2050, 69, 2061, 69, 69, 2051, 2064, - - 69, 69, 2067, 69, 69, 2057, 2063, 69, 69, 2059, - 69, 2060, 69, 2068, 2066, 69, 2069, 2070, 69, 2072, - 2076, 69, 2061, 69, 69, 69, 2064, 69, 69, 2067, - 2071, 2073, 2074, 2063, 2077, 2075, 69, 2164, 69, 69, - 2068, 2066, 69, 2069, 2070, 69, 2072, 2076, 69, 2081, - 2084, 69, 2078, 2082, 69, 2079, 2080, 2071, 2073, 2074, - 69, 2077, 2075, 2083, 69, 69, 2085, 69, 2086, 2088, - 69, 2087, 2089, 2164, 2092, 2093, 2081, 69, 2090, 2078, - 2082, 2095, 2079, 2080, 69, 2091, 69, 69, 2099, 2094, - 2083, 2096, 2100, 2085, 69, 69, 69, 69, 2087, 2089, - - 69, 2092, 69, 69, 2097, 2090, 2098, 69, 69, 2101, - 2164, 2102, 2091, 69, 69, 2103, 2094, 2104, 2096, 2106, - 69, 2107, 69, 69, 69, 69, 2105, 69, 2110, 2108, - 69, 2097, 2109, 2098, 2164, 69, 2101, 2112, 2102, 2111, - 69, 2113, 2103, 69, 2104, 69, 2106, 2114, 2107, 69, - 69, 2119, 2164, 2105, 2115, 2110, 2108, 2116, 2117, 2109, - 2120, 69, 2118, 2124, 2112, 2164, 2111, 2122, 69, 2123, - 69, 2121, 2164, 69, 2114, 69, 69, 69, 2125, 69, - 69, 2115, 2127, 69, 2116, 2117, 69, 69, 2126, 2118, - 2131, 69, 2128, 2129, 2122, 69, 2123, 2130, 2121, 2132, - - 69, 69, 69, 2134, 69, 2125, 2133, 2164, 2135, 2127, - 2136, 69, 2139, 2164, 69, 2126, 69, 2131, 2137, 2128, - 2129, 69, 2140, 2138, 2130, 2164, 2132, 2141, 2142, 69, - 2134, 69, 69, 2133, 69, 2135, 69, 2136, 69, 69, - 2143, 2145, 69, 2144, 2146, 2137, 2149, 69, 2147, 2140, - 2138, 69, 2148, 2150, 2141, 2142, 69, 2151, 2164, 2152, - 69, 69, 69, 69, 2153, 69, 69, 2143, 2145, 2154, - 2144, 2146, 69, 2149, 2155, 2147, 2156, 2157, 2158, 2148, - 2150, 2162, 2164, 2163, 2151, 69, 2152, 2159, 2164, 69, - 2160, 69, 2164, 2164, 2161, 2164, 2154, 69, 69, 2164, - - 69, 69, 69, 69, 2157, 2158, 2164, 2164, 69, 69, - 69, 2164, 2164, 2164, 2159, 2164, 2164, 2160, 2164, 2164, - 2164, 2161, 41, 41, 41, 41, 41, 41, 41, 46, - 46, 46, 46, 46, 46, 46, 51, 51, 51, 51, - 51, 51, 51, 57, 57, 57, 57, 57, 57, 57, - 62, 62, 62, 62, 62, 62, 62, 72, 72, 2164, - 72, 72, 72, 72, 131, 131, 2164, 2164, 2164, 131, - 131, 133, 133, 2164, 2164, 133, 2164, 133, 135, 2164, - 2164, 2164, 2164, 2164, 135, 138, 138, 2164, 2164, 2164, - 138, 138, 140, 2164, 2164, 2164, 2164, 2164, 140, 142, - - 142, 2164, 142, 142, 142, 142, 73, 73, 2164, 73, - 73, 73, 73, 13, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164 + 168, 69, 173, 162, 163, 166, 69, 69, 134, 181, + + 175, 132, 160, 69, 169, 69, 69, 170, 69, 178, + 176, 167, 69, 179, 164, 165, 174, 168, 182, 2237, + 171, 172, 185, 203, 69, 184, 181, 175, 69, 188, + 177, 169, 69, 69, 170, 2237, 178, 176, 69, 69, + 179, 69, 69, 174, 186, 182, 187, 171, 172, 185, + 190, 189, 184, 69, 193, 69, 188, 177, 69, 69, + 191, 69, 194, 195, 192, 2237, 196, 199, 2237, 2237, + 69, 186, 197, 187, 69, 69, 205, 190, 189, 200, + 69, 193, 69, 201, 202, 204, 207, 191, 69, 194, + 195, 192, 69, 196, 199, 69, 206, 208, 69, 197, + + 69, 210, 69, 205, 213, 212, 200, 214, 69, 2237, + 201, 202, 204, 207, 215, 135, 69, 135, 135, 69, + 135, 217, 211, 206, 208, 218, 69, 69, 210, 216, + 2237, 213, 212, 220, 214, 140, 69, 140, 140, 219, + 140, 215, 73, 69, 73, 73, 221, 73, 217, 211, + 222, 69, 69, 141, 69, 230, 216, 69, 224, 223, + 220, 225, 69, 226, 229, 69, 219, 228, 2237, 227, + 240, 231, 2237, 221, 239, 232, 241, 222, 69, 69, + 143, 69, 242, 260, 244, 224, 223, 69, 225, 69, + 69, 229, 233, 2237, 228, 69, 227, 240, 69, 69, + + 69, 239, 232, 241, 69, 245, 243, 69, 246, 242, + 69, 244, 247, 250, 248, 69, 2237, 249, 2237, 233, + 234, 69, 69, 251, 69, 235, 252, 69, 264, 69, + 236, 258, 245, 243, 257, 246, 237, 238, 69, 247, + 250, 248, 267, 69, 249, 69, 261, 234, 69, 253, + 251, 259, 235, 252, 254, 269, 69, 236, 258, 262, + 69, 257, 69, 237, 238, 265, 255, 268, 256, 270, + 263, 266, 69, 261, 69, 69, 253, 69, 259, 271, + 2237, 254, 272, 69, 273, 276, 279, 69, 360, 69, + 69, 69, 265, 255, 268, 256, 69, 263, 266, 69, + + 274, 69, 275, 277, 278, 69, 271, 69, 69, 272, + 281, 273, 276, 279, 280, 69, 283, 282, 69, 284, + 285, 69, 69, 69, 69, 69, 69, 274, 286, 275, + 277, 278, 289, 293, 291, 292, 295, 281, 69, 287, + 288, 280, 69, 283, 282, 290, 284, 285, 69, 294, + 297, 69, 69, 296, 299, 69, 306, 69, 300, 69, + 69, 291, 292, 295, 69, 69, 287, 288, 305, 303, + 302, 307, 290, 298, 69, 301, 294, 308, 309, 69, + 296, 304, 69, 69, 141, 300, 69, 69, 69, 69, + 69, 310, 311, 69, 312, 305, 303, 302, 307, 315, + + 298, 69, 301, 313, 69, 309, 316, 69, 304, 69, + 314, 319, 69, 317, 318, 320, 327, 322, 310, 311, + 69, 312, 69, 69, 321, 324, 315, 326, 69, 2237, + 313, 69, 325, 316, 323, 329, 330, 314, 319, 69, + 317, 69, 320, 69, 322, 69, 69, 328, 69, 69, + 69, 321, 324, 331, 326, 69, 332, 333, 336, 325, + 69, 323, 69, 330, 69, 335, 338, 69, 334, 346, + 337, 69, 69, 339, 328, 69, 340, 69, 341, 345, + 331, 342, 69, 2237, 333, 336, 344, 69, 69, 343, + 69, 347, 335, 338, 69, 334, 69, 337, 69, 69, + + 339, 69, 348, 340, 353, 341, 345, 69, 342, 354, + 69, 356, 349, 344, 2237, 69, 343, 69, 347, 357, + 350, 351, 69, 352, 367, 69, 365, 355, 361, 348, + 69, 353, 362, 69, 69, 363, 354, 364, 356, 349, + 358, 359, 69, 366, 69, 369, 357, 350, 351, 69, + 352, 69, 69, 365, 355, 361, 368, 370, 371, 362, + 372, 69, 363, 375, 364, 69, 373, 358, 359, 69, + 366, 69, 369, 69, 374, 69, 378, 377, 69, 383, + 69, 376, 388, 368, 370, 371, 69, 372, 69, 381, + 379, 382, 69, 373, 384, 69, 380, 385, 69, 386, + + 389, 374, 387, 378, 2237, 69, 383, 2237, 376, 69, + 2237, 390, 69, 69, 69, 2237, 381, 379, 382, 391, + 69, 384, 69, 380, 385, 69, 386, 389, 392, 387, + 393, 394, 395, 405, 397, 69, 406, 409, 390, 411, + 2237, 410, 69, 141, 69, 69, 391, 69, 396, 69, + 413, 69, 420, 2237, 69, 392, 69, 393, 394, 395, + 405, 397, 407, 406, 409, 412, 411, 408, 410, 414, + 2237, 415, 69, 69, 2237, 396, 398, 399, 69, 417, + 416, 2237, 69, 418, 69, 419, 400, 69, 401, 402, + 403, 69, 412, 404, 69, 421, 414, 69, 415, 422, + + 424, 69, 69, 398, 399, 69, 417, 416, 423, 425, + 418, 69, 419, 400, 69, 401, 402, 403, 426, 427, + 404, 69, 421, 428, 429, 2237, 422, 430, 431, 69, + 433, 432, 69, 435, 69, 423, 425, 434, 436, 69, + 438, 69, 69, 69, 447, 426, 427, 444, 443, 69, + 439, 2237, 69, 437, 430, 431, 69, 433, 432, 458, + 435, 69, 69, 69, 434, 436, 69, 438, 440, 69, + 445, 446, 448, 449, 444, 443, 69, 439, 69, 441, + 437, 442, 450, 452, 2237, 451, 69, 453, 454, 69, + 69, 69, 2237, 69, 69, 440, 455, 445, 446, 448, + + 449, 457, 69, 456, 461, 69, 441, 69, 442, 450, + 452, 459, 451, 69, 453, 454, 460, 69, 69, 462, + 463, 464, 69, 455, 466, 2237, 69, 69, 457, 465, + 456, 461, 467, 468, 69, 69, 69, 69, 459, 69, + 469, 2237, 470, 460, 472, 2237, 462, 463, 464, 471, + 69, 466, 69, 2237, 69, 69, 465, 473, 474, 467, + 468, 479, 475, 69, 480, 69, 69, 469, 69, 470, + 476, 472, 477, 478, 69, 69, 471, 69, 483, 69, + 69, 482, 489, 481, 473, 474, 485, 484, 479, 475, + 487, 69, 486, 490, 493, 69, 69, 476, 492, 477, + + 478, 69, 491, 69, 69, 483, 69, 69, 482, 489, + 481, 494, 495, 488, 484, 69, 69, 69, 69, 486, + 490, 493, 69, 69, 496, 492, 504, 2237, 497, 491, + 506, 2237, 514, 69, 69, 69, 69, 505, 494, 495, + 488, 69, 509, 510, 69, 69, 511, 2237, 507, 513, + 69, 496, 512, 504, 69, 497, 498, 506, 508, 514, + 517, 499, 515, 500, 505, 525, 69, 531, 69, 509, + 510, 501, 69, 511, 502, 69, 513, 69, 519, 512, + 69, 503, 69, 498, 516, 508, 518, 517, 499, 515, + 500, 69, 520, 523, 521, 522, 69, 69, 501, 69, + + 69, 502, 69, 524, 528, 519, 527, 69, 503, 526, + 69, 516, 530, 518, 69, 69, 529, 532, 69, 520, + 523, 521, 522, 533, 69, 534, 141, 535, 2237, 536, + 524, 528, 69, 527, 538, 69, 526, 537, 541, 69, + 69, 69, 539, 529, 532, 540, 544, 545, 546, 69, + 547, 69, 534, 69, 535, 69, 536, 542, 69, 69, + 69, 538, 543, 548, 537, 541, 549, 550, 554, 539, + 551, 553, 540, 544, 69, 69, 69, 556, 552, 69, + 555, 557, 69, 558, 559, 561, 2237, 69, 2237, 69, + 69, 562, 69, 69, 560, 554, 574, 551, 553, 69, + + 69, 69, 563, 69, 69, 552, 69, 555, 557, 69, + 558, 559, 570, 69, 564, 69, 567, 69, 562, 565, + 571, 560, 568, 566, 569, 69, 2237, 572, 69, 563, + 579, 576, 573, 69, 69, 575, 2237, 587, 69, 570, + 69, 564, 69, 567, 69, 577, 565, 571, 69, 568, + 566, 569, 69, 69, 572, 69, 580, 579, 576, 573, + 581, 582, 575, 583, 584, 585, 586, 578, 69, 69, + 594, 69, 577, 589, 588, 69, 69, 591, 69, 590, + 592, 69, 69, 580, 596, 69, 595, 581, 582, 69, + 583, 584, 585, 586, 578, 69, 593, 69, 597, 69, + + 589, 588, 69, 69, 591, 598, 590, 592, 69, 69, + 599, 603, 601, 595, 602, 600, 69, 605, 2237, 608, + 2237, 604, 69, 593, 612, 597, 69, 69, 69, 69, + 606, 609, 598, 610, 69, 69, 614, 616, 611, 601, + 2237, 602, 69, 69, 605, 607, 608, 613, 604, 69, + 69, 612, 615, 69, 69, 622, 2237, 606, 609, 617, + 69, 69, 69, 614, 616, 69, 618, 621, 69, 619, + 627, 620, 607, 69, 613, 69, 623, 69, 69, 615, + 624, 631, 622, 625, 628, 626, 617, 629, 69, 69, + 69, 69, 69, 618, 621, 69, 619, 69, 620, 630, + + 632, 633, 69, 623, 69, 635, 634, 624, 631, 638, + 625, 628, 626, 69, 629, 636, 69, 69, 637, 639, + 643, 640, 641, 69, 645, 69, 630, 632, 633, 69, + 2237, 69, 635, 634, 644, 646, 638, 69, 69, 69, + 69, 642, 636, 69, 69, 637, 639, 643, 640, 641, + 69, 645, 69, 69, 647, 648, 653, 649, 650, 654, + 655, 644, 646, 651, 69, 660, 656, 69, 642, 659, + 2237, 652, 657, 69, 69, 2237, 141, 677, 69, 69, + 69, 647, 648, 653, 649, 650, 654, 658, 661, 69, + 651, 662, 69, 656, 670, 69, 659, 69, 652, 657, + + 69, 663, 69, 69, 664, 2237, 69, 69, 672, 69, + 671, 69, 2237, 673, 658, 661, 675, 2237, 662, 2237, + 69, 670, 2237, 685, 674, 688, 69, 69, 663, 676, + 2237, 664, 665, 690, 69, 672, 666, 671, 686, 667, + 673, 691, 69, 675, 69, 69, 668, 69, 687, 669, + 685, 674, 688, 2237, 69, 69, 676, 69, 689, 665, + 69, 69, 693, 666, 692, 686, 667, 2237, 691, 2237, + 694, 695, 708, 668, 69, 687, 669, 678, 679, 697, + 680, 69, 69, 681, 696, 689, 701, 698, 682, 693, + 69, 692, 700, 69, 683, 684, 69, 694, 695, 708, + + 69, 69, 699, 69, 678, 679, 697, 680, 69, 69, + 681, 696, 69, 701, 698, 682, 702, 69, 703, 700, + 704, 683, 684, 69, 705, 706, 69, 707, 2237, 699, + 711, 709, 713, 710, 712, 714, 2237, 69, 715, 69, + 69, 2237, 716, 702, 2237, 703, 69, 704, 2237, 717, + 69, 705, 706, 718, 707, 69, 69, 69, 709, 720, + 710, 712, 69, 69, 69, 715, 719, 69, 69, 716, + 721, 722, 69, 723, 724, 69, 717, 725, 726, 69, + 718, 69, 730, 2237, 728, 729, 720, 727, 2237, 733, + 69, 731, 69, 719, 732, 69, 69, 721, 722, 2237, + + 69, 724, 69, 69, 725, 734, 69, 69, 735, 730, + 69, 728, 729, 69, 727, 69, 733, 69, 731, 736, + 737, 732, 69, 739, 740, 741, 69, 742, 738, 745, + 743, 69, 734, 744, 69, 735, 69, 2237, 746, 748, + 69, 747, 758, 755, 69, 69, 736, 737, 69, 69, + 739, 69, 741, 750, 742, 738, 745, 743, 749, 69, + 744, 69, 69, 751, 752, 746, 748, 69, 747, 753, + 69, 754, 759, 757, 69, 767, 756, 2237, 760, 69, + 750, 69, 69, 69, 764, 749, 69, 761, 2237, 766, + 751, 752, 69, 765, 762, 69, 753, 2237, 754, 69, + + 757, 69, 763, 756, 69, 760, 69, 69, 768, 69, + 769, 764, 770, 771, 761, 69, 766, 772, 2237, 69, + 765, 762, 773, 775, 69, 774, 69, 2237, 776, 763, + 777, 2237, 69, 778, 69, 768, 782, 769, 780, 770, + 69, 69, 69, 779, 772, 69, 69, 781, 2237, 69, + 141, 69, 774, 69, 69, 776, 2237, 777, 789, 790, + 778, 2237, 2237, 782, 791, 780, 797, 792, 794, 69, + 779, 798, 2237, 793, 781, 783, 69, 784, 2237, 795, + 69, 785, 69, 786, 69, 789, 790, 2237, 787, 800, + 796, 791, 799, 788, 792, 794, 69, 801, 69, 69, + + 793, 69, 783, 69, 784, 69, 795, 804, 785, 69, + 786, 802, 69, 805, 807, 787, 800, 796, 808, 799, + 788, 803, 806, 809, 801, 810, 69, 69, 69, 69, + 819, 817, 818, 69, 804, 820, 2237, 2237, 802, 69, + 805, 807, 821, 69, 822, 808, 69, 829, 803, 806, + 69, 823, 69, 827, 69, 69, 812, 819, 817, 818, + 824, 813, 820, 814, 825, 830, 69, 826, 69, 821, + 69, 822, 69, 69, 815, 69, 828, 831, 823, 69, + 69, 816, 69, 812, 832, 69, 833, 824, 813, 69, + 814, 825, 830, 834, 826, 836, 837, 835, 69, 69, + + 839, 815, 841, 828, 831, 69, 838, 840, 816, 842, + 69, 832, 843, 69, 69, 69, 2237, 69, 69, 69, + 834, 845, 836, 837, 835, 69, 846, 844, 69, 841, + 848, 69, 69, 838, 840, 858, 842, 847, 849, 843, + 69, 850, 2237, 851, 69, 852, 859, 853, 845, 69, + 2237, 69, 69, 846, 844, 69, 854, 69, 855, 856, + 69, 857, 69, 863, 847, 849, 864, 69, 850, 69, + 851, 860, 852, 859, 853, 865, 861, 69, 69, 866, + 69, 862, 69, 854, 867, 855, 856, 69, 857, 69, + 863, 69, 69, 864, 869, 868, 870, 871, 860, 69, + + 2237, 874, 865, 69, 872, 873, 866, 69, 69, 2237, + 69, 867, 69, 875, 876, 877, 878, 880, 879, 881, + 2237, 69, 868, 870, 871, 883, 69, 69, 874, 69, + 69, 872, 873, 882, 69, 69, 69, 69, 69, 884, + 875, 876, 877, 878, 880, 879, 69, 885, 887, 886, + 888, 69, 883, 889, 2237, 69, 69, 69, 896, 890, + 882, 891, 892, 69, 69, 895, 884, 893, 894, 897, + 898, 69, 900, 2237, 885, 887, 886, 888, 899, 901, + 69, 69, 69, 69, 69, 69, 890, 69, 891, 892, + 69, 69, 895, 903, 893, 894, 902, 898, 905, 69, + + 69, 69, 907, 906, 909, 899, 901, 69, 69, 69, + 69, 908, 69, 69, 910, 912, 911, 913, 914, 2237, + 903, 69, 69, 902, 915, 905, 917, 69, 69, 907, + 906, 909, 916, 920, 918, 926, 2237, 922, 908, 919, + 2237, 910, 912, 911, 921, 69, 69, 69, 69, 69, + 69, 915, 69, 917, 923, 69, 69, 69, 924, 916, + 920, 918, 69, 927, 922, 925, 919, 929, 928, 931, + 69, 921, 930, 69, 69, 934, 69, 69, 935, 69, + 932, 923, 2237, 933, 936, 924, 2237, 941, 69, 938, + 927, 69, 925, 937, 929, 928, 931, 940, 2237, 930, + + 69, 69, 934, 939, 69, 935, 69, 932, 945, 69, + 933, 936, 69, 69, 941, 69, 938, 942, 943, 944, + 937, 947, 2237, 949, 940, 69, 946, 69, 952, 948, + 939, 69, 951, 2237, 961, 69, 2237, 2237, 2237, 69, + 69, 69, 950, 69, 942, 943, 944, 956, 947, 69, + 949, 955, 69, 946, 69, 952, 948, 953, 954, 951, + 69, 957, 960, 958, 69, 69, 69, 2237, 69, 950, + 69, 965, 959, 69, 956, 964, 963, 966, 955, 69, + 69, 962, 69, 970, 953, 954, 967, 971, 957, 960, + 958, 968, 69, 69, 69, 69, 69, 969, 965, 959, + + 972, 69, 964, 963, 966, 69, 979, 980, 962, 981, + 970, 982, 984, 983, 971, 2237, 2237, 2237, 69, 2237, + 69, 985, 986, 2237, 969, 69, 69, 972, 973, 990, + 69, 974, 975, 979, 980, 69, 976, 69, 982, 984, + 983, 69, 977, 69, 69, 987, 978, 988, 985, 986, + 69, 69, 989, 991, 69, 973, 990, 993, 974, 975, + 994, 995, 2237, 976, 996, 1042, 69, 992, 2237, 977, + 69, 69, 987, 978, 988, 2237, 69, 2237, 1005, 989, + 991, 1002, 1004, 69, 1006, 1008, 2237, 69, 995, 69, + 1007, 996, 69, 2237, 992, 997, 69, 69, 69, 69, + + 998, 69, 999, 69, 1000, 1005, 1001, 69, 1002, 1004, + 1009, 1006, 1008, 69, 2237, 1010, 1012, 1007, 1013, 1011, + 1014, 2237, 997, 1015, 1016, 1021, 69, 998, 1023, 999, + 1017, 1000, 69, 1001, 69, 1018, 69, 69, 1019, 69, + 69, 1020, 69, 1012, 69, 1013, 1011, 1014, 69, 1022, + 1015, 1016, 69, 1024, 1027, 69, 1025, 1017, 1026, 1029, + 1028, 69, 1018, 69, 2237, 1019, 69, 69, 1020, 1030, + 1032, 1034, 1036, 1031, 1043, 1033, 1022, 69, 69, 69, + 1024, 69, 69, 1025, 1035, 1026, 69, 1028, 1037, 1039, + 1044, 69, 1038, 69, 69, 1041, 1030, 69, 1034, 1036, + + 1031, 69, 1033, 69, 1040, 1045, 69, 1046, 1049, 69, + 69, 1035, 69, 1047, 69, 1037, 1039, 1044, 2237, 1038, + 1048, 69, 1041, 1050, 69, 69, 1051, 1053, 1052, 2237, + 69, 1040, 69, 69, 1046, 69, 69, 69, 1054, 1056, + 1047, 1057, 1061, 1059, 1055, 1058, 69, 1048, 1060, 69, + 1050, 69, 69, 1051, 1063, 1052, 69, 1064, 69, 69, + 1062, 1065, 69, 69, 1067, 1054, 1056, 1071, 1057, 1061, + 1059, 1055, 1058, 1066, 69, 1060, 1072, 69, 1069, 69, + 1073, 1063, 1068, 1070, 1064, 69, 69, 1062, 69, 1074, + 69, 1067, 1075, 69, 1071, 69, 1076, 1077, 1078, 1079, + + 1066, 69, 2237, 1072, 2237, 1080, 1082, 1073, 1084, 1068, + 69, 69, 1085, 1081, 69, 1088, 1074, 69, 69, 1075, + 1083, 69, 69, 1076, 1077, 1078, 1097, 1086, 69, 69, + 1087, 69, 1080, 1082, 69, 1084, 69, 69, 69, 1085, + 1081, 1089, 1088, 1090, 1091, 1092, 69, 1083, 1093, 1094, + 69, 69, 1096, 1097, 1086, 1095, 1098, 1087, 69, 69, + 69, 69, 1100, 69, 1099, 1106, 1101, 1103, 1089, 1102, + 1090, 1091, 1092, 69, 69, 1093, 1094, 1105, 69, 1096, + 69, 69, 1095, 1098, 1104, 1107, 1108, 1110, 69, 1100, + 69, 1099, 69, 1101, 1103, 1109, 1102, 69, 1112, 69, + + 1111, 1113, 1114, 2237, 1105, 1117, 1115, 1119, 2237, 1131, + 69, 1104, 69, 1108, 69, 69, 69, 69, 69, 1116, + 1120, 69, 1109, 69, 2237, 1112, 69, 1111, 1113, 1114, + 1118, 69, 1117, 1115, 1119, 1121, 1122, 69, 1123, 69, + 1125, 69, 69, 1124, 69, 1126, 1116, 1120, 69, 1127, + 1128, 1129, 1130, 1132, 69, 1135, 69, 1118, 69, 69, + 69, 1133, 1121, 1122, 1134, 1136, 1137, 1138, 2237, 69, + 69, 1140, 69, 69, 69, 69, 1127, 1128, 1129, 1130, + 1132, 1139, 1144, 1142, 69, 69, 1143, 69, 1133, 69, + 1141, 1134, 1136, 1137, 1138, 69, 69, 1146, 1140, 1145, + + 1147, 1149, 1148, 1150, 1151, 2237, 69, 2237, 1139, 1144, + 1142, 1157, 69, 1143, 69, 69, 1152, 1141, 69, 1159, + 1153, 69, 69, 1156, 69, 69, 1145, 1147, 1149, 1148, + 1150, 1151, 1155, 1154, 69, 1158, 1161, 1160, 69, 69, + 1163, 69, 69, 1152, 69, 69, 1159, 1153, 1162, 1164, + 1156, 1166, 1165, 1168, 1167, 69, 1169, 69, 2237, 1155, + 1154, 69, 1158, 1161, 1160, 1170, 1171, 1172, 2237, 1173, + 1174, 1179, 69, 69, 1176, 1162, 69, 69, 1166, 1165, + 69, 1167, 69, 69, 1175, 69, 69, 69, 1177, 1180, + 1178, 69, 69, 1171, 1172, 69, 1173, 1174, 69, 1181, + + 1183, 1176, 69, 1182, 1184, 69, 69, 1188, 2237, 1185, + 69, 1175, 69, 1186, 2237, 1177, 1180, 1178, 1191, 1187, + 69, 69, 1190, 2237, 1189, 1192, 1181, 1183, 2237, 69, + 1182, 1184, 69, 69, 69, 69, 1185, 1196, 1195, 1199, + 1186, 69, 1198, 1193, 69, 1191, 1187, 69, 1194, 1190, + 69, 1189, 1192, 1197, 1200, 69, 69, 1202, 1204, 69, + 69, 69, 2237, 1203, 1196, 1195, 1199, 69, 1208, 1198, + 1193, 1201, 1206, 1205, 1207, 1194, 69, 69, 69, 1209, + 1197, 69, 1210, 1212, 1211, 69, 69, 1213, 1218, 69, + 1203, 69, 2237, 69, 69, 1208, 69, 1214, 1201, 1206, + + 1205, 1207, 69, 1219, 69, 69, 1209, 69, 1220, 1210, + 1212, 1211, 1215, 1223, 1213, 1216, 1221, 1222, 1224, 69, + 69, 1225, 1226, 1229, 1214, 69, 69, 1217, 2237, 1230, + 1219, 69, 1231, 1227, 1234, 1220, 69, 69, 69, 1215, + 1223, 69, 1216, 1221, 1222, 1228, 1233, 69, 1225, 1226, + 69, 69, 69, 1232, 1217, 69, 1230, 69, 1236, 1235, + 1227, 69, 1237, 1238, 69, 1239, 1240, 69, 69, 69, + 69, 1248, 1228, 1233, 1242, 1243, 1241, 1244, 69, 69, + 1232, 69, 1246, 1250, 69, 1236, 1235, 1245, 69, 1237, + 1238, 69, 1239, 1240, 69, 69, 1247, 2237, 69, 1249, + + 1252, 1242, 69, 1241, 1244, 69, 69, 69, 1251, 1246, + 1250, 1253, 69, 1254, 1245, 1256, 69, 1257, 2237, 1255, + 1261, 1258, 1265, 1247, 69, 1262, 1249, 1252, 69, 69, + 1263, 69, 1266, 69, 69, 1251, 1259, 69, 1253, 1260, + 1254, 69, 1256, 1264, 1257, 69, 1255, 1261, 1258, 69, + 1267, 1269, 1262, 1268, 69, 2237, 1270, 1263, 1271, 69, + 1272, 69, 1276, 1259, 1275, 1277, 1260, 69, 69, 1284, + 1264, 69, 1273, 69, 69, 1274, 69, 1267, 1269, 1278, + 1268, 1279, 69, 1270, 1280, 1271, 69, 1272, 1281, 1282, + 69, 1275, 69, 69, 69, 69, 1284, 1283, 1285, 1273, + + 69, 69, 1274, 1286, 1288, 1289, 1278, 69, 1279, 1287, + 1297, 1280, 69, 1295, 1290, 1281, 1282, 1294, 1296, 1299, + 69, 1300, 69, 1316, 1283, 1285, 69, 69, 1291, 69, + 1286, 1288, 1289, 1302, 1292, 1301, 1287, 1293, 1298, 1303, + 69, 1290, 69, 69, 1294, 69, 69, 69, 1300, 1304, + 69, 69, 69, 1306, 69, 1291, 1305, 1309, 1310, 1307, + 1302, 1292, 1313, 1308, 1293, 1298, 1303, 69, 1314, 1311, + 69, 69, 69, 2237, 1312, 1322, 69, 69, 69, 69, + 1306, 69, 69, 1305, 1309, 1310, 1307, 1318, 1315, 1319, + 1308, 1317, 1324, 69, 69, 1314, 1311, 69, 69, 1320, + + 1321, 1312, 1322, 1323, 69, 1325, 1331, 69, 1327, 1328, + 69, 69, 1326, 69, 1318, 1315, 1319, 1332, 1317, 1324, + 1335, 69, 69, 1329, 69, 69, 1320, 1321, 69, 1330, + 1323, 1333, 69, 1331, 1334, 1327, 1328, 69, 69, 1326, + 1336, 69, 1337, 69, 1338, 1340, 69, 1335, 1339, 69, + 1329, 1341, 1343, 1342, 1345, 1344, 1330, 2237, 1333, 69, + 2237, 1334, 69, 69, 1346, 1347, 69, 69, 69, 1337, + 69, 69, 1340, 69, 1349, 1339, 1348, 69, 69, 1343, + 1342, 1345, 1344, 1350, 1351, 1356, 1352, 69, 1355, 69, + 1354, 1346, 1347, 1357, 69, 69, 1358, 69, 1367, 1353, + + 69, 1349, 69, 1348, 69, 1361, 69, 1360, 1359, 1363, + 1350, 1351, 69, 1352, 69, 1355, 69, 1354, 1364, 1365, + 1362, 1366, 1369, 1358, 69, 69, 1353, 69, 1368, 1370, + 69, 1371, 69, 1373, 1360, 1359, 69, 1372, 69, 69, + 1374, 1376, 1375, 1383, 69, 1364, 69, 1362, 1366, 1387, + 2237, 1381, 69, 2237, 69, 1368, 1370, 69, 69, 1382, + 1373, 1391, 69, 69, 1372, 1388, 69, 69, 69, 1375, + 1377, 1378, 1379, 69, 1384, 69, 1387, 1380, 1381, 1385, + 1389, 69, 1390, 1394, 1386, 69, 1382, 1392, 1393, 69, + 69, 1395, 1388, 69, 69, 69, 69, 1377, 1378, 1379, + + 1397, 1384, 1396, 69, 1380, 69, 1398, 1389, 1400, 1390, + 1394, 69, 1399, 69, 1392, 1393, 1401, 69, 69, 1402, + 1404, 1406, 1403, 1413, 1405, 2237, 69, 1397, 69, 1396, + 1408, 69, 1407, 1398, 69, 1400, 69, 69, 1409, 1399, + 1412, 69, 1411, 69, 1410, 69, 1402, 69, 1406, 1403, + 69, 1405, 1415, 69, 1414, 69, 1416, 1408, 1417, 1407, + 1418, 69, 69, 2237, 69, 1409, 1420, 1412, 1421, 1411, + 1419, 1410, 69, 1428, 1422, 69, 1423, 1425, 1424, 1415, + 1427, 1414, 69, 2237, 69, 69, 69, 69, 69, 2237, + 69, 69, 69, 1420, 1429, 1421, 2237, 1419, 1426, 69, + + 1428, 1422, 69, 1423, 1425, 1424, 69, 1427, 1431, 1434, + 1430, 1432, 1433, 1435, 1437, 1436, 69, 69, 1440, 1443, + 69, 1429, 1441, 69, 1444, 1426, 69, 1445, 69, 1448, + 1451, 1442, 69, 69, 69, 1431, 1434, 1430, 1432, 1433, + 1435, 69, 1436, 1438, 69, 69, 1443, 1446, 1439, 1441, + 1449, 69, 1447, 1450, 69, 1453, 69, 1452, 1442, 69, + 1456, 69, 69, 1455, 1457, 69, 1454, 1458, 69, 69, + 1438, 1459, 69, 1460, 1462, 1439, 1461, 1449, 69, 69, + 1450, 69, 1453, 1463, 1452, 1465, 69, 1464, 1466, 1467, + 1455, 1457, 69, 1454, 69, 1469, 1470, 69, 1459, 69, + + 1460, 69, 69, 1461, 1468, 1471, 1472, 2237, 1475, 69, + 69, 69, 1473, 69, 1464, 1466, 1467, 69, 69, 1474, + 1476, 69, 1469, 1470, 1478, 69, 1477, 69, 1485, 69, + 1479, 1468, 1471, 1472, 69, 69, 1480, 69, 69, 1473, + 1481, 1483, 1482, 1484, 1490, 1486, 1474, 1476, 69, 69, + 69, 69, 1489, 1477, 69, 1487, 1491, 1479, 69, 1492, + 69, 69, 69, 1480, 69, 69, 1488, 1481, 1483, 1482, + 1484, 1490, 1486, 1493, 69, 1494, 1495, 1496, 1497, 1489, + 1498, 69, 1487, 1491, 69, 1499, 69, 69, 69, 69, + 1500, 1503, 1501, 1488, 1502, 2237, 1504, 1505, 69, 2237, + + 1493, 1507, 1494, 1495, 1538, 1497, 69, 1498, 1516, 69, + 69, 69, 1499, 2237, 69, 69, 69, 69, 1503, 1501, + 1506, 1502, 69, 1504, 1505, 1508, 69, 1509, 1507, 1510, + 69, 1511, 1512, 1515, 1514, 69, 69, 1517, 1519, 2237, + 69, 69, 69, 69, 1518, 1513, 69, 1506, 69, 1523, + 2237, 69, 1508, 69, 1509, 1520, 1510, 1522, 1511, 1512, + 1515, 1514, 69, 1521, 1517, 1519, 1524, 1525, 1526, 1527, + 69, 1518, 1513, 1528, 69, 69, 1523, 69, 1529, 69, + 1530, 1532, 1520, 1548, 1522, 1531, 69, 69, 69, 69, + 1521, 69, 1533, 1524, 1525, 1526, 1527, 1536, 69, 1534, + + 1528, 1535, 1537, 69, 1540, 1529, 69, 69, 1532, 69, + 1539, 1541, 1531, 1544, 1542, 69, 1545, 69, 69, 1533, + 1543, 69, 69, 69, 1536, 1550, 1534, 1546, 1535, 1537, + 69, 1540, 69, 69, 1549, 2237, 1552, 1539, 1541, 69, + 69, 1542, 69, 1545, 1547, 1551, 1554, 1543, 1553, 1555, + 69, 69, 1550, 1556, 1546, 1558, 69, 2237, 2237, 1557, + 69, 1549, 69, 1552, 69, 69, 1559, 1561, 1560, 1562, + 1564, 1547, 1551, 1554, 69, 1553, 1555, 69, 69, 1565, + 1556, 1566, 69, 69, 69, 1563, 1557, 1572, 69, 69, + 1567, 69, 69, 1559, 1561, 1560, 1562, 1564, 1569, 69, + + 1571, 1570, 69, 1568, 1573, 69, 1565, 1575, 1566, 1577, + 1576, 69, 1563, 69, 1572, 1574, 1578, 1567, 69, 69, + 1582, 1579, 1584, 1588, 1580, 1569, 1589, 1571, 1570, 1581, + 1568, 69, 69, 69, 69, 69, 1577, 1576, 69, 69, + 1585, 69, 1574, 1578, 1583, 1593, 1590, 1582, 1579, 69, + 1588, 69, 1592, 69, 1586, 1591, 69, 1595, 1594, 2237, + 1597, 69, 1598, 2237, 1596, 1587, 69, 1585, 1600, 69, + 69, 1583, 69, 1590, 1599, 1606, 69, 69, 2237, 1592, + 69, 1586, 1591, 69, 69, 1594, 69, 1597, 1602, 1598, + 69, 1596, 1587, 1601, 1603, 1600, 1604, 69, 1605, 1607, + + 69, 1599, 69, 1610, 69, 69, 1608, 1609, 1613, 69, + 1614, 1611, 69, 69, 1620, 1602, 69, 2237, 69, 69, + 1601, 1603, 69, 1604, 1612, 1605, 1607, 1617, 1615, 69, + 1610, 1619, 69, 1608, 1609, 1613, 69, 1614, 1611, 1616, + 1618, 69, 69, 69, 1621, 69, 69, 1622, 1626, 1623, + 1624, 1612, 1625, 1627, 1617, 1615, 1629, 1628, 1619, 1630, + 2237, 69, 69, 2237, 69, 1633, 1616, 1618, 69, 69, + 69, 1621, 1634, 1635, 1622, 69, 1623, 1624, 69, 1625, + 69, 1636, 1637, 1629, 1628, 69, 1630, 1631, 69, 69, + 1632, 1638, 69, 1639, 69, 69, 1640, 1642, 1643, 1634, + + 1635, 1644, 1641, 1645, 1647, 69, 69, 69, 1636, 1637, + 69, 1648, 69, 1646, 1631, 1649, 1651, 1632, 1638, 1650, + 69, 1654, 1657, 69, 69, 1643, 69, 69, 69, 1641, + 69, 1647, 1652, 69, 1653, 2237, 1655, 1661, 1648, 1658, + 1646, 69, 69, 69, 1659, 69, 1650, 69, 1654, 69, + 1660, 1656, 2237, 1662, 1666, 69, 69, 1668, 69, 1652, + 69, 1653, 69, 1655, 69, 1663, 1658, 1664, 1665, 69, + 1670, 1659, 1671, 69, 1667, 1673, 1669, 1660, 1656, 69, + 1662, 69, 69, 69, 69, 1672, 2237, 1676, 1674, 1675, + 69, 69, 1663, 69, 1664, 1665, 1677, 1670, 69, 1671, + + 1679, 1667, 1673, 1669, 69, 1678, 69, 1680, 1681, 69, + 1682, 69, 1672, 69, 1676, 1674, 1675, 1687, 1683, 69, + 1684, 1685, 69, 1677, 1690, 1692, 1689, 1679, 1686, 69, + 69, 1688, 1678, 69, 1680, 1681, 69, 1682, 69, 69, + 1691, 69, 69, 2237, 1693, 1683, 1698, 1684, 1685, 69, + 1697, 1690, 1694, 1689, 69, 1686, 1703, 69, 1688, 1699, + 1701, 1695, 69, 1696, 69, 1700, 69, 1691, 69, 1702, + 69, 1693, 69, 1698, 69, 1704, 69, 1697, 1705, 1694, + 69, 1707, 1708, 1703, 69, 69, 1699, 1701, 1695, 1706, + 1696, 1709, 1700, 1710, 1711, 1714, 1702, 69, 2237, 1712, + + 2237, 1713, 1704, 1716, 69, 1705, 1715, 1719, 69, 69, + 69, 69, 69, 69, 1717, 1718, 1706, 1720, 1709, 69, + 1725, 69, 1714, 1721, 1724, 69, 1712, 69, 1713, 1722, + 1716, 69, 1723, 1715, 1719, 1727, 69, 69, 69, 69, + 69, 1717, 1718, 69, 69, 69, 1726, 1725, 1728, 1729, + 1721, 1724, 1730, 69, 1731, 1732, 1722, 69, 1733, 1723, + 1735, 69, 1727, 1742, 1734, 69, 1737, 1739, 69, 2237, + 69, 1736, 1738, 1726, 1740, 1744, 1729, 69, 1746, 1730, + 69, 1731, 1732, 69, 69, 69, 1741, 1735, 1743, 1745, + 69, 1734, 69, 1737, 1739, 69, 69, 1747, 1736, 1738, + + 69, 1740, 69, 69, 1748, 69, 69, 69, 1749, 69, + 1750, 1751, 1752, 1741, 1753, 1743, 1745, 2237, 1754, 1757, + 1755, 1756, 1761, 1759, 1747, 69, 69, 69, 1764, 69, + 69, 1748, 1765, 1760, 1758, 1749, 1766, 69, 69, 1772, + 69, 1753, 1768, 69, 69, 1754, 1757, 1755, 1756, 69, + 69, 69, 1763, 1762, 69, 69, 1767, 1769, 69, 1765, + 1760, 1758, 69, 69, 69, 1771, 69, 69, 1770, 1768, + 69, 1773, 1774, 1775, 2237, 1777, 1776, 2237, 69, 1763, + 1762, 69, 1778, 1767, 1769, 69, 1780, 69, 69, 1779, + 1781, 1784, 1771, 1782, 1785, 1770, 2237, 69, 69, 69, + + 1775, 69, 1777, 1776, 69, 69, 69, 1783, 1788, 1778, + 1786, 69, 69, 1780, 69, 69, 1779, 1781, 69, 1787, + 1782, 1785, 69, 1790, 1789, 1792, 69, 69, 1791, 1793, + 2237, 1800, 1801, 1796, 1783, 1788, 69, 1786, 69, 1794, + 1797, 1795, 1798, 69, 69, 69, 1787, 1802, 1799, 1804, + 1790, 1789, 1792, 69, 69, 1791, 1793, 69, 69, 69, + 1796, 1813, 1803, 1809, 69, 69, 1794, 1797, 1795, 1798, + 69, 69, 1805, 69, 1802, 1799, 1804, 1806, 1807, 69, + 1808, 69, 1812, 69, 1810, 1811, 69, 69, 69, 1803, + 1809, 69, 1814, 1815, 69, 1816, 2237, 1818, 2237, 1805, + + 1824, 1817, 69, 1822, 1806, 1807, 69, 1808, 69, 1812, + 69, 1810, 1811, 69, 1819, 69, 1820, 1821, 1823, 1814, + 1815, 1826, 1816, 69, 1818, 69, 1825, 69, 1817, 1827, + 69, 2237, 69, 69, 1832, 69, 1828, 69, 1831, 1829, + 1830, 1819, 1833, 1820, 1821, 69, 69, 69, 1826, 1834, + 1835, 1842, 1837, 1825, 1836, 2237, 1827, 1838, 69, 69, + 69, 1832, 69, 1828, 69, 1831, 1829, 1830, 1840, 69, + 69, 1843, 1839, 1841, 69, 69, 1834, 69, 69, 1837, + 69, 1836, 1844, 69, 1838, 1845, 1849, 1846, 1848, 1847, + 1850, 69, 1851, 1852, 1853, 1840, 1854, 69, 1843, 1839, + + 1841, 69, 69, 1855, 69, 1856, 2237, 1857, 1860, 1844, + 69, 69, 69, 69, 1846, 1848, 1847, 1850, 1861, 69, + 69, 1853, 1858, 69, 1859, 69, 69, 69, 1862, 1864, + 1855, 1863, 69, 69, 1857, 1860, 1866, 69, 69, 2237, + 69, 69, 1865, 1867, 1868, 1861, 1870, 1869, 69, 1858, + 1871, 1859, 1872, 69, 1873, 1862, 1864, 1874, 1863, 69, + 1875, 69, 2237, 1866, 1876, 69, 69, 1879, 1877, 1865, + 1867, 1868, 69, 69, 1869, 1878, 69, 69, 1880, 1872, + 69, 1873, 69, 1882, 1881, 1884, 1885, 1875, 1883, 69, + 69, 1876, 1887, 1886, 69, 1877, 1889, 69, 69, 1888, + + 2237, 2237, 1878, 1890, 2237, 69, 1891, 69, 69, 1892, + 1893, 1881, 1884, 1894, 69, 69, 69, 69, 69, 1887, + 1886, 1899, 69, 1889, 69, 1896, 1888, 1897, 69, 1895, + 1890, 1898, 1900, 1891, 69, 69, 1892, 1893, 69, 69, + 1894, 1904, 1906, 1901, 1908, 69, 1902, 69, 1899, 69, + 69, 69, 1896, 69, 1897, 1903, 1895, 1905, 1898, 1900, + 69, 1914, 1907, 69, 1909, 69, 1910, 1912, 69, 1906, + 1901, 69, 69, 1902, 69, 1913, 1911, 1915, 69, 1916, + 2237, 1917, 1903, 69, 1905, 1920, 1918, 1919, 69, 1907, + 69, 1909, 1922, 1910, 1912, 1923, 69, 1921, 69, 69, + + 69, 69, 1926, 1911, 1915, 1927, 1916, 69, 1917, 69, + 69, 1928, 1920, 1918, 1919, 1929, 1924, 1931, 69, 1922, + 1925, 1932, 69, 69, 1921, 1930, 1935, 69, 69, 1926, + 1933, 2237, 69, 1934, 1936, 69, 1937, 1940, 1928, 69, + 1938, 69, 69, 1924, 69, 1939, 69, 1925, 69, 1941, + 1942, 69, 1930, 1943, 1944, 69, 1945, 1933, 69, 69, + 1934, 69, 1946, 1937, 1940, 1948, 1947, 69, 1949, 1950, + 69, 1955, 69, 1954, 2237, 1951, 1941, 69, 69, 1952, + 1943, 1944, 69, 69, 69, 1957, 69, 1953, 69, 1946, + 69, 1956, 1948, 1947, 69, 1949, 1950, 69, 69, 69, + + 1954, 1958, 1951, 1959, 69, 1960, 1952, 1961, 1962, 69, + 2237, 2237, 1957, 1964, 1953, 1963, 1965, 69, 1956, 69, + 69, 1966, 1969, 1970, 2237, 1972, 1973, 1971, 1958, 69, + 1959, 69, 1960, 69, 1961, 1962, 69, 69, 1967, 69, + 1964, 1974, 1963, 1965, 1968, 69, 69, 69, 1966, 69, + 1970, 69, 69, 1973, 1971, 1975, 1976, 1977, 1978, 1982, + 1980, 1981, 1984, 1979, 1983, 1967, 69, 1986, 69, 2237, + 2237, 1968, 2237, 69, 69, 1985, 69, 69, 69, 1987, + 1988, 1991, 1975, 1976, 1977, 69, 69, 1980, 1981, 1984, + 1979, 69, 1992, 69, 69, 69, 1989, 69, 69, 1990, + + 2237, 1997, 1985, 69, 1993, 1994, 1987, 1988, 1991, 1995, + 1999, 1998, 1996, 2000, 69, 2237, 2002, 69, 69, 1992, + 2001, 69, 69, 1989, 2003, 2004, 1990, 69, 69, 69, + 2008, 1993, 1994, 2006, 2010, 69, 1995, 1999, 1998, 1996, + 2000, 2007, 69, 2005, 2013, 2011, 69, 2001, 69, 69, + 69, 2003, 69, 69, 2009, 69, 69, 2012, 2016, 2014, + 2006, 69, 69, 2017, 2015, 2022, 2020, 2018, 2007, 69, + 2005, 69, 2011, 69, 69, 69, 69, 2019, 2021, 69, + 2024, 2009, 2025, 2027, 2012, 2016, 2014, 69, 69, 2023, + 2017, 2015, 69, 2020, 2018, 2026, 69, 69, 2029, 2030, + + 2028, 69, 2034, 2237, 2019, 2021, 2031, 69, 2032, 69, + 69, 69, 69, 69, 2036, 2033, 2023, 2035, 2037, 69, + 69, 2038, 2026, 69, 2040, 2029, 69, 2028, 69, 2034, + 69, 2039, 69, 2031, 2043, 2032, 2042, 2041, 2044, 2048, + 2045, 2036, 2033, 69, 2035, 69, 2049, 2047, 69, 69, + 2051, 2040, 69, 2046, 69, 2050, 2052, 2054, 2039, 69, + 2057, 69, 69, 2042, 2041, 2044, 69, 2045, 69, 2058, + 2060, 69, 2061, 69, 2047, 2062, 2053, 2051, 69, 69, + 2046, 2064, 2050, 2052, 69, 2055, 2056, 69, 69, 69, + 2059, 2065, 2063, 2066, 69, 69, 69, 69, 69, 2061, + + 2067, 2068, 2062, 2053, 2070, 2237, 2071, 2069, 69, 69, + 2072, 2073, 2055, 2056, 69, 69, 2074, 2059, 69, 2063, + 69, 2075, 69, 69, 69, 2076, 2079, 2067, 69, 2077, + 2080, 2070, 69, 2071, 2069, 2237, 2078, 69, 2073, 69, + 2081, 2087, 2084, 2074, 2085, 69, 2237, 2082, 2075, 69, + 2237, 69, 69, 2079, 69, 2086, 2077, 69, 2083, 69, + 69, 2089, 69, 2078, 69, 69, 2088, 2081, 2087, 2084, + 69, 2085, 2090, 69, 2082, 2093, 69, 2091, 2092, 2094, + 2096, 69, 2086, 69, 2095, 2083, 2097, 69, 2089, 2098, + 2099, 69, 2100, 2088, 2101, 2102, 2237, 2103, 2104, 2090, + + 2105, 69, 2093, 2107, 2091, 2092, 2094, 69, 2106, 69, + 2109, 2095, 69, 69, 2108, 2111, 2098, 69, 2112, 69, + 69, 69, 69, 69, 2103, 69, 2113, 2105, 2114, 2110, + 69, 2115, 2116, 69, 69, 2106, 2117, 2109, 69, 2119, + 2237, 2108, 2111, 69, 69, 2112, 2118, 2121, 69, 2122, + 2124, 69, 2123, 69, 69, 69, 2110, 2125, 2115, 2116, + 69, 2120, 2126, 69, 2127, 2128, 2119, 69, 2129, 69, + 2130, 69, 2131, 2118, 2121, 2132, 2122, 69, 2133, 2123, + 2135, 2134, 2137, 2138, 69, 2136, 69, 2139, 2120, 69, + 69, 69, 69, 69, 69, 2129, 2140, 69, 2144, 69, + + 69, 2142, 2132, 2141, 69, 2133, 69, 69, 2134, 2137, + 69, 69, 2136, 2143, 2139, 69, 2145, 2148, 69, 2146, + 2147, 69, 69, 2140, 69, 2144, 69, 2150, 2142, 2149, + 2141, 2157, 2237, 69, 2151, 2154, 2237, 69, 2153, 69, + 2143, 69, 69, 2145, 2148, 69, 2146, 2147, 2152, 69, + 2158, 2155, 2156, 2159, 2150, 2160, 2149, 69, 69, 69, + 2161, 2151, 2154, 69, 2162, 2153, 2163, 2164, 69, 69, + 2166, 2165, 2167, 2168, 2172, 2152, 2173, 2158, 2155, 2156, + 69, 69, 2160, 69, 2169, 69, 69, 69, 69, 2171, + 2174, 2162, 2170, 2163, 2164, 2175, 69, 69, 2165, 2167, + + 69, 69, 69, 69, 2176, 2177, 69, 2178, 69, 69, + 2180, 2169, 69, 2179, 2181, 2182, 2171, 2174, 69, 2170, + 2237, 69, 2175, 69, 69, 2183, 2184, 2185, 69, 2186, + 69, 2176, 2177, 2187, 2178, 69, 2188, 2180, 2237, 2189, + 2179, 2181, 2182, 2190, 2193, 2192, 2197, 69, 69, 2191, + 2237, 2237, 2183, 2184, 2185, 2194, 69, 69, 69, 69, + 2187, 69, 2200, 2188, 2195, 69, 2189, 2237, 2204, 2199, + 2190, 69, 69, 2196, 2237, 69, 2191, 69, 69, 2198, + 2201, 69, 2194, 69, 69, 2202, 2205, 69, 69, 2200, + 2203, 2195, 2207, 69, 69, 2204, 2199, 2206, 2237, 2208, + + 2196, 2209, 2210, 2211, 69, 69, 2198, 2201, 69, 2212, + 2216, 69, 2202, 2205, 2213, 2214, 2237, 2203, 69, 2207, + 2237, 2218, 69, 69, 2206, 69, 2208, 2219, 2209, 2210, + 2211, 2215, 69, 2222, 69, 69, 69, 2216, 2217, 69, + 2225, 2213, 2214, 69, 2220, 2221, 69, 2223, 2218, 69, + 2226, 2228, 69, 69, 2219, 69, 2224, 2229, 2215, 69, + 2222, 2227, 2230, 2231, 69, 2217, 69, 2225, 2233, 2232, + 2235, 2220, 2221, 2236, 2223, 2237, 69, 69, 69, 2234, + 2237, 69, 69, 2224, 69, 69, 2237, 69, 2227, 2230, + 2231, 69, 2237, 2237, 2237, 2233, 2232, 69, 2237, 2237, + + 69, 2237, 2237, 2237, 2237, 2237, 2234, 41, 41, 41, + 41, 41, 41, 41, 46, 46, 46, 46, 46, 46, + 46, 51, 51, 51, 51, 51, 51, 51, 57, 57, + 57, 57, 57, 57, 57, 62, 62, 62, 62, 62, + 62, 62, 72, 72, 2237, 72, 72, 72, 72, 131, + 131, 2237, 2237, 2237, 131, 131, 133, 133, 2237, 2237, + 133, 2237, 133, 135, 2237, 2237, 2237, 2237, 2237, 135, + 138, 138, 2237, 2237, 2237, 138, 138, 140, 2237, 2237, + 2237, 2237, 2237, 140, 142, 142, 2237, 142, 142, 142, + 142, 73, 73, 2237, 73, 73, 73, 73, 13, 2237, + + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237 } ; -static yyconst flex_int16_t yy_chk[6281] = +static yyconst flex_int16_t yy_chk[6466] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1862,688 +1909,709 @@ static yyconst flex_int16_t yy_chk[6281] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 27, 6, 7, - 7, 7, 7, 671, 7, 8, 8, 8, 8, 27, + 7, 7, 7, 676, 7, 8, 8, 8, 8, 27, 8, 9, 9, 9, 10, 10, 10, 15, 45, 45, - 2170, 15, 23, 3, 27, 50, 4, 769, 50, 5, - 19, 6, 19, 19, 671, 19, 140, 7, 29, 61, + 2243, 15, 23, 3, 27, 50, 4, 775, 50, 5, + 19, 6, 19, 19, 676, 19, 140, 7, 29, 61, 61, 19, 23, 8, 138, 23, 20, 20, 9, 23, 29, 10, 11, 11, 11, 11, 11, 11, 12, 12, - 12, 12, 12, 12, 20, 29, 24, 137, 19, 23, + 12, 12, 12, 12, 20, 29, 24, 103, 19, 23, 20, 25, 11, 20, 20, 21, 75, 32, 12, 25, - 24, 70, 21, 32, 853, 70, 21, 96, 28, 21, - 11, 20, 24, 24, 132, 132, 12, 25, 25, 11, + 24, 70, 21, 32, 860, 70, 21, 103, 28, 21, + 11, 20, 24, 24, 103, 137, 12, 25, 25, 11, 75, 21, 21, 75, 32, 12, 25, 24, 26, 21, - 28, 26, 853, 21, 30, 28, 21, 22, 26, 96, + 28, 26, 860, 21, 30, 28, 21, 22, 26, 135, - 26, 22, 30, 135, 22, 116, 22, 22, 30, 133, + 26, 22, 30, 133, 22, 116, 22, 22, 30, 131, 31, 26, 30, 34, 31, 26, 77, 116, 26, 22, 30, 30, 76, 77, 22, 26, 34, 26, 22, 30, 31, 22, 116, 22, 22, 30, 31, 31, 35, 30, 34, 31, 35, 77, 134, 76, 37, 134, 37, 76, - 100, 131, 35, 100, 38, 35, 84, 31, 33, 38, - 68, 84, 33, 37, 35, 35, 39, 38, 33, 35, + 100, 68, 35, 100, 38, 35, 84, 31, 33, 38, + 62, 84, 33, 37, 35, 35, 39, 38, 33, 35, 39, 33, 37, 37, 39, 37, 80, 100, 33, 35, - 33, 38, 35, 84, 62, 33, 38, 139, 139, 33, + 33, 38, 35, 84, 57, 33, 38, 132, 132, 33, 37, 66, 39, 39, 80, 33, 125, 39, 33, 85, - 762, 39, 125, 80, 66, 33, 36, 85, 40, 36, + 768, 39, 125, 80, 66, 33, 36, 85, 40, 36, 40, 40, 56, 40, 56, 56, 36, 56, 66, 40, 36, 36, 64, 125, 64, 64, 85, 64, 36, 67, - 762, 67, 67, 36, 67, 69, 36, 69, 69, 72, + 768, 67, 67, 36, 67, 69, 36, 69, 69, 72, 69, 72, 72, 36, 72, 78, 69, 36, 36, 81, - 72, 87, 79, 82, 83, 83, 57, 86, 78, 82, - 64, 79, 81, 83, 87, 52, 88, 89, 92, 78, - 51, 266, 78, 88, 82, 86, 81, 72, 87, 79, + 72, 87, 79, 82, 83, 83, 52, 86, 78, 82, + 64, 79, 81, 83, 87, 51, 88, 89, 92, 78, + 139, 139, 78, 88, 82, 86, 81, 72, 87, 79, 82, 83, 83, 89, 93, 78, 82, 90, 91, 86, - 94, 92, 97, 88, 89, 92, 90, 91, 266, 101, - - 97, 46, 86, 94, 95, 98, 93, 95, 104, 99, - 103, 93, 101, 99, 90, 91, 102, 94, 105, 97, - 95, 95, 104, 109, 41, 98, 101, 98, 95, 14, - 103, 95, 98, 99, 95, 104, 99, 103, 105, 102, - 99, 106, 107, 102, 108, 105, 109, 95, 95, 107, - 109, 110, 98, 108, 111, 106, 112, 114, 111, 115, - 110, 113, 117, 112, 114, 115, 119, 120, 106, 107, - 117, 108, 13, 115, 0, 122, 111, 0, 110, 0, - 119, 111, 121, 112, 114, 111, 115, 113, 113, 117, - 118, 123, 115, 119, 118, 122, 124, 121, 0, 120, - - 123, 122, 122, 118, 126, 127, 129, 124, 130, 121, - 0, 128, 0, 0, 0, 129, 0, 118, 123, 0, - 0, 118, 122, 124, 144, 126, 128, 127, 145, 126, - 130, 126, 127, 129, 136, 130, 136, 136, 128, 136, - 141, 146, 141, 141, 142, 141, 142, 142, 144, 142, - 145, 144, 126, 147, 149, 145, 148, 150, 0, 152, - 153, 154, 149, 151, 157, 147, 152, 154, 0, 150, - 155, 0, 156, 146, 160, 148, 0, 176, 153, 0, - 147, 149, 142, 148, 150, 151, 152, 153, 230, 162, - 151, 158, 155, 154, 154, 158, 157, 155, 156, 156, - - 160, 160, 161, 163, 164, 165, 168, 167, 164, 176, - 161, 162, 158, 0, 166, 170, 162, 230, 168, 158, - 167, 0, 158, 0, 170, 163, 171, 172, 165, 161, - 163, 164, 165, 168, 167, 177, 166, 179, 0, 158, - 159, 166, 170, 169, 174, 159, 169, 180, 171, 172, - 159, 174, 0, 171, 172, 175, 159, 159, 169, 173, - 182, 177, 177, 159, 173, 180, 175, 159, 178, 179, - 169, 174, 159, 169, 180, 181, 173, 159, 173, 178, - 184, 181, 175, 159, 159, 173, 173, 183, 185, 0, - 186, 173, 182, 0, 187, 188, 191, 189, 190, 192, - - 178, 191, 181, 173, 189, 173, 178, 194, 187, 183, - 186, 201, 184, 193, 183, 203, 188, 186, 192, 190, - 185, 187, 188, 191, 189, 190, 192, 193, 196, 194, - 195, 197, 198, 199, 194, 207, 200, 205, 197, 196, - 193, 200, 195, 201, 202, 202, 206, 203, 210, 212, - 0, 0, 218, 202, 198, 196, 199, 195, 197, 198, - 199, 204, 205, 200, 205, 209, 206, 207, 204, 208, - 211, 202, 202, 206, 210, 210, 220, 208, 213, 214, - 209, 212, 215, 214, 218, 217, 216, 221, 204, 219, - 0, 223, 209, 211, 216, 213, 208, 215, 225, 221, - - 223, 0, 211, 213, 217, 213, 214, 227, 220, 215, - 222, 219, 217, 216, 221, 224, 219, 225, 223, 226, - 211, 226, 213, 222, 228, 225, 229, 231, 224, 232, - 234, 227, 233, 235, 227, 0, 231, 222, 236, 239, - 237, 234, 224, 238, 241, 235, 226, 242, 244, 228, - 0, 228, 229, 229, 231, 232, 232, 234, 233, 233, - 235, 238, 236, 237, 240, 236, 243, 237, 245, 246, - 238, 239, 248, 242, 242, 245, 241, 240, 246, 247, - 244, 249, 252, 251, 0, 247, 248, 250, 243, 253, - 257, 240, 251, 243, 254, 245, 246, 0, 253, 248, - - 256, 258, 259, 255, 0, 252, 247, 249, 249, 252, - 251, 250, 255, 272, 250, 256, 253, 259, 261, 262, - 254, 254, 257, 260, 263, 258, 0, 256, 258, 259, - 255, 260, 260, 264, 260, 0, 261, 262, 263, 267, - 272, 260, 0, 262, 268, 261, 262, 268, 264, 278, - 260, 263, 265, 265, 268, 269, 278, 270, 260, 260, - 264, 260, 274, 267, 262, 271, 267, 269, 273, 275, - 277, 268, 276, 280, 268, 270, 278, 265, 282, 265, - 265, 275, 269, 271, 270, 277, 279, 283, 274, 274, - 273, 412, 271, 281, 276, 273, 275, 277, 279, 276, - - 281, 284, 285, 286, 285, 280, 289, 284, 0, 283, - 282, 0, 292, 279, 283, 290, 286, 288, 412, 292, - 281, 0, 287, 284, 293, 287, 285, 287, 284, 285, - 286, 285, 291, 287, 284, 288, 293, 290, 289, 292, - 291, 295, 290, 294, 288, 296, 291, 305, 298, 287, - 300, 293, 287, 299, 287, 300, 294, 295, 296, 291, - 298, 303, 0, 301, 343, 295, 302, 291, 295, 301, - 294, 299, 296, 303, 302, 298, 304, 306, 343, 305, - 299, 306, 300, 304, 295, 297, 297, 307, 303, 308, - 301, 343, 0, 302, 307, 297, 308, 297, 297, 297, - - 0, 310, 297, 304, 306, 309, 311, 312, 313, 316, - 297, 0, 297, 297, 307, 313, 308, 309, 311, 314, - 318, 319, 297, 310, 297, 297, 297, 315, 310, 297, - 321, 318, 309, 311, 314, 313, 317, 321, 317, 312, - 315, 316, 322, 319, 320, 320, 314, 318, 319, 323, - 325, 324, 0, 322, 315, 0, 326, 321, 328, 327, - 323, 0, 332, 317, 324, 0, 0, 328, 329, 322, - 331, 335, 334, 320, 327, 325, 323, 325, 324, 326, - 330, 329, 327, 326, 332, 328, 327, 333, 331, 332, - 334, 330, 337, 330, 336, 329, 341, 331, 330, 334, - - 336, 327, 338, 335, 339, 340, 342, 330, 344, 345, - 333, 0, 340, 337, 333, 346, 368, 348, 330, 337, - 330, 336, 341, 341, 347, 338, 339, 349, 342, 338, - 347, 339, 340, 342, 344, 344, 352, 350, 346, 348, - 351, 345, 346, 353, 348, 349, 354, 355, 368, 356, - 0, 347, 350, 355, 349, 351, 358, 0, 360, 352, - 359, 361, 0, 352, 350, 362, 359, 351, 354, 353, - 353, 363, 362, 354, 355, 356, 356, 360, 392, 361, - 372, 367, 358, 358, 369, 360, 363, 359, 361, 366, - 370, 365, 362, 365, 367, 373, 366, 371, 363, 372, - - 365, 374, 369, 375, 392, 392, 376, 372, 367, 377, - 371, 369, 370, 409, 380, 379, 366, 370, 365, 376, - 365, 379, 409, 382, 371, 374, 375, 373, 374, 378, - 0, 377, 381, 376, 378, 375, 377, 380, 383, 384, - 409, 380, 379, 387, 381, 382, 388, 384, 386, 383, - 382, 387, 389, 375, 390, 386, 378, 388, 0, 381, - 394, 391, 389, 0, 395, 383, 384, 385, 391, 393, - 387, 393, 385, 388, 385, 386, 395, 0, 390, 0, - 396, 390, 385, 407, 389, 385, 394, 394, 391, 389, - 397, 395, 385, 385, 385, 396, 393, 398, 399, 385, - - 400, 385, 397, 399, 403, 398, 402, 396, 401, 385, - 411, 404, 385, 406, 402, 407, 403, 397, 413, 385, - 410, 415, 400, 0, 398, 399, 401, 400, 408, 411, - 414, 403, 404, 402, 410, 401, 406, 411, 404, 416, - 406, 417, 419, 408, 418, 414, 420, 410, 421, 422, - 413, 421, 425, 415, 416, 408, 418, 414, 423, 421, - 422, 426, 428, 423, 419, 417, 416, 424, 417, 419, - 420, 418, 427, 420, 429, 421, 422, 430, 421, 425, - 431, 424, 0, 432, 433, 435, 431, 434, 426, 428, - 423, 436, 433, 437, 424, 441, 0, 439, 0, 442, - - 0, 429, 443, 0, 427, 432, 434, 431, 435, 430, - 432, 433, 435, 438, 434, 443, 437, 446, 440, 439, - 437, 442, 438, 436, 439, 440, 442, 441, 444, 443, - 445, 448, 447, 444, 449, 450, 451, 444, 0, 445, - 438, 447, 453, 446, 446, 440, 0, 452, 450, 454, - 0, 455, 444, 448, 463, 444, 449, 445, 448, 447, - 444, 449, 450, 456, 444, 452, 453, 0, 451, 453, - 457, 454, 454, 455, 452, 458, 454, 459, 455, 462, - 461, 457, 460, 0, 464, 456, 463, 468, 465, 458, - 456, 461, 466, 470, 462, 467, 468, 457, 454, 459, - - 460, 471, 458, 473, 459, 464, 462, 461, 469, 460, - 472, 464, 465, 0, 468, 465, 466, 467, 474, 466, - 476, 469, 467, 471, 475, 470, 478, 473, 471, 475, - 473, 0, 477, 479, 476, 469, 480, 481, 482, 0, - 474, 479, 472, 484, 483, 474, 477, 476, 484, 0, - 485, 0, 481, 482, 480, 486, 475, 486, 478, 477, - 479, 481, 487, 480, 481, 482, 483, 489, 495, 0, - 488, 483, 490, 494, 491, 484, 485, 485, 488, 481, - 492, 490, 486, 491, 493, 0, 495, 487, 492, 487, - 496, 493, 489, 499, 489, 495, 494, 488, 498, 490, - - 494, 491, 496, 497, 500, 499, 498, 492, 501, 0, - 502, 493, 497, 503, 0, 504, 501, 496, 502, 506, - 499, 507, 0, 508, 510, 498, 0, 505, 0, 0, - 497, 508, 507, 509, 511, 501, 500, 502, 504, 503, - 503, 506, 504, 505, 510, 512, 506, 509, 507, 513, - 508, 510, 514, 515, 505, 516, 511, 518, 523, 517, - 509, 511, 515, 519, 523, 512, 520, 521, 528, 522, - 518, 513, 512, 0, 514, 516, 513, 517, 0, 514, - 515, 519, 516, 525, 518, 523, 517, 524, 520, 527, - 519, 521, 522, 520, 521, 524, 522, 527, 529, 533, - - 528, 525, 531, 530, 0, 529, 532, 0, 534, 535, - 525, 540, 551, 524, 524, 532, 527, 531, 535, 536, - 547, 536, 524, 540, 543, 529, 530, 534, 549, 531, - 530, 533, 537, 532, 543, 534, 535, 0, 540, 537, - 0, 547, 548, 546, 551, 550, 536, 547, 0, 580, - 0, 543, 554, 553, 549, 549, 558, 555, 554, 537, - 538, 546, 557, 0, 538, 548, 555, 538, 559, 548, - 546, 550, 550, 560, 538, 553, 556, 538, 556, 554, - 553, 580, 538, 558, 555, 561, 557, 538, 559, 557, - 564, 538, 562, 563, 538, 559, 0, 561, 567, 560, - - 560, 538, 565, 556, 538, 552, 552, 0, 552, 566, - 0, 552, 561, 567, 564, 563, 552, 564, 562, 562, - 563, 569, 552, 552, 565, 567, 572, 571, 569, 565, - 573, 552, 552, 552, 566, 552, 566, 568, 552, 570, - 577, 581, 573, 552, 576, 568, 571, 570, 569, 552, - 552, 575, 572, 572, 571, 574, 578, 573, 579, 576, - 575, 593, 577, 582, 568, 583, 570, 577, 574, 584, - 585, 576, 586, 581, 588, 590, 587, 591, 575, 0, - 579, 586, 574, 578, 0, 579, 583, 582, 584, 585, - 582, 592, 583, 593, 588, 591, 584, 585, 587, 586, - - 589, 588, 590, 587, 591, 594, 596, 597, 589, 599, - 592, 598, 603, 594, 601, 600, 604, 602, 592, 604, - 608, 607, 0, 0, 596, 597, 0, 589, 600, 602, - 603, 599, 594, 596, 597, 598, 599, 605, 598, 603, - 601, 601, 600, 604, 602, 605, 607, 608, 607, 609, - 611, 610, 612, 613, 617, 609, 611, 615, 613, 612, - 614, 605, 616, 617, 605, 619, 618, 614, 623, 621, - 622, 620, 605, 610, 618, 615, 609, 611, 610, 612, - 613, 617, 621, 619, 615, 616, 620, 614, 626, 616, - 625, 622, 619, 618, 624, 623, 621, 622, 620, 627, - - 628, 624, 629, 625, 0, 632, 631, 630, 634, 633, - 629, 632, 637, 638, 635, 630, 636, 625, 0, 640, - 626, 624, 630, 628, 642, 636, 637, 628, 631, 629, - 639, 627, 632, 631, 630, 633, 633, 639, 635, 637, - 634, 635, 630, 636, 641, 638, 640, 643, 645, 644, - 647, 642, 646, 641, 648, 646, 645, 639, 649, 643, - 652, 648, 0, 647, 649, 659, 653, 0, 0, 651, - 659, 641, 644, 0, 643, 645, 644, 647, 653, 646, - 654, 648, 654, 652, 657, 649, 650, 652, 650, 655, - 656, 0, 650, 653, 650, 651, 651, 659, 0, 650, - - 661, 658, 656, 664, 650, 660, 657, 654, 662, 665, - 650, 657, 655, 650, 658, 650, 655, 656, 660, 650, - 662, 650, 665, 661, 663, 664, 650, 661, 658, 667, - 664, 650, 660, 666, 663, 662, 665, 668, 669, 666, - 670, 674, 667, 0, 0, 0, 663, 673, 683, 0, - 678, 663, 675, 0, 676, 0, 667, 677, 668, 686, - 666, 663, 673, 674, 668, 675, 679, 670, 674, 676, - 669, 672, 678, 680, 673, 683, 672, 678, 672, 675, - 681, 676, 682, 677, 677, 679, 680, 684, 681, 672, - 682, 686, 689, 679, 687, 690, 672, 672, 672, 0, - - 680, 0, 691, 672, 688, 672, 689, 681, 693, 682, - 684, 695, 688, 704, 684, 694, 672, 692, 687, 689, - 0, 687, 695, 672, 691, 692, 693, 690, 696, 691, - 698, 688, 697, 694, 699, 693, 700, 0, 695, 0, - 697, 699, 694, 701, 692, 704, 696, 702, 703, 700, - 701, 706, 698, 714, 707, 696, 709, 698, 708, 697, - 710, 699, 707, 700, 706, 702, 703, 708, 709, 711, - 701, 712, 713, 715, 702, 703, 725, 718, 706, 714, - 714, 707, 710, 709, 719, 708, 716, 710, 718, 719, - 713, 711, 720, 712, 0, 720, 711, 721, 712, 713, - - 716, 722, 723, 724, 718, 715, 728, 727, 725, 723, - 726, 735, 728, 716, 722, 724, 719, 726, 720, 720, - 729, 721, 720, 731, 721, 730, 732, 0, 722, 723, - 724, 727, 735, 728, 727, 736, 730, 726, 735, 733, - 737, 738, 729, 746, 0, 731, 736, 729, 732, 740, - 731, 739, 730, 732, 733, 741, 742, 744, 740, 745, - 0, 737, 736, 743, 744, 742, 733, 737, 738, 739, - 747, 743, 748, 745, 751, 746, 740, 752, 739, 741, - 750, 753, 741, 742, 744, 754, 745, 755, 756, 750, - 743, 757, 747, 752, 748, 758, 753, 747, 751, 748, - - 756, 751, 759, 760, 752, 761, 764, 750, 753, 766, - 759, 766, 763, 757, 770, 756, 760, 754, 757, 755, - 761, 763, 758, 765, 764, 771, 768, 770, 772, 759, - 760, 765, 761, 764, 768, 772, 766, 771, 773, 763, - 774, 770, 775, 0, 0, 0, 776, 778, 779, 0, - 765, 0, 771, 768, 777, 772, 780, 786, 782, 783, - 778, 779, 0, 0, 775, 781, 782, 793, 784, 775, - 773, 776, 774, 776, 778, 779, 777, 781, 780, 783, - 784, 777, 785, 780, 786, 782, 783, 787, 788, 789, - 785, 790, 781, 793, 793, 784, 798, 788, 790, 794, - - 787, 0, 795, 797, 801, 798, 791, 799, 0, 785, - 789, 796, 801, 800, 787, 788, 789, 791, 790, 802, - 791, 794, 795, 798, 796, 799, 794, 797, 791, 795, - 797, 801, 805, 791, 799, 800, 807, 803, 796, 806, - 800, 802, 809, 808, 791, 803, 802, 791, 810, 813, - 809, 811, 812, 0, 807, 808, 815, 813, 822, 805, - 810, 816, 806, 807, 803, 815, 806, 812, 814, 809, - 808, 811, 817, 818, 814, 810, 813, 0, 811, 812, - 818, 823, 816, 815, 817, 819, 820, 824, 816, 825, - 822, 835, 819, 826, 823, 814, 825, 829, 828, 817, - - 818, 832, 827, 828, 820, 829, 824, 831, 823, 830, - 0, 833, 819, 820, 824, 826, 825, 827, 836, 834, - 826, 831, 830, 835, 829, 833, 837, 832, 832, 827, - 828, 838, 839, 840, 831, 841, 830, 834, 833, 843, - 842, 844, 846, 845, 836, 836, 834, 842, 837, 838, - 847, 846, 848, 837, 839, 840, 845, 843, 838, 839, - 840, 841, 841, 844, 849, 850, 843, 842, 844, 846, - 845, 0, 856, 0, 854, 0, 859, 0, 860, 852, - 858, 0, 847, 860, 848, 857, 849, 0, 850, 858, - 854, 849, 850, 851, 859, 856, 861, 857, 851, 856, - - 851, 854, 851, 859, 851, 852, 852, 858, 862, 861, - 860, 851, 857, 863, 864, 865, 867, 866, 0, 871, - 851, 863, 869, 861, 869, 851, 862, 851, 865, 851, - 866, 851, 870, 864, 867, 862, 868, 873, 872, 876, - 863, 864, 865, 867, 866, 868, 871, 875, 877, 869, - 872, 878, 880, 879, 870, 881, 877, 883, 0, 870, - 879, 876, 882, 868, 873, 872, 876, 886, 882, 884, - 885, 875, 888, 887, 875, 877, 884, 881, 878, 880, - 879, 889, 881, 890, 883, 891, 886, 892, 894, 882, - 889, 895, 885, 897, 886, 887, 884, 885, 888, 888, - - 887, 892, 896, 898, 890, 891, 900, 899, 889, 901, - 890, 902, 891, 904, 892, 899, 905, 904, 902, 903, - 894, 898, 900, 895, 896, 897, 903, 908, 907, 896, - 898, 906, 909, 900, 899, 907, 901, 906, 902, 911, - 904, 910, 908, 914, 906, 909, 903, 915, 905, 912, - 910, 913, 914, 913, 908, 907, 912, 916, 906, 909, - 918, 0, 922, 917, 906, 911, 911, 917, 910, 915, - 914, 920, 921, 923, 915, 924, 912, 921, 913, 920, - 922, 926, 918, 925, 916, 929, 925, 918, 924, 922, - 917, 927, 923, 928, 0, 925, 930, 932, 920, 931, - - 923, 941, 924, 926, 921, 932, 928, 935, 926, 941, - 925, 933, 933, 925, 939, 931, 927, 929, 927, 930, - 928, 934, 936, 930, 932, 937, 931, 940, 941, 935, - 934, 936, 937, 943, 935, 942, 940, 939, 933, 944, - 0, 939, 947, 945, 0, 946, 943, 948, 934, 936, - 942, 944, 937, 946, 940, 945, 949, 951, 954, 950, - 943, 952, 942, 957, 947, 953, 944, 948, 950, 947, - 945, 956, 946, 958, 948, 951, 955, 953, 949, 954, - 959, 962, 955, 949, 951, 954, 950, 952, 952, 960, - 963, 964, 953, 956, 968, 957, 0, 966, 956, 967, - - 0, 965, 968, 955, 971, 958, 959, 959, 962, 964, - 965, 971, 967, 963, 975, 960, 960, 963, 964, 966, - 969, 968, 970, 978, 966, 969, 967, 970, 965, 972, - 973, 971, 974, 976, 976, 977, 979, 972, 973, 980, - 974, 0, 0, 977, 978, 981, 975, 980, 987, 988, - 978, 984, 969, 981, 970, 982, 972, 973, 986, 974, - 976, 983, 977, 982, 984, 985, 980, 0, 979, 983, - 986, 985, 981, 988, 987, 987, 988, 990, 984, 989, - 991, 993, 982, 994, 995, 986, 992, 1000, 983, 1006, - 998, 0, 985, 1001, 989, 993, 0, 998, 995, 996, - - 0, 994, 991, 996, 990, 1002, 989, 991, 993, 992, - 994, 995, 999, 992, 1000, 1001, 996, 998, 1003, 1007, - 1001, 1006, 1004, 999, 996, 1003, 996, 1005, 1002, 1009, - 996, 1004, 1002, 1011, 1005, 1012, 1013, 1015, 1009, 999, - 1017, 0, 1018, 996, 0, 1003, 1007, 1020, 1025, 1004, - 1021, 1022, 1024, 1018, 1005, 1011, 1009, 1023, 0, 1023, - 1011, 1012, 1012, 1022, 1015, 1024, 1027, 1017, 1013, 1018, - 1025, 1020, 1028, 1026, 1020, 1025, 1021, 1021, 1022, 1024, - 1029, 0, 1030, 1031, 1023, 1026, 1032, 1029, 1031, 1033, - 1034, 1037, 1035, 1027, 1038, 1028, 1040, 0, 1034, 1028, - - 1026, 0, 1032, 1038, 1041, 1049, 0, 1029, 1030, 1030, - 1031, 1039, 1033, 1032, 1035, 1044, 1033, 1034, 1037, 1035, - 1042, 1038, 1040, 1040, 1039, 1043, 1041, 1042, 1045, 1046, - 0, 1041, 1043, 1044, 1047, 1048, 1046, 1049, 1039, 1050, - 1051, 1053, 1044, 1054, 0, 0, 1050, 1042, 1056, 1061, - 1045, 1059, 1043, 1060, 1053, 1045, 1046, 1048, 1061, 1047, - 1063, 1047, 1048, 1055, 1058, 1067, 1050, 1058, 1053, 1056, - 1054, 1055, 1051, 1062, 1064, 1056, 1061, 1059, 1059, 1060, - 1060, 1065, 1068, 1066, 1063, 1062, 1066, 1063, 1065, 1064, - 1055, 1058, 1070, 1069, 1071, 1073, 1071, 1067, 1066, 1072, - - 1062, 1064, 1074, 1075, 1068, 1078, 1080, 1066, 1065, 1068, - 1066, 1069, 1075, 1066, 1070, 1077, 1076, 1079, 1082, 1070, - 1069, 1071, 1077, 1072, 1076, 1066, 1072, 1073, 1074, 1074, - 1075, 1081, 1083, 1084, 0, 1081, 1088, 1078, 1080, 1079, - 1082, 1085, 1077, 1076, 1079, 1082, 1086, 1087, 1089, 1088, - 1085, 1090, 1092, 1086, 1087, 1084, 1091, 0, 1081, 1083, - 1084, 1089, 1093, 1088, 1094, 1098, 1090, 1095, 1085, 1093, - 1091, 1094, 1099, 1086, 1087, 1089, 1096, 1102, 1090, 1099, - 1095, 1101, 1096, 1091, 1092, 1100, 1108, 1103, 1108, 1093, - 1103, 1094, 1098, 1101, 1095, 1104, 0, 1102, 1109, 1099, - - 1110, 1112, 1111, 1096, 1102, 1103, 1104, 1100, 1101, 1112, - 1113, 1106, 1100, 1108, 1103, 1115, 1106, 1103, 1117, 1114, - 1120, 1117, 1104, 1106, 1119, 1109, 1111, 1110, 1112, 1111, - 1114, 1116, 1113, 1115, 1118, 1122, 1117, 1113, 1106, 1116, - 1124, 1123, 1115, 1106, 1121, 1117, 1114, 1120, 1117, 1122, - 1123, 1121, 1118, 1124, 1125, 1126, 1119, 1128, 1116, 1128, - 1129, 1118, 1122, 1130, 1131, 1125, 1133, 1124, 1123, 1129, - 1126, 1121, 1134, 1137, 1132, 1131, 1135, 1139, 1137, 1135, - 1141, 1125, 1126, 1143, 1128, 1147, 1134, 1129, 1133, 1130, - 1130, 1131, 1132, 1133, 1135, 1136, 1142, 0, 1134, 1134, - - 1144, 1132, 1140, 1135, 1136, 1137, 1135, 1146, 1152, 1139, - 1148, 1140, 1141, 1134, 1146, 1143, 1152, 1147, 1142, 1149, - 1153, 1144, 1136, 1142, 1148, 1149, 1154, 1144, 1156, 1140, - 1157, 1158, 1155, 1161, 1146, 1152, 1156, 1148, 1163, 1153, - 1154, 1155, 1158, 1149, 1162, 1159, 1149, 1153, 1164, 1167, - 1171, 1162, 1149, 1154, 1159, 1156, 1165, 1166, 1158, 1155, - 1161, 1163, 1157, 1182, 1168, 1163, 1178, 1167, 1168, 1170, - 1164, 1162, 1159, 1172, 1173, 1164, 1167, 1171, 1165, 1166, - 1174, 1170, 1175, 1165, 1166, 1176, 1172, 1179, 1184, 1181, - 1182, 1168, 1177, 1176, 1173, 1174, 1170, 1175, 1178, 1177, - - 1172, 1173, 1179, 1183, 1180, 1187, 1186, 1174, 1188, 1175, - 1181, 1189, 1176, 1180, 1179, 1184, 1181, 1190, 1191, 1177, - 0, 1195, 1196, 1187, 1192, 1191, 1189, 1183, 1186, 1192, - 1183, 1180, 1187, 1186, 1193, 1188, 1194, 1196, 1189, 1195, - 1197, 0, 1190, 1193, 1190, 1191, 1198, 1199, 1195, 1196, - 1200, 1192, 1197, 1202, 1201, 1206, 1203, 1200, 1194, 1207, - 1199, 1193, 1206, 1194, 1204, 1199, 1201, 1197, 1198, 1208, - 1204, 1205, 1209, 1198, 1199, 1211, 1208, 1200, 1210, 1205, - 1202, 1201, 1206, 1212, 1210, 1213, 1207, 1199, 1203, 1214, - 1216, 1204, 1217, 1218, 1220, 0, 1208, 1221, 1205, 1209, - - 1222, 1217, 1211, 1223, 0, 1210, 1212, 1219, 0, 1219, - 1212, 1227, 0, 1214, 0, 1230, 1214, 1213, 1220, 1217, - 1230, 1220, 1216, 1233, 1221, 1218, 1222, 1222, 1231, 1224, - 1224, 1224, 1225, 1226, 1219, 1223, 1224, 1239, 1228, 1225, - 1226, 1231, 1232, 1227, 1224, 1228, 1235, 1230, 1232, 1238, - 1233, 1234, 1234, 1242, 1236, 1231, 1224, 1224, 1224, 1225, - 1226, 1236, 1237, 1224, 1239, 1228, 1244, 1237, 1243, 1232, - 1245, 1242, 1235, 1235, 1243, 1238, 1238, 1249, 1234, 1246, - 1242, 1236, 1245, 1247, 1248, 1248, 1250, 1250, 1254, 1237, - 1253, 1251, 1257, 1244, 1256, 1243, 1258, 1245, 1255, 1246, - - 1259, 1247, 1251, 1249, 1249, 1255, 1246, 1260, 1261, 1262, - 1247, 1248, 1253, 1250, 1256, 1263, 1262, 1253, 1251, 1265, - 1254, 1256, 1264, 1263, 1257, 1255, 1261, 1259, 1258, 1260, - 1266, 1267, 1267, 1268, 1260, 1261, 1262, 1264, 1269, 1266, - 1270, 1273, 1263, 1265, 1272, 1276, 1265, 1274, 1278, 1264, - 1269, 1277, 1272, 1273, 1275, 1274, 1270, 1266, 1267, 1268, - 1268, 1280, 1284, 1270, 1281, 1269, 1276, 1270, 1273, 1277, - 1281, 1272, 1276, 1282, 1274, 1278, 1285, 1275, 1277, 1279, - 1283, 1275, 1287, 1270, 1279, 1286, 1282, 1283, 1280, 1289, - 1286, 1281, 1288, 1288, 1284, 1279, 1290, 1292, 1293, 1295, - - 1282, 1295, 1296, 1285, 1289, 1294, 1279, 1283, 1297, 1298, - 1302, 1279, 1292, 1297, 1287, 1299, 1289, 1286, 1303, 1288, - 1294, 1293, 1301, 1304, 1292, 1293, 1295, 1306, 1290, 1308, - 1299, 1305, 1294, 1307, 1296, 1297, 1302, 1302, 1305, 1310, - 1309, 1298, 1299, 1312, 1314, 1303, 1301, 1315, 1317, 1301, - 1304, 1308, 0, 1319, 1307, 1320, 1308, 1310, 1305, 1306, - 1307, 1309, 1315, 1317, 1318, 1312, 1310, 1309, 1314, 1322, - 1312, 1314, 1321, 1320, 1315, 1317, 1323, 1324, 1325, 1318, - 1319, 1326, 1320, 1323, 1327, 1329, 1332, 1325, 1328, 1326, - 0, 1318, 1333, 1330, 1321, 1324, 1322, 1332, 1334, 1321, - - 1335, 1333, 1337, 1323, 1324, 1325, 1330, 1327, 1326, 1342, - 1328, 1327, 1332, 1332, 1341, 1328, 1334, 1329, 1335, 1333, - 1330, 1339, 1342, 1343, 1332, 1334, 1341, 1335, 0, 1337, - 1344, 1346, 1339, 1345, 1347, 1348, 1342, 1351, 0, 1352, - 1344, 1341, 0, 1350, 1351, 1354, 1358, 1358, 1339, 1353, - 0, 1354, 1366, 1355, 1348, 1343, 1346, 1344, 1346, 1345, - 1345, 1347, 1348, 1350, 1351, 1352, 1352, 1353, 1355, 1356, - 1350, 1357, 1354, 1358, 1362, 1359, 1353, 1366, 1360, 1366, - 1355, 1362, 1363, 1367, 1356, 1365, 1357, 1359, 0, 1363, - 1371, 1360, 1367, 1368, 1369, 0, 1356, 1372, 1357, 1360, - - 1374, 1362, 1359, 1375, 1378, 1360, 1377, 1365, 1371, 1363, - 1367, 0, 1365, 1374, 1369, 1368, 1379, 1371, 1360, 1380, - 1368, 1369, 1372, 1381, 1372, 1376, 1376, 1374, 1377, 1378, - 1375, 1378, 1381, 1377, 1383, 1382, 1384, 1385, 1379, 0, - 1386, 1380, 1382, 1379, 1389, 1388, 1380, 1390, 1394, 1391, - 1381, 1385, 1376, 1388, 1393, 1395, 1392, 1389, 1384, 1386, - 1396, 1393, 1382, 1384, 1385, 1398, 1383, 1386, 1392, 1397, - 1401, 1389, 1388, 1399, 1390, 1391, 1391, 1395, 1403, 1407, - 1394, 1393, 1395, 1392, 1397, 1396, 1400, 1396, 1402, 1400, - 1404, 1398, 1398, 0, 1402, 1401, 1397, 1401, 1408, 1399, - - 1399, 1407, 1411, 1405, 1400, 1403, 1407, 1410, 1404, 1411, - 1412, 1413, 1415, 1400, 1417, 1402, 1400, 1404, 1405, 1412, - 1408, 1410, 1413, 1421, 1418, 1408, 1419, 1420, 1419, 1411, - 1405, 1422, 1423, 1415, 1410, 1417, 1418, 1412, 1413, 1415, - 1424, 1417, 1425, 1427, 1426, 1420, 1433, 1428, 1424, 1422, - 1421, 1418, 1428, 1419, 1420, 1429, 1430, 1427, 1422, 1423, - 0, 1434, 1435, 1430, 1436, 1425, 1426, 1424, 1437, 1425, - 1427, 1426, 1439, 1433, 1429, 1434, 1440, 1438, 1441, 1428, - 1435, 1439, 1429, 1430, 1442, 1443, 1445, 1434, 1434, 1435, - 1446, 1436, 1438, 1449, 1437, 1437, 1448, 1446, 1448, 1439, - - 1441, 1455, 1434, 1452, 1438, 1441, 1450, 1443, 1440, 1445, - 1450, 1442, 1443, 1445, 1451, 1449, 1456, 1446, 1453, 1457, - 1449, 1454, 1458, 1448, 0, 1452, 1451, 1453, 1455, 1460, - 1452, 1457, 1454, 1450, 1459, 1459, 1463, 1460, 1467, 1456, - 1463, 1451, 1462, 1456, 1458, 1453, 1457, 1465, 1454, 1458, - 1462, 1464, 1466, 1467, 1464, 1465, 1460, 1471, 1466, 1470, - 1468, 1459, 1473, 1463, 1472, 1467, 1468, 1474, 1475, 1462, - 1476, 1470, 1477, 1478, 1465, 1481, 1473, 0, 1464, 1466, - 1474, 1479, 1475, 1483, 1471, 1484, 1470, 1468, 1472, 1473, - 1480, 1472, 1485, 1479, 1474, 1475, 1476, 1476, 1487, 1477, - - 1478, 1481, 1481, 1482, 1480, 1486, 1482, 1488, 1479, 1489, - 1483, 1490, 1484, 1486, 1491, 1492, 1488, 1480, 1494, 1485, - 1495, 1482, 1497, 1492, 1500, 1487, 1498, 1491, 1501, 1496, - 1482, 1499, 1486, 1482, 1488, 1498, 1489, 1496, 1490, 1502, - 1494, 1491, 1492, 1501, 1506, 1494, 1511, 1495, 1500, 1497, - 1504, 1500, 1499, 1498, 1501, 1501, 1496, 1503, 1499, 1505, - 1509, 1508, 1504, 1510, 1509, 1503, 1502, 1505, 1508, 1511, - 1501, 1506, 1512, 1511, 1513, 1510, 1514, 1504, 1515, 1519, - 1516, 1522, 1513, 1518, 1503, 1515, 1505, 1509, 1508, 1520, - 1510, 1517, 1517, 1523, 0, 1533, 1522, 1519, 1525, 1512, - - 1516, 1513, 1524, 1514, 1524, 1515, 1519, 1516, 1522, 1518, - 1518, 1526, 1525, 1527, 1520, 1523, 1520, 1526, 1517, 1528, - 1523, 1529, 1534, 1532, 1530, 1525, 1531, 1533, 1539, 1524, - 1536, 1540, 1548, 1529, 1538, 1527, 1532, 1536, 1526, 1541, - 1527, 1528, 1530, 1548, 1531, 1534, 1528, 1541, 1529, 1534, - 1532, 1530, 1538, 1531, 1539, 1539, 1544, 1536, 1545, 1548, - 1542, 1538, 1542, 1540, 1547, 1541, 1541, 1542, 1544, 1549, - 1551, 1552, 1555, 1553, 1541, 1554, 1545, 1557, 1559, 1547, - 1553, 1558, 1560, 1544, 1549, 1545, 1562, 1542, 1561, 1542, - 1554, 1547, 1563, 1552, 1551, 1566, 1549, 1551, 1552, 1555, - - 1553, 1561, 1554, 1558, 1557, 1564, 1565, 1563, 1558, 1560, - 1559, 1568, 1562, 1562, 1565, 1561, 1569, 1570, 1564, 1563, - 1571, 1566, 1566, 1572, 1573, 1575, 1574, 1577, 1576, 1578, - 1572, 1573, 1564, 1565, 1568, 1576, 1579, 1580, 1568, 1574, - 1569, 1584, 1571, 1569, 1570, 1582, 1580, 1571, 1575, 1577, - 1572, 1573, 1575, 1574, 1577, 1576, 1582, 1579, 1583, 1585, - 0, 1578, 1586, 1579, 1580, 1590, 1589, 0, 1592, 1592, - 1591, 1597, 1582, 1584, 1593, 1599, 0, 1602, 1585, 1589, - 1583, 1603, 1604, 1606, 1599, 1583, 1585, 1586, 1608, 1586, - 1609, 1590, 1590, 1589, 1591, 1592, 1610, 1591, 1597, 1602, - - 1593, 1593, 1599, 1603, 1602, 1612, 1611, 1610, 1603, 1604, - 1606, 1611, 1616, 1614, 1615, 1619, 1609, 1609, 1618, 1620, - 1608, 1614, 1621, 1610, 1623, 0, 1625, 1612, 1620, 1615, - 1626, 1628, 1612, 1611, 1621, 1629, 1618, 1627, 1631, 1616, - 1614, 1615, 1630, 1632, 1633, 1618, 1620, 1619, 1629, 1621, - 1634, 1623, 1625, 1625, 1636, 1630, 1628, 1626, 1628, 1627, - 1631, 1635, 1629, 1636, 1627, 1631, 1637, 1638, 1639, 1630, - 1632, 1633, 1640, 1642, 1641, 1643, 1635, 1634, 0, 1644, - 1642, 1636, 1638, 1639, 1645, 1645, 1650, 1640, 1635, 1647, - 1658, 1646, 1637, 1637, 1638, 1639, 1641, 1644, 1646, 1640, - - 1642, 1641, 1643, 1647, 1648, 1651, 1644, 1648, 1649, 1653, - 1652, 1645, 1650, 1650, 1653, 1655, 1647, 1658, 1646, 1652, - 1654, 1649, 1656, 1651, 1654, 1659, 1657, 0, 1660, 1663, - 1664, 1648, 1651, 1666, 1667, 1649, 1653, 1652, 1663, 1655, - 1666, 1670, 1655, 1667, 1656, 1668, 1664, 1654, 1657, 1656, - 1668, 1669, 1659, 1657, 1660, 1660, 1663, 1664, 1669, 1670, - 1666, 1667, 1671, 1675, 1672, 0, 1673, 1676, 1670, 1671, - 1677, 1679, 1668, 1672, 1683, 1678, 1684, 1680, 1669, 1677, - 1685, 1686, 1683, 1679, 1690, 1676, 1680, 1681, 1682, 1671, - 1675, 1672, 1673, 1673, 1676, 1678, 1681, 1677, 1679, 1682, - - 1687, 1683, 1678, 1684, 1680, 1688, 1690, 1685, 1689, 1687, - 1696, 1690, 1691, 1686, 1681, 1682, 1689, 1688, 1692, 1691, - 1693, 1694, 1697, 1698, 1703, 1692, 1701, 1687, 1696, 1697, - 1702, 1698, 1688, 1701, 1705, 1689, 1706, 1696, 1711, 1691, - 1704, 1707, 1693, 1705, 1709, 1692, 1694, 1693, 1694, 1697, - 1698, 1703, 1704, 1701, 1702, 1710, 1709, 1702, 1712, 1714, - 1716, 1705, 1717, 1706, 1707, 1711, 1718, 1704, 1707, 1719, - 1717, 1709, 1712, 1720, 0, 1724, 1725, 1727, 1710, 0, - 1726, 1725, 1710, 1728, 1729, 1712, 1714, 1716, 1737, 1717, - 1730, 1719, 1734, 1718, 1726, 1727, 1719, 1731, 1730, 1735, - - 1720, 1724, 1724, 1725, 1727, 1728, 1729, 1726, 1733, 1738, - 1728, 1729, 1739, 1736, 1734, 1737, 1731, 1730, 1741, 1734, - 1733, 1735, 1740, 0, 1731, 1736, 1735, 1743, 1745, 1742, - 1744, 1746, 1739, 1749, 1752, 1733, 1738, 1751, 1750, 1739, - 1736, 0, 1744, 1750, 1740, 1753, 1781, 1749, 1757, 1740, - 1741, 1742, 1754, 1743, 1743, 1745, 1742, 1744, 1746, 1751, - 1749, 1756, 1755, 1758, 1751, 1762, 1752, 1757, 1753, 1759, - 1750, 1761, 1753, 1756, 1754, 1757, 1765, 1763, 1781, 1754, - 1755, 1766, 1768, 1764, 1759, 1758, 1763, 1762, 1756, 1755, - 1758, 1767, 1762, 1771, 1765, 1761, 1759, 1764, 1761, 1766, - - 1768, 1771, 1774, 1765, 1763, 1772, 1773, 1775, 1766, 1768, - 1764, 1777, 1772, 1776, 1773, 1775, 1778, 1767, 1767, 1779, - 1771, 1780, 1782, 1777, 1786, 1784, 1783, 1779, 1790, 1774, - 1793, 1776, 1772, 1773, 1775, 1789, 1787, 1796, 1777, 0, - 1776, 1790, 1786, 1778, 1780, 1783, 1779, 1784, 1780, 1782, - 1787, 1786, 1784, 1783, 1791, 1790, 1793, 1793, 1789, 1801, - 1798, 1800, 1789, 1787, 1796, 1802, 1791, 1798, 1800, 1803, - 1804, 1805, 1806, 1807, 1809, 1810, 1808, 1817, 1811, 1814, - 0, 1791, 1807, 1816, 1814, 1801, 1801, 1798, 1800, 1808, - 1815, 0, 1802, 1803, 1815, 1819, 1803, 1804, 1805, 1806, - - 1807, 1811, 1810, 1808, 1816, 1811, 1809, 1822, 1823, 1817, - 1816, 1814, 1818, 1825, 1818, 1825, 1827, 1815, 1819, 1828, - 1826, 1826, 1819, 1830, 1829, 1831, 1833, 0, 1828, 1822, - 1826, 1829, 1823, 1832, 1822, 1823, 1830, 1835, 1827, 1818, - 1825, 1832, 1836, 1827, 1837, 1833, 1828, 1826, 1826, 1834, - 1830, 1829, 1831, 1833, 1838, 1839, 1842, 1834, 1846, 1840, - 1832, 1841, 1841, 1835, 1835, 1838, 1840, 1847, 1836, 1836, - 1837, 1837, 1843, 1844, 1842, 1848, 1834, 1839, 1850, 1843, - 1844, 1838, 1839, 1842, 1848, 1846, 1840, 1851, 1841, 1852, - 1855, 1847, 1854, 1857, 1847, 1856, 1858, 0, 1859, 1843, - - 1844, 1854, 1848, 1859, 0, 1850, 1863, 1852, 1858, 1851, - 1860, 1857, 0, 1861, 1851, 0, 1852, 1855, 1856, 1854, - 1857, 1864, 1856, 1858, 1860, 1867, 1865, 1867, 1871, 1873, - 1859, 1861, 1872, 1863, 1878, 1875, 1879, 1860, 1881, 1864, - 1861, 1865, 1876, 1883, 1880, 1876, 1881, 1873, 1864, 1885, - 1871, 1880, 1867, 1865, 1879, 1871, 1873, 1875, 1872, 1872, - 1882, 1878, 1875, 1879, 1884, 1881, 1887, 1886, 1876, 1876, - 1888, 1880, 1876, 1886, 1889, 1883, 1885, 1891, 1890, 1888, - 1890, 1893, 1882, 1894, 1895, 1896, 1884, 1882, 1887, 1893, - 1897, 1884, 1899, 1887, 1886, 1894, 1898, 1888, 1902, 1896, - - 1904, 1900, 1901, 1899, 1891, 1890, 1889, 1907, 1893, 1900, - 1894, 1895, 1896, 1897, 1898, 1903, 1903, 1897, 1905, 1899, - 1902, 1901, 1908, 1898, 1910, 1902, 1905, 1904, 1900, 1901, - 1911, 1912, 1914, 1915, 1907, 1916, 1917, 0, 1919, 1916, - 1915, 1911, 1903, 1920, 1917, 1905, 1923, 1922, 1924, 1908, - 1928, 1910, 1922, 1912, 1934, 1929, 1920, 1911, 1912, 1914, - 1915, 1925, 1916, 1917, 1919, 1919, 1926, 0, 1930, 1925, - 1920, 1927, 1932, 1923, 1922, 1924, 1933, 1928, 1927, 1929, - 1935, 1926, 1929, 1933, 1936, 0, 1934, 1932, 1925, 1940, - 1939, 1937, 1941, 1926, 1930, 1930, 1943, 1940, 1927, 1932, - - 1937, 1945, 1946, 1933, 1942, 1942, 1948, 1935, 1936, 1950, - 1946, 1936, 1939, 1949, 1942, 1951, 1940, 1939, 1937, 1952, - 1953, 1954, 1950, 1943, 1941, 1957, 1964, 1955, 1945, 1946, - 1962, 1942, 1942, 1948, 1961, 1949, 1950, 1951, 1965, 1961, - 1949, 1967, 1951, 1966, 1968, 1969, 1952, 1953, 1954, 1955, - 1966, 1965, 1957, 1964, 1955, 1972, 1962, 1962, 1973, 1967, - 1979, 1961, 1974, 0, 1978, 1965, 1976, 1969, 1967, 1977, - 1966, 1968, 1969, 1976, 1972, 1979, 1977, 1980, 1982, 1985, - 1988, 1983, 1972, 1984, 1974, 1973, 1978, 1979, 1983, 1974, - 1985, 1978, 1984, 1976, 1993, 1987, 1977, 1982, 1980, 1986, - - 1986, 1987, 1988, 1994, 1980, 1982, 1985, 1988, 1983, 1986, - 1984, 1991, 1995, 1999, 2001, 2001, 0, 2004, 1991, 2002, - 2005, 1993, 1987, 2006, 2008, 2009, 1986, 1986, 2013, 2005, - 1994, 2012, 2011, 2014, 2015, 1995, 2006, 2009, 1991, 1995, - 1999, 2011, 2002, 2001, 2004, 2016, 2002, 2005, 2017, 2012, - 2006, 2008, 2009, 2018, 2013, 2013, 2020, 2016, 2012, 2011, - 2014, 2015, 2019, 2021, 2019, 2022, 2023, 2025, 2020, 2021, - 2017, 2024, 2016, 2028, 2030, 2017, 2031, 2032, 2034, 2024, - 2018, 2035, 2037, 2020, 2038, 2040, 2046, 2022, 2023, 2019, - 2021, 0, 2022, 2023, 2025, 2039, 2034, 2037, 2024, 2044, - - 2028, 2030, 2048, 2031, 2032, 2034, 2043, 2039, 2035, 2037, - 2038, 2038, 2040, 2049, 2047, 2043, 2050, 2051, 2046, 2059, - 2064, 2049, 2039, 2044, 2048, 2050, 2044, 2047, 2051, 2048, - 2057, 2060, 2061, 2043, 2065, 2063, 2064, 0, 2060, 2063, - 2049, 2047, 2059, 2050, 2051, 2061, 2059, 2064, 2065, 2069, - 2072, 2069, 2066, 2070, 2057, 2067, 2068, 2057, 2060, 2061, - 2066, 2065, 2063, 2071, 2067, 2070, 2073, 2068, 2074, 2076, - 2071, 2075, 2077, 0, 2080, 2081, 2069, 2072, 2078, 2066, - 2070, 2083, 2067, 2068, 2073, 2079, 2080, 2079, 2090, 2082, - 2071, 2085, 2091, 2073, 2077, 2074, 2076, 2075, 2075, 2077, - - 2078, 2080, 2082, 2085, 2087, 2078, 2089, 2081, 2083, 2092, - 0, 2093, 2079, 2087, 2089, 2094, 2082, 2096, 2085, 2098, - 2090, 2099, 2092, 2094, 2091, 2093, 2097, 2098, 2102, 2100, - 2096, 2087, 2101, 2089, 0, 2099, 2092, 2104, 2093, 2103, - 2101, 2105, 2094, 2100, 2096, 2104, 2098, 2106, 2099, 2097, - 2102, 2111, 0, 2097, 2107, 2102, 2100, 2108, 2109, 2101, - 2112, 2103, 2110, 2117, 2104, 0, 2103, 2115, 2105, 2116, - 2110, 2114, 0, 2106, 2106, 2115, 2107, 2116, 2118, 2108, - 2109, 2107, 2121, 2111, 2108, 2109, 2118, 2112, 2119, 2110, - 2125, 2114, 2122, 2123, 2115, 2117, 2116, 2124, 2114, 2126, - - 2122, 2123, 2119, 2128, 2121, 2118, 2127, 0, 2129, 2121, - 2130, 2124, 2133, 0, 2127, 2119, 2125, 2125, 2131, 2122, - 2123, 2126, 2134, 2132, 2124, 0, 2126, 2135, 2136, 2128, - 2128, 2132, 2130, 2127, 2129, 2129, 2136, 2130, 2131, 2133, - 2137, 2140, 2134, 2138, 2141, 2131, 2144, 2135, 2142, 2134, - 2132, 2138, 2143, 2145, 2135, 2136, 2142, 2146, 0, 2147, - 2143, 2145, 2137, 2140, 2148, 2146, 2141, 2137, 2140, 2149, - 2138, 2141, 2144, 2144, 2150, 2142, 2151, 2152, 2154, 2143, - 2145, 2160, 0, 2161, 2146, 2147, 2147, 2157, 0, 2149, - 2158, 2148, 0, 0, 2159, 0, 2149, 2152, 2158, 0, - - 2154, 2150, 2159, 2151, 2152, 2154, 0, 0, 2160, 2157, - 2161, 0, 0, 0, 2157, 0, 0, 2158, 0, 0, - 0, 2159, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2166, - 2166, 2166, 2166, 2166, 2166, 2166, 2167, 2167, 2167, 2167, - 2167, 2167, 2167, 2168, 2168, 2168, 2168, 2168, 2168, 2168, - 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2171, 2171, 0, - 2171, 2171, 2171, 2171, 2172, 2172, 0, 0, 0, 2172, - 2172, 2173, 2173, 0, 0, 2173, 0, 2173, 2174, 0, - 0, 0, 0, 0, 2174, 2175, 2175, 0, 0, 0, - 2175, 2175, 2176, 0, 0, 0, 0, 0, 2176, 2177, - - 2177, 0, 2177, 2177, 2177, 2177, 2178, 2178, 0, 2178, - 2178, 2178, 2178, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, - 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164 + 94, 92, 96, 88, 89, 92, 90, 91, 46, 101, + + 97, 41, 86, 94, 95, 14, 93, 95, 97, 99, + 98, 93, 101, 99, 90, 91, 96, 94, 102, 13, + 95, 95, 105, 120, 96, 104, 101, 97, 95, 108, + 98, 95, 98, 99, 95, 0, 99, 98, 108, 104, + 99, 102, 105, 96, 106, 102, 107, 95, 95, 105, + 110, 109, 104, 107, 112, 120, 108, 98, 106, 110, + 111, 112, 113, 114, 111, 0, 115, 117, 0, 0, + 114, 106, 115, 107, 109, 117, 122, 110, 109, 118, + 115, 112, 111, 118, 119, 121, 123, 111, 113, 113, + 114, 111, 118, 115, 117, 123, 122, 124, 119, 115, + + 121, 126, 122, 122, 128, 127, 118, 129, 124, 0, + 118, 119, 121, 123, 130, 136, 129, 136, 136, 128, + 136, 145, 126, 122, 124, 146, 126, 127, 126, 144, + 0, 128, 127, 148, 129, 141, 130, 141, 141, 147, + 141, 130, 142, 145, 142, 142, 149, 142, 145, 126, + 150, 147, 148, 144, 149, 157, 144, 146, 152, 151, + 148, 153, 150, 154, 156, 152, 147, 155, 0, 154, + 161, 158, 0, 149, 160, 158, 162, 150, 161, 153, + 142, 151, 163, 177, 165, 152, 151, 157, 153, 155, + 156, 156, 158, 0, 155, 154, 154, 161, 162, 158, + + 160, 160, 158, 162, 163, 166, 164, 165, 167, 163, + 164, 165, 168, 170, 169, 177, 0, 169, 0, 158, + 159, 167, 170, 171, 168, 159, 172, 166, 180, 169, + 159, 175, 166, 164, 174, 167, 159, 159, 175, 168, + 170, 169, 183, 159, 169, 171, 178, 159, 172, 173, + 171, 176, 159, 172, 173, 185, 174, 159, 175, 179, + 180, 174, 176, 159, 159, 181, 173, 184, 173, 186, + 179, 182, 178, 178, 183, 173, 173, 182, 176, 187, + 0, 173, 188, 181, 189, 192, 195, 185, 268, 184, + 192, 179, 181, 173, 184, 173, 188, 179, 182, 187, + + 190, 186, 191, 193, 194, 189, 187, 190, 195, 188, + 197, 189, 192, 195, 196, 268, 199, 198, 194, 200, + 201, 197, 193, 191, 198, 201, 196, 190, 202, 191, + 193, 194, 204, 208, 206, 207, 210, 197, 199, 203, + 203, 196, 200, 199, 198, 205, 200, 201, 203, 209, + 212, 210, 205, 211, 213, 207, 219, 209, 214, 206, + 202, 206, 207, 210, 204, 208, 203, 203, 218, 216, + 215, 220, 205, 212, 215, 214, 209, 221, 222, 211, + 211, 217, 212, 214, 216, 214, 213, 218, 219, 217, + 222, 223, 224, 220, 225, 218, 216, 215, 220, 228, + + 212, 224, 214, 226, 223, 222, 229, 225, 217, 221, + 227, 232, 227, 230, 231, 233, 240, 235, 223, 224, + 232, 225, 226, 228, 234, 237, 228, 239, 235, 0, + 226, 229, 238, 229, 236, 242, 243, 227, 232, 230, + 230, 233, 233, 231, 235, 239, 236, 241, 240, 237, + 234, 234, 237, 244, 239, 238, 245, 246, 249, 238, + 241, 236, 243, 243, 246, 248, 251, 242, 247, 259, + 250, 248, 249, 252, 241, 244, 253, 247, 254, 258, + 244, 255, 252, 0, 246, 249, 257, 254, 245, 256, + 251, 260, 248, 251, 258, 247, 250, 250, 256, 253, + + 252, 259, 261, 253, 263, 254, 258, 255, 255, 264, + 257, 265, 262, 257, 0, 260, 256, 261, 260, 266, + 262, 262, 263, 262, 274, 265, 272, 264, 269, 261, + 262, 263, 270, 264, 266, 270, 264, 271, 265, 262, + 267, 267, 270, 273, 272, 276, 266, 262, 262, 271, + 262, 274, 269, 272, 264, 269, 275, 277, 278, 270, + 279, 273, 270, 282, 271, 267, 280, 267, 267, 277, + 273, 276, 276, 280, 281, 279, 285, 284, 275, 288, + 278, 283, 291, 275, 277, 278, 281, 279, 283, 287, + 286, 287, 288, 280, 289, 282, 286, 289, 285, 289, + + 292, 281, 290, 285, 0, 289, 288, 0, 283, 284, + 0, 293, 286, 287, 291, 0, 287, 286, 287, 293, + 290, 289, 292, 286, 289, 293, 289, 292, 294, 290, + 295, 296, 297, 300, 298, 294, 301, 303, 293, 305, + 0, 304, 295, 303, 296, 300, 293, 298, 297, 304, + 307, 305, 314, 0, 301, 294, 297, 295, 296, 297, + 300, 298, 302, 301, 303, 306, 305, 302, 304, 308, + 0, 309, 306, 308, 0, 297, 299, 299, 309, 311, + 310, 0, 307, 312, 314, 313, 299, 310, 299, 299, + 299, 311, 306, 299, 302, 315, 308, 313, 309, 316, + + 318, 299, 315, 299, 299, 312, 311, 310, 317, 319, + 312, 319, 313, 299, 316, 299, 299, 299, 320, 321, + 299, 317, 315, 322, 322, 0, 316, 323, 324, 320, + 326, 325, 318, 328, 323, 317, 319, 327, 329, 324, + 330, 321, 325, 326, 337, 320, 321, 334, 333, 330, + 331, 0, 322, 329, 323, 324, 328, 326, 325, 348, + 328, 329, 327, 331, 327, 329, 333, 330, 332, 334, + 335, 336, 338, 339, 334, 333, 337, 331, 338, 332, + 329, 332, 340, 342, 0, 341, 332, 343, 344, 336, + 342, 348, 0, 335, 339, 332, 345, 335, 336, 338, + + 339, 347, 344, 346, 351, 340, 332, 341, 332, 340, + 342, 349, 341, 343, 343, 344, 350, 346, 345, 352, + 353, 354, 350, 345, 356, 0, 351, 347, 347, 355, + 346, 351, 357, 358, 349, 353, 354, 352, 349, 358, + 359, 0, 361, 350, 363, 0, 352, 353, 354, 362, + 356, 356, 355, 0, 357, 362, 355, 364, 365, 357, + 358, 370, 366, 363, 371, 365, 359, 359, 361, 361, + 368, 363, 368, 369, 370, 364, 362, 366, 374, 368, + 369, 373, 379, 372, 364, 365, 376, 375, 370, 366, + 378, 374, 377, 380, 383, 379, 371, 368, 382, 368, + + 369, 372, 381, 373, 382, 374, 375, 381, 373, 379, + 372, 384, 385, 378, 375, 380, 377, 383, 376, 377, + 380, 383, 378, 384, 386, 382, 389, 0, 387, 381, + 391, 0, 398, 389, 385, 386, 387, 390, 384, 385, + 378, 391, 393, 394, 398, 390, 395, 0, 392, 397, + 394, 386, 396, 389, 396, 387, 388, 391, 392, 398, + 401, 388, 399, 388, 390, 410, 393, 416, 401, 393, + 394, 388, 395, 395, 388, 397, 397, 399, 403, 396, + 392, 388, 388, 388, 400, 392, 402, 401, 388, 399, + 388, 402, 404, 407, 405, 406, 400, 410, 388, 416, + + 403, 388, 405, 409, 413, 403, 412, 406, 388, 411, + 404, 400, 415, 402, 407, 412, 414, 417, 413, 404, + 407, 405, 406, 418, 411, 419, 409, 420, 0, 421, + 409, 413, 417, 412, 423, 414, 411, 422, 425, 415, + 419, 421, 424, 414, 417, 424, 427, 428, 429, 425, + 430, 420, 419, 424, 420, 418, 421, 426, 423, 422, + 427, 423, 426, 431, 422, 425, 432, 433, 437, 424, + 434, 436, 424, 427, 428, 429, 434, 439, 435, 436, + 438, 440, 430, 441, 442, 444, 0, 437, 0, 426, + 431, 445, 441, 432, 443, 437, 455, 434, 436, 433, + + 435, 443, 446, 438, 440, 435, 442, 438, 440, 439, + 441, 442, 451, 445, 447, 446, 448, 444, 445, 447, + 452, 443, 449, 447, 450, 448, 0, 453, 455, 446, + 459, 457, 454, 450, 451, 456, 0, 467, 447, 451, + 453, 447, 452, 448, 454, 458, 447, 452, 449, 449, + 447, 450, 459, 456, 453, 457, 460, 459, 457, 454, + 461, 462, 456, 463, 464, 465, 466, 458, 458, 467, + 474, 461, 458, 469, 468, 462, 465, 471, 460, 470, + 472, 466, 464, 460, 476, 463, 475, 461, 462, 472, + 463, 464, 465, 466, 458, 468, 473, 469, 477, 471, + + 469, 468, 474, 470, 471, 478, 470, 472, 475, 473, + 479, 482, 480, 475, 481, 479, 476, 484, 0, 486, + 0, 483, 477, 473, 489, 477, 480, 478, 481, 483, + 485, 487, 478, 488, 486, 484, 491, 493, 488, 480, + 0, 481, 479, 482, 484, 485, 486, 490, 483, 490, + 489, 489, 492, 487, 485, 499, 0, 485, 487, 494, + 492, 491, 493, 491, 493, 488, 495, 498, 494, 496, + 504, 497, 485, 499, 490, 495, 500, 496, 497, 492, + 501, 508, 499, 502, 505, 503, 494, 506, 500, 501, + 498, 502, 505, 495, 498, 506, 496, 503, 497, 507, + + 509, 510, 504, 500, 508, 512, 511, 501, 508, 515, + 502, 505, 503, 512, 506, 513, 509, 511, 514, 516, + 520, 517, 518, 510, 522, 507, 507, 509, 510, 513, + 0, 515, 512, 511, 521, 523, 515, 522, 514, 516, + 520, 519, 513, 517, 518, 514, 516, 520, 517, 518, + 519, 522, 521, 523, 524, 525, 529, 526, 527, 531, + 532, 521, 523, 528, 527, 537, 533, 531, 519, 536, + 0, 528, 534, 533, 529, 0, 524, 555, 536, 525, + 526, 524, 525, 529, 526, 527, 531, 535, 538, 528, + 528, 539, 532, 533, 544, 534, 536, 537, 528, 534, + + 539, 540, 535, 540, 541, 0, 544, 538, 550, 555, + 547, 541, 0, 551, 535, 538, 553, 0, 539, 0, + 547, 544, 0, 557, 552, 560, 550, 560, 540, 554, + 0, 541, 542, 562, 551, 550, 542, 547, 558, 542, + 551, 563, 553, 553, 558, 557, 542, 552, 559, 542, + 557, 552, 560, 0, 542, 554, 554, 559, 561, 542, + 562, 563, 565, 542, 564, 558, 542, 0, 563, 0, + 566, 567, 580, 542, 565, 559, 542, 556, 556, 569, + 556, 580, 561, 556, 568, 561, 573, 570, 556, 565, + 564, 564, 572, 567, 556, 556, 566, 566, 567, 580, + + 572, 569, 571, 556, 556, 556, 569, 556, 568, 573, + 556, 568, 570, 573, 570, 556, 574, 571, 575, 572, + 576, 556, 556, 574, 577, 578, 575, 579, 0, 571, + 583, 581, 585, 582, 584, 586, 0, 578, 587, 576, + 579, 0, 588, 574, 0, 575, 581, 576, 0, 589, + 577, 577, 578, 590, 579, 582, 584, 583, 581, 592, + 582, 584, 587, 588, 585, 587, 591, 586, 589, 588, + 593, 594, 590, 595, 596, 591, 589, 597, 598, 594, + 590, 592, 603, 0, 601, 602, 592, 599, 0, 606, + 593, 604, 596, 591, 605, 599, 597, 593, 594, 0, + + 595, 596, 601, 602, 597, 607, 603, 605, 608, 603, + 598, 601, 602, 604, 599, 606, 606, 607, 604, 609, + 610, 605, 609, 612, 613, 614, 608, 615, 610, 618, + 616, 614, 607, 617, 618, 608, 616, 0, 619, 621, + 617, 620, 631, 628, 610, 619, 609, 610, 612, 615, + 612, 613, 614, 623, 615, 610, 618, 616, 622, 620, + 617, 623, 621, 624, 625, 619, 621, 622, 620, 626, + 628, 627, 632, 630, 631, 639, 629, 0, 633, 625, + 623, 624, 626, 629, 636, 622, 630, 634, 0, 638, + 624, 625, 627, 637, 635, 634, 626, 0, 627, 637, + + 630, 633, 635, 629, 632, 633, 636, 639, 640, 635, + 641, 636, 642, 643, 634, 638, 638, 644, 0, 641, + 637, 635, 645, 647, 644, 646, 642, 0, 648, 635, + 649, 0, 640, 650, 646, 640, 654, 641, 652, 642, + 648, 650, 654, 651, 644, 643, 651, 653, 0, 645, + 647, 652, 646, 649, 653, 648, 0, 649, 656, 657, + 650, 0, 0, 654, 658, 652, 664, 659, 661, 659, + 651, 664, 0, 660, 653, 655, 658, 655, 0, 662, + 661, 655, 657, 655, 656, 656, 657, 0, 655, 666, + 663, 658, 665, 655, 659, 661, 660, 667, 664, 655, + + 660, 662, 655, 663, 655, 665, 662, 669, 655, 667, + 655, 668, 666, 670, 672, 655, 666, 663, 673, 665, + 655, 668, 671, 674, 667, 675, 670, 672, 671, 669, + 680, 678, 679, 668, 669, 681, 0, 0, 668, 673, + 670, 672, 682, 680, 683, 673, 678, 691, 668, 671, + 681, 684, 675, 688, 679, 674, 677, 680, 678, 679, + 685, 677, 681, 677, 686, 692, 683, 687, 682, 682, + 684, 683, 686, 685, 677, 687, 689, 693, 684, 691, + 688, 677, 677, 677, 694, 693, 695, 685, 677, 692, + 677, 686, 692, 696, 687, 698, 699, 697, 694, 689, + + 701, 677, 703, 689, 693, 697, 700, 702, 677, 704, + 703, 694, 705, 698, 699, 696, 0, 700, 695, 705, + 696, 707, 698, 699, 697, 702, 708, 706, 707, 703, + 710, 704, 701, 700, 702, 721, 704, 709, 712, 705, + 706, 713, 0, 714, 708, 715, 722, 716, 707, 713, + 0, 712, 714, 708, 706, 709, 717, 715, 718, 719, + 722, 720, 710, 726, 709, 712, 726, 721, 713, 716, + 714, 724, 715, 722, 716, 727, 725, 719, 717, 728, + 718, 725, 724, 717, 729, 718, 719, 720, 720, 726, + 726, 729, 728, 726, 731, 730, 732, 733, 724, 727, + + 0, 736, 727, 732, 734, 735, 728, 730, 725, 0, + 734, 729, 736, 737, 738, 739, 741, 743, 742, 744, + 0, 733, 730, 732, 733, 746, 731, 735, 736, 742, + 739, 734, 735, 745, 746, 737, 738, 741, 743, 747, + 737, 738, 739, 741, 743, 742, 744, 748, 750, 749, + 751, 745, 746, 752, 0, 750, 748, 749, 760, 753, + 745, 754, 756, 747, 751, 759, 747, 757, 758, 761, + 762, 756, 764, 0, 748, 750, 749, 751, 763, 765, + 759, 753, 762, 754, 758, 752, 753, 765, 754, 756, + 760, 757, 759, 767, 757, 758, 766, 762, 769, 764, + + 763, 761, 771, 770, 774, 763, 765, 769, 767, 766, + 771, 772, 774, 772, 776, 778, 777, 779, 780, 0, + 767, 770, 778, 766, 781, 769, 783, 776, 777, 771, + 770, 774, 782, 786, 784, 792, 0, 788, 772, 785, + 0, 776, 778, 777, 787, 788, 781, 784, 783, 779, + 780, 781, 785, 783, 789, 786, 787, 782, 790, 782, + 786, 784, 792, 793, 788, 791, 785, 795, 794, 797, + 790, 787, 796, 791, 789, 799, 793, 794, 800, 796, + 797, 789, 0, 797, 801, 790, 0, 806, 795, 803, + 793, 797, 791, 802, 795, 794, 797, 805, 0, 796, + + 800, 799, 799, 804, 801, 800, 802, 797, 811, 806, + 797, 801, 804, 803, 806, 805, 803, 807, 808, 809, + 802, 813, 0, 815, 805, 807, 812, 809, 818, 814, + 804, 815, 817, 0, 828, 811, 0, 0, 0, 813, + 808, 814, 816, 818, 807, 808, 809, 822, 813, 812, + 815, 821, 817, 812, 816, 818, 814, 819, 820, 817, + 821, 823, 826, 824, 820, 819, 828, 0, 822, 816, + 824, 832, 825, 823, 822, 831, 830, 833, 821, 825, + 826, 829, 831, 836, 819, 820, 834, 837, 823, 826, + 824, 834, 833, 832, 829, 830, 836, 835, 832, 825, + + 838, 837, 831, 830, 833, 835, 840, 841, 829, 842, + 836, 843, 845, 844, 837, 0, 0, 0, 834, 0, + 840, 846, 847, 0, 835, 841, 838, 838, 839, 851, + 845, 839, 839, 840, 841, 844, 839, 843, 843, 845, + 844, 842, 839, 846, 847, 848, 839, 849, 846, 847, + 839, 851, 850, 852, 849, 839, 851, 854, 839, 839, + 855, 856, 0, 839, 857, 901, 852, 853, 0, 839, + 850, 848, 848, 839, 849, 0, 853, 0, 863, 850, + 852, 859, 861, 856, 864, 866, 0, 857, 856, 854, + 865, 857, 855, 0, 853, 858, 864, 901, 861, 865, + + 858, 863, 858, 866, 858, 863, 858, 859, 859, 861, + 867, 864, 866, 858, 0, 867, 869, 865, 870, 868, + 871, 0, 858, 872, 873, 878, 870, 858, 880, 858, + 874, 858, 868, 858, 869, 875, 872, 873, 876, 871, + 876, 877, 867, 869, 875, 870, 868, 871, 874, 879, + 872, 873, 878, 882, 885, 880, 883, 874, 884, 887, + 886, 879, 875, 877, 0, 876, 884, 886, 877, 888, + 890, 892, 894, 889, 902, 891, 879, 882, 883, 889, + 882, 885, 891, 883, 893, 884, 887, 886, 895, 897, + 903, 888, 896, 892, 894, 899, 888, 890, 892, 894, + + 889, 896, 891, 893, 898, 904, 902, 905, 908, 899, + 897, 893, 903, 906, 895, 895, 897, 903, 0, 896, + 907, 906, 899, 909, 898, 905, 910, 912, 911, 0, + 909, 898, 911, 910, 905, 908, 907, 904, 913, 914, + 906, 915, 919, 917, 913, 916, 914, 907, 918, 919, + 909, 913, 917, 910, 921, 911, 915, 922, 916, 912, + 920, 923, 920, 921, 925, 913, 914, 929, 915, 919, + 917, 913, 916, 924, 918, 918, 930, 924, 928, 922, + 931, 921, 927, 928, 922, 929, 925, 920, 923, 932, + 927, 925, 932, 931, 929, 930, 933, 934, 935, 936, + + 924, 932, 0, 930, 0, 937, 939, 931, 941, 927, + 928, 935, 942, 938, 939, 946, 932, 941, 933, 932, + 940, 940, 934, 933, 934, 935, 955, 943, 937, 938, + 944, 936, 937, 939, 942, 941, 943, 944, 946, 942, + 938, 947, 946, 948, 949, 950, 955, 940, 951, 952, + 947, 948, 954, 955, 943, 953, 956, 944, 950, 949, + 951, 952, 958, 953, 957, 964, 959, 961, 947, 960, + 948, 949, 950, 957, 954, 951, 952, 963, 956, 954, + 958, 960, 953, 956, 962, 965, 966, 969, 961, 958, + 962, 957, 959, 959, 961, 967, 960, 964, 971, 963, + + 970, 972, 973, 0, 963, 976, 974, 978, 0, 988, + 972, 962, 966, 966, 969, 973, 971, 965, 974, 975, + 979, 967, 967, 970, 0, 971, 978, 970, 972, 973, + 977, 976, 976, 974, 978, 980, 981, 977, 982, 975, + 983, 988, 979, 982, 981, 983, 975, 979, 980, 984, + 985, 986, 987, 989, 989, 992, 984, 977, 985, 986, + 987, 990, 980, 981, 991, 993, 994, 995, 0, 990, + 982, 997, 983, 993, 994, 995, 984, 985, 986, 987, + 989, 996, 1001, 999, 997, 991, 1000, 992, 990, 996, + 998, 991, 993, 994, 995, 999, 998, 1003, 997, 1002, + + 1004, 1006, 1005, 1007, 1008, 0, 1001, 0, 996, 1001, + 999, 1013, 1000, 1000, 1002, 1006, 1009, 998, 1008, 1015, + 1009, 1007, 1004, 1012, 1003, 1005, 1002, 1004, 1006, 1005, + 1007, 1008, 1011, 1009, 1012, 1014, 1017, 1016, 1013, 1011, + 1019, 1009, 1015, 1009, 1016, 1017, 1015, 1009, 1018, 1020, + 1012, 1024, 1022, 1026, 1025, 1018, 1028, 1014, 0, 1011, + 1009, 1022, 1014, 1017, 1016, 1030, 1031, 1033, 0, 1034, + 1035, 1040, 1019, 1024, 1037, 1018, 1020, 1031, 1024, 1022, + 1025, 1025, 1035, 1028, 1036, 1026, 1036, 1037, 1038, 1041, + 1039, 1033, 1030, 1031, 1033, 1034, 1034, 1035, 1040, 1042, + + 1044, 1037, 1039, 1043, 1045, 1044, 1042, 1050, 0, 1046, + 1038, 1036, 1041, 1047, 0, 1038, 1041, 1039, 1053, 1048, + 1045, 1047, 1052, 0, 1051, 1054, 1042, 1044, 0, 1043, + 1043, 1045, 1046, 1051, 1050, 1052, 1046, 1058, 1057, 1061, + 1047, 1048, 1060, 1055, 1053, 1053, 1048, 1054, 1056, 1052, + 1055, 1051, 1054, 1059, 1062, 1056, 1057, 1064, 1067, 1058, + 1059, 1061, 0, 1066, 1058, 1057, 1061, 1060, 1072, 1060, + 1055, 1063, 1069, 1068, 1071, 1056, 1066, 1071, 1063, 1073, + 1059, 1068, 1074, 1076, 1075, 1067, 1062, 1077, 1080, 1064, + 1066, 1074, 0, 1069, 1072, 1072, 1075, 1078, 1063, 1069, + + 1068, 1071, 1077, 1081, 1078, 1073, 1073, 1076, 1082, 1074, + 1076, 1075, 1079, 1085, 1077, 1079, 1083, 1084, 1086, 1084, + 1080, 1087, 1088, 1091, 1078, 1081, 1082, 1079, 0, 1092, + 1081, 1088, 1093, 1089, 1096, 1082, 1079, 1085, 1083, 1079, + 1085, 1089, 1079, 1083, 1084, 1090, 1095, 1087, 1087, 1088, + 1086, 1092, 1090, 1094, 1079, 1091, 1092, 1094, 1098, 1097, + 1089, 1096, 1099, 1100, 1093, 1101, 1102, 1098, 1095, 1099, + 1100, 1111, 1090, 1095, 1104, 1105, 1103, 1106, 1101, 1102, + 1094, 1097, 1108, 1113, 1106, 1098, 1097, 1107, 1104, 1099, + 1100, 1103, 1101, 1102, 1107, 1108, 1109, 0, 1111, 1112, + + 1115, 1104, 1109, 1103, 1106, 1113, 1112, 1105, 1114, 1108, + 1113, 1116, 1115, 1117, 1107, 1119, 1117, 1120, 0, 1118, + 1123, 1121, 1128, 1109, 1116, 1125, 1112, 1115, 1118, 1120, + 1125, 1123, 1129, 1119, 1114, 1114, 1122, 1125, 1116, 1122, + 1117, 1121, 1119, 1127, 1120, 1127, 1118, 1123, 1121, 1128, + 1130, 1132, 1125, 1131, 1122, 0, 1133, 1125, 1134, 1129, + 1135, 1131, 1138, 1122, 1137, 1139, 1122, 1133, 1135, 1147, + 1127, 1147, 1136, 1132, 1130, 1136, 1134, 1130, 1132, 1140, + 1131, 1141, 1137, 1133, 1142, 1134, 1140, 1135, 1143, 1144, + 1136, 1137, 1139, 1142, 1138, 1141, 1147, 1145, 1148, 1136, + + 1144, 1143, 1136, 1149, 1151, 1152, 1140, 1148, 1141, 1150, + 1158, 1142, 1145, 1156, 1153, 1143, 1144, 1155, 1156, 1160, + 1150, 1161, 1151, 1180, 1145, 1148, 1155, 1152, 1153, 1149, + 1149, 1151, 1152, 1163, 1154, 1162, 1150, 1154, 1159, 1165, + 1153, 1153, 1158, 1161, 1155, 1156, 1165, 1159, 1161, 1166, + 1180, 1160, 1154, 1168, 1163, 1153, 1167, 1172, 1173, 1168, + 1163, 1154, 1176, 1171, 1154, 1159, 1165, 1162, 1177, 1174, + 1167, 1171, 1173, 0, 1175, 1186, 1172, 1168, 1174, 1177, + 1168, 1166, 1175, 1167, 1172, 1173, 1168, 1182, 1178, 1183, + 1171, 1181, 1189, 1186, 1176, 1177, 1174, 1178, 1181, 1184, + + 1185, 1175, 1186, 1187, 1189, 1190, 1196, 1187, 1192, 1193, + 1182, 1183, 1191, 1196, 1182, 1178, 1183, 1197, 1181, 1189, + 1200, 1184, 1185, 1194, 1193, 1191, 1184, 1185, 1192, 1195, + 1187, 1198, 1190, 1196, 1199, 1192, 1193, 1195, 1194, 1191, + 1201, 1200, 1202, 1199, 1203, 1206, 1198, 1200, 1205, 1197, + 1194, 1207, 1209, 1208, 1211, 1210, 1195, 0, 1198, 1211, + 0, 1199, 1210, 1206, 1212, 1213, 1202, 1201, 1208, 1202, + 1205, 1203, 1206, 1212, 1215, 1205, 1214, 1209, 1207, 1209, + 1208, 1211, 1210, 1216, 1217, 1221, 1218, 1213, 1220, 1215, + 1219, 1212, 1213, 1222, 1214, 1216, 1223, 1219, 1232, 1218, + + 1220, 1215, 1223, 1214, 1218, 1226, 1217, 1225, 1224, 1228, + 1216, 1217, 1221, 1218, 1225, 1220, 1224, 1219, 1229, 1230, + 1227, 1231, 1235, 1223, 1229, 1222, 1218, 1227, 1233, 1236, + 1232, 1237, 1226, 1239, 1225, 1224, 1228, 1238, 1236, 1238, + 1240, 1242, 1241, 1246, 1231, 1229, 1230, 1227, 1231, 1250, + 0, 1244, 1233, 0, 1235, 1233, 1236, 1239, 1244, 1245, + 1239, 1254, 1250, 1237, 1238, 1251, 1245, 1240, 1241, 1241, + 1243, 1243, 1243, 1242, 1247, 1246, 1250, 1243, 1244, 1249, + 1252, 1247, 1253, 1257, 1249, 1243, 1245, 1255, 1256, 1257, + 1251, 1258, 1251, 1254, 1253, 1256, 1252, 1243, 1243, 1243, + + 1260, 1247, 1259, 1259, 1243, 1255, 1261, 1252, 1263, 1253, + 1257, 1249, 1262, 1261, 1255, 1256, 1264, 1262, 1258, 1267, + 1269, 1271, 1268, 1279, 1270, 0, 1260, 1260, 1268, 1259, + 1273, 1273, 1272, 1261, 1263, 1263, 1270, 1267, 1274, 1262, + 1278, 1271, 1276, 1264, 1275, 1275, 1267, 1269, 1271, 1268, + 1272, 1270, 1281, 1276, 1280, 1279, 1282, 1273, 1283, 1272, + 1284, 1280, 1278, 0, 1274, 1274, 1286, 1278, 1287, 1276, + 1285, 1275, 1281, 1294, 1288, 1287, 1289, 1291, 1290, 1281, + 1293, 1280, 1288, 0, 1286, 1294, 1291, 1284, 1282, 0, + 1283, 1289, 1285, 1286, 1295, 1287, 0, 1285, 1292, 1292, + + 1294, 1288, 1290, 1289, 1291, 1290, 1293, 1293, 1297, 1300, + 1295, 1298, 1299, 1301, 1303, 1302, 1297, 1295, 1305, 1308, + 1299, 1295, 1306, 1298, 1309, 1292, 1308, 1310, 1306, 1312, + 1315, 1307, 1300, 1302, 1301, 1297, 1300, 1295, 1298, 1299, + 1301, 1303, 1302, 1304, 1307, 1305, 1308, 1311, 1304, 1306, + 1313, 1313, 1311, 1314, 1310, 1318, 1309, 1317, 1307, 1304, + 1321, 1312, 1315, 1320, 1322, 1320, 1319, 1323, 1314, 1322, + 1304, 1324, 1317, 1326, 1328, 1304, 1327, 1313, 1318, 1311, + 1314, 1319, 1318, 1329, 1317, 1331, 1324, 1330, 1332, 1333, + 1320, 1322, 1321, 1319, 1330, 1335, 1337, 1326, 1324, 1323, + + 1326, 1328, 1327, 1327, 1334, 1339, 1340, 0, 1344, 1332, + 1329, 1333, 1342, 1335, 1330, 1332, 1333, 1331, 1337, 1343, + 1345, 1340, 1335, 1337, 1347, 1334, 1346, 1342, 1354, 1339, + 1348, 1334, 1339, 1340, 1343, 1344, 1349, 1348, 1345, 1342, + 1350, 1352, 1351, 1353, 1359, 1355, 1343, 1345, 1346, 1350, + 1351, 1347, 1358, 1346, 1349, 1357, 1360, 1348, 1355, 1362, + 1354, 1358, 1359, 1349, 1352, 1353, 1357, 1350, 1352, 1351, + 1353, 1359, 1355, 1364, 1360, 1366, 1367, 1368, 1369, 1358, + 1370, 1357, 1357, 1360, 1364, 1371, 1362, 1366, 1369, 1367, + 1372, 1376, 1373, 1357, 1375, 0, 1377, 1378, 1376, 0, + + 1364, 1380, 1366, 1367, 1414, 1369, 1370, 1370, 1389, 1368, + 1371, 1373, 1371, 0, 1375, 1378, 1380, 1372, 1376, 1373, + 1379, 1375, 1377, 1377, 1378, 1381, 1379, 1382, 1380, 1383, + 1383, 1384, 1385, 1388, 1387, 1389, 1414, 1390, 1392, 0, + 1381, 1387, 1382, 1384, 1391, 1385, 1390, 1379, 1388, 1397, + 0, 1391, 1381, 1385, 1382, 1393, 1383, 1396, 1384, 1385, + 1388, 1387, 1392, 1394, 1390, 1392, 1398, 1399, 1400, 1402, + 1394, 1391, 1385, 1403, 1397, 1398, 1397, 1393, 1405, 1396, + 1406, 1408, 1393, 1425, 1396, 1407, 1407, 1402, 1400, 1399, + 1394, 1405, 1409, 1398, 1399, 1400, 1402, 1412, 1403, 1410, + + 1403, 1411, 1413, 1408, 1416, 1405, 1412, 1406, 1408, 1413, + 1415, 1417, 1407, 1421, 1419, 1425, 1422, 1409, 1416, 1409, + 1420, 1410, 1419, 1411, 1412, 1427, 1410, 1423, 1411, 1413, + 1417, 1416, 1415, 1420, 1426, 0, 1429, 1415, 1417, 1423, + 1421, 1419, 1422, 1422, 1424, 1428, 1431, 1420, 1430, 1431, + 1427, 1424, 1427, 1432, 1423, 1434, 1426, 0, 0, 1433, + 1428, 1426, 1429, 1429, 1431, 1433, 1435, 1438, 1436, 1439, + 1442, 1424, 1428, 1431, 1430, 1430, 1431, 1442, 1432, 1443, + 1432, 1444, 1434, 1436, 1435, 1441, 1433, 1451, 1443, 1438, + 1446, 1439, 1444, 1435, 1438, 1436, 1439, 1442, 1448, 1441, + + 1450, 1449, 1450, 1446, 1452, 1451, 1443, 1454, 1444, 1456, + 1455, 1446, 1441, 1449, 1451, 1453, 1457, 1446, 1455, 1448, + 1460, 1458, 1464, 1466, 1459, 1448, 1467, 1450, 1449, 1459, + 1446, 1452, 1456, 1453, 1454, 1458, 1456, 1455, 1457, 1460, + 1465, 1466, 1453, 1457, 1461, 1471, 1468, 1460, 1458, 1464, + 1466, 1461, 1470, 1467, 1465, 1469, 1459, 1473, 1472, 0, + 1476, 1470, 1477, 0, 1474, 1465, 1465, 1465, 1480, 1477, + 1469, 1461, 1468, 1468, 1479, 1486, 1479, 1471, 0, 1470, + 1472, 1465, 1469, 1476, 1473, 1472, 1474, 1476, 1482, 1477, + 1480, 1474, 1465, 1481, 1483, 1480, 1484, 1481, 1485, 1487, + + 1482, 1479, 1486, 1490, 1490, 1484, 1488, 1489, 1494, 1485, + 1495, 1491, 1494, 1495, 1502, 1482, 1483, 0, 1488, 1491, + 1481, 1483, 1487, 1484, 1493, 1485, 1487, 1498, 1496, 1489, + 1490, 1501, 1493, 1488, 1489, 1494, 1496, 1495, 1491, 1497, + 1499, 1502, 1498, 1501, 1503, 1497, 1499, 1504, 1508, 1505, + 1506, 1493, 1507, 1509, 1498, 1496, 1511, 1510, 1501, 1512, + 0, 1504, 1505, 0, 1506, 1514, 1497, 1499, 1503, 1510, + 1511, 1503, 1515, 1517, 1504, 1508, 1505, 1506, 1507, 1507, + 1509, 1518, 1519, 1511, 1510, 1512, 1512, 1513, 1518, 1519, + 1513, 1520, 1514, 1521, 1515, 1517, 1522, 1524, 1525, 1515, + + 1517, 1526, 1523, 1527, 1529, 1513, 1520, 1525, 1518, 1519, + 1523, 1531, 1529, 1528, 1513, 1532, 1534, 1513, 1520, 1533, + 1521, 1537, 1539, 1522, 1524, 1525, 1528, 1533, 1526, 1523, + 1527, 1529, 1535, 1531, 1536, 0, 1538, 1543, 1531, 1540, + 1528, 1535, 1532, 1534, 1541, 1537, 1533, 1540, 1537, 1539, + 1542, 1538, 0, 1545, 1549, 1536, 1541, 1551, 1542, 1535, + 1545, 1536, 1538, 1538, 1543, 1546, 1540, 1547, 1548, 1546, + 1553, 1541, 1554, 1554, 1550, 1556, 1552, 1542, 1538, 1547, + 1545, 1549, 1550, 1552, 1551, 1555, 0, 1560, 1557, 1559, + 1553, 1548, 1546, 1556, 1547, 1548, 1561, 1553, 1561, 1554, + + 1563, 1550, 1556, 1552, 1559, 1562, 1563, 1564, 1565, 1560, + 1566, 1555, 1555, 1557, 1560, 1557, 1559, 1571, 1567, 1562, + 1568, 1569, 1566, 1561, 1576, 1578, 1574, 1563, 1570, 1564, + 1565, 1572, 1562, 1574, 1564, 1565, 1567, 1566, 1568, 1569, + 1577, 1570, 1576, 0, 1579, 1567, 1583, 1568, 1569, 1571, + 1582, 1576, 1579, 1574, 1572, 1570, 1590, 1578, 1572, 1585, + 1587, 1580, 1582, 1580, 1583, 1586, 1577, 1577, 1580, 1588, + 1579, 1579, 1587, 1583, 1585, 1591, 1586, 1582, 1592, 1579, + 1590, 1594, 1596, 1590, 1588, 1592, 1585, 1587, 1580, 1593, + 1580, 1597, 1586, 1598, 1599, 1602, 1588, 1591, 0, 1600, + + 0, 1601, 1591, 1604, 1593, 1592, 1603, 1608, 1594, 1596, + 1602, 1604, 1600, 1597, 1605, 1607, 1593, 1609, 1597, 1603, + 1614, 1599, 1602, 1610, 1613, 1598, 1600, 1601, 1601, 1611, + 1604, 1608, 1612, 1603, 1608, 1616, 1611, 1613, 1607, 1612, + 1605, 1605, 1607, 1614, 1609, 1610, 1615, 1614, 1617, 1618, + 1610, 1613, 1619, 1615, 1621, 1622, 1611, 1616, 1623, 1612, + 1625, 1619, 1616, 1635, 1624, 1621, 1629, 1631, 1631, 0, + 1618, 1628, 1630, 1615, 1632, 1637, 1618, 1622, 1641, 1619, + 1617, 1621, 1622, 1624, 1628, 1625, 1634, 1625, 1636, 1638, + 1623, 1624, 1629, 1629, 1631, 1635, 1630, 1643, 1628, 1630, + + 1632, 1632, 1637, 1636, 1646, 1641, 1643, 1638, 1647, 1634, + 1648, 1650, 1652, 1634, 1653, 1636, 1638, 0, 1654, 1658, + 1655, 1656, 1663, 1660, 1643, 1655, 1646, 1658, 1667, 1654, + 1647, 1646, 1669, 1662, 1659, 1647, 1670, 1648, 1650, 1676, + 1653, 1653, 1672, 1656, 1652, 1654, 1658, 1655, 1656, 1659, + 1660, 1662, 1665, 1664, 1663, 1667, 1671, 1673, 1669, 1669, + 1662, 1659, 1664, 1670, 1665, 1675, 1676, 1672, 1674, 1672, + 1673, 1677, 1678, 1679, 0, 1681, 1680, 0, 1671, 1665, + 1664, 1674, 1682, 1671, 1673, 1680, 1684, 1675, 1679, 1683, + 1685, 1688, 1675, 1686, 1689, 1674, 0, 1682, 1677, 1678, + + 1679, 1681, 1681, 1680, 1683, 1685, 1684, 1687, 1692, 1682, + 1690, 1690, 1689, 1684, 1687, 1686, 1683, 1685, 1688, 1691, + 1686, 1689, 1692, 1694, 1693, 1696, 1691, 1693, 1695, 1697, + 0, 1704, 1705, 1700, 1687, 1692, 1694, 1690, 1697, 1698, + 1701, 1699, 1702, 1696, 1698, 1699, 1691, 1706, 1703, 1710, + 1694, 1693, 1696, 1701, 1695, 1695, 1697, 1700, 1704, 1705, + 1700, 1721, 1709, 1716, 1702, 1710, 1698, 1701, 1699, 1702, + 1703, 1709, 1712, 1706, 1706, 1703, 1710, 1713, 1714, 1712, + 1715, 1716, 1719, 1714, 1717, 1718, 1713, 1715, 1721, 1709, + 1716, 1717, 1722, 1723, 1718, 1724, 0, 1726, 0, 1712, + + 1732, 1725, 1723, 1730, 1713, 1714, 1726, 1715, 1719, 1719, + 1722, 1717, 1718, 1725, 1727, 1724, 1728, 1729, 1731, 1722, + 1723, 1734, 1724, 1727, 1726, 1729, 1733, 1728, 1725, 1735, + 1730, 0, 1732, 1734, 1740, 1733, 1736, 1735, 1739, 1737, + 1738, 1727, 1741, 1728, 1729, 1731, 1737, 1738, 1734, 1742, + 1743, 1754, 1747, 1733, 1745, 0, 1735, 1748, 1736, 1740, + 1739, 1740, 1745, 1736, 1748, 1739, 1737, 1738, 1752, 1741, + 1747, 1755, 1749, 1753, 1742, 1752, 1742, 1743, 1754, 1747, + 1749, 1745, 1756, 1755, 1748, 1757, 1762, 1758, 1761, 1760, + 1763, 1756, 1765, 1767, 1768, 1752, 1769, 1753, 1755, 1749, + + 1753, 1760, 1768, 1770, 1763, 1771, 0, 1775, 1778, 1756, + 1758, 1761, 1757, 1762, 1758, 1761, 1760, 1763, 1779, 1765, + 1767, 1768, 1776, 1769, 1777, 1770, 1778, 1776, 1780, 1782, + 1770, 1781, 1771, 1775, 1775, 1778, 1785, 1782, 1777, 0, + 1779, 1780, 1783, 1786, 1787, 1779, 1789, 1788, 1785, 1776, + 1790, 1777, 1791, 1781, 1792, 1780, 1782, 1793, 1781, 1788, + 1794, 1783, 0, 1785, 1795, 1786, 1787, 1798, 1796, 1783, + 1786, 1787, 1791, 1789, 1788, 1797, 1792, 1790, 1799, 1791, + 1796, 1792, 1794, 1803, 1802, 1804, 1805, 1794, 1803, 1793, + 1795, 1795, 1807, 1806, 1798, 1796, 1809, 1797, 1802, 1808, + + 0, 0, 1797, 1810, 0, 1799, 1811, 1804, 1809, 1812, + 1814, 1802, 1804, 1815, 1807, 1803, 1806, 1808, 1805, 1807, + 1806, 1820, 1810, 1809, 1812, 1817, 1808, 1818, 1811, 1816, + 1810, 1819, 1821, 1811, 1814, 1815, 1812, 1814, 1816, 1817, + 1815, 1827, 1829, 1824, 1831, 1818, 1825, 1820, 1820, 1819, + 1821, 1824, 1817, 1825, 1818, 1826, 1816, 1828, 1819, 1821, + 1829, 1839, 1830, 1826, 1832, 1828, 1834, 1837, 1827, 1829, + 1824, 1831, 1832, 1825, 1830, 1838, 1836, 1840, 1834, 1841, + 0, 1843, 1826, 1836, 1828, 1847, 1844, 1846, 1839, 1830, + 1837, 1832, 1850, 1834, 1837, 1853, 1840, 1848, 1847, 1843, + + 1844, 1841, 1858, 1836, 1840, 1859, 1841, 1838, 1843, 1848, + 1846, 1860, 1847, 1844, 1846, 1861, 1855, 1863, 1850, 1850, + 1857, 1864, 1853, 1855, 1848, 1862, 1867, 1857, 1858, 1858, + 1865, 0, 1859, 1866, 1868, 1860, 1869, 1873, 1860, 1865, + 1872, 1873, 1861, 1855, 1863, 1872, 1866, 1857, 1864, 1874, + 1875, 1862, 1862, 1876, 1877, 1876, 1878, 1865, 1867, 1869, + 1866, 1868, 1881, 1869, 1873, 1884, 1882, 1884, 1885, 1885, + 1874, 1890, 1872, 1889, 0, 1886, 1874, 1877, 1885, 1887, + 1876, 1877, 1875, 1878, 1881, 1892, 1889, 1888, 1887, 1881, + 1882, 1891, 1884, 1882, 1888, 1885, 1885, 1886, 1890, 1891, + + 1889, 1893, 1886, 1894, 1892, 1895, 1887, 1896, 1897, 1893, + 0, 0, 1892, 1899, 1888, 1898, 1900, 1900, 1891, 1897, + 1899, 1901, 1905, 1906, 0, 1909, 1910, 1907, 1893, 1894, + 1894, 1895, 1895, 1896, 1896, 1897, 1907, 1898, 1902, 1901, + 1899, 1911, 1898, 1900, 1903, 1902, 1910, 1906, 1901, 1905, + 1906, 1903, 1909, 1910, 1907, 1912, 1913, 1915, 1916, 1920, + 1918, 1919, 1921, 1917, 1920, 1902, 1915, 1924, 1911, 0, + 0, 1903, 0, 1919, 1913, 1922, 1921, 1912, 1918, 1925, + 1926, 1933, 1912, 1913, 1915, 1916, 1917, 1918, 1919, 1921, + 1917, 1920, 1934, 1922, 1924, 1926, 1928, 1925, 1928, 1930, + + 0, 1940, 1922, 1933, 1935, 1937, 1925, 1926, 1933, 1938, + 1942, 1941, 1938, 1943, 1930, 0, 1946, 1942, 1934, 1934, + 1944, 1943, 1935, 1928, 1947, 1948, 1930, 1937, 1940, 1941, + 1952, 1935, 1937, 1950, 1954, 1938, 1938, 1942, 1941, 1938, + 1943, 1951, 1944, 1949, 1958, 1956, 1947, 1944, 1946, 1949, + 1951, 1947, 1948, 1956, 1953, 1950, 1953, 1957, 1961, 1959, + 1950, 1954, 1952, 1962, 1960, 1967, 1965, 1963, 1951, 1957, + 1949, 1958, 1956, 1959, 1962, 1963, 1961, 1964, 1966, 1966, + 1970, 1953, 1971, 1975, 1957, 1961, 1959, 1960, 1965, 1968, + 1962, 1960, 1967, 1965, 1963, 1973, 1964, 1968, 1977, 1979, + + 1976, 1973, 1984, 0, 1964, 1966, 1980, 1970, 1981, 1971, + 1975, 1976, 1981, 1980, 1987, 1982, 1968, 1985, 1988, 1987, + 1977, 1989, 1973, 1982, 1991, 1977, 1979, 1976, 1984, 1984, + 1985, 1990, 1991, 1980, 1994, 1981, 1993, 1992, 1995, 2000, + 1996, 1987, 1982, 1993, 1985, 1988, 2001, 1999, 1989, 1990, + 2003, 1991, 1992, 1998, 1999, 2002, 2005, 2007, 1990, 2003, + 2009, 1994, 1995, 1993, 1992, 1995, 1996, 1996, 1998, 2011, + 2014, 2000, 2015, 2001, 1999, 2016, 2006, 2003, 2005, 2002, + 1998, 2018, 2002, 2005, 2006, 2008, 2008, 2009, 2016, 2007, + 2012, 2019, 2017, 2020, 2015, 2008, 2011, 2014, 2012, 2015, + + 2021, 2023, 2016, 2006, 2028, 0, 2029, 2026, 2018, 2028, + 2031, 2032, 2008, 2008, 2017, 2026, 2033, 2012, 2019, 2017, + 2020, 2034, 2021, 2033, 2032, 2035, 2040, 2021, 2023, 2036, + 2041, 2028, 2029, 2029, 2026, 0, 2039, 2031, 2032, 2034, + 2042, 2050, 2046, 2033, 2047, 2040, 0, 2044, 2034, 2039, + 0, 2036, 2035, 2040, 2044, 2048, 2036, 2041, 2045, 2047, + 2050, 2052, 2042, 2039, 2046, 2045, 2051, 2042, 2050, 2046, + 2052, 2047, 2053, 2051, 2044, 2055, 2048, 2054, 2054, 2056, + 2061, 2055, 2048, 2053, 2059, 2045, 2062, 2054, 2052, 2063, + 2067, 2059, 2069, 2051, 2070, 2070, 0, 2071, 2073, 2053, + + 2074, 2056, 2055, 2077, 2054, 2054, 2056, 2061, 2075, 2074, + 2079, 2059, 2063, 2062, 2078, 2082, 2063, 2067, 2083, 2069, + 2071, 2075, 2079, 2070, 2071, 2073, 2084, 2074, 2085, 2081, + 2077, 2086, 2087, 2082, 2078, 2075, 2088, 2079, 2081, 2090, + 0, 2078, 2082, 2086, 2083, 2083, 2089, 2092, 2089, 2093, + 2095, 2090, 2094, 2084, 2087, 2085, 2081, 2098, 2086, 2087, + 2094, 2091, 2101, 2088, 2102, 2103, 2090, 2091, 2105, 2092, + 2106, 2093, 2108, 2089, 2092, 2109, 2093, 2095, 2110, 2094, + 2112, 2111, 2116, 2118, 2098, 2115, 2105, 2119, 2091, 2101, + 2109, 2102, 2103, 2111, 2115, 2105, 2120, 2106, 2129, 2108, + + 2119, 2122, 2109, 2121, 2110, 2110, 2116, 2112, 2111, 2116, + 2122, 2121, 2115, 2123, 2119, 2118, 2132, 2136, 2120, 2133, + 2134, 2136, 2129, 2120, 2123, 2129, 2133, 2138, 2122, 2137, + 2121, 2145, 0, 2134, 2139, 2142, 0, 2142, 2141, 2132, + 2123, 2138, 2139, 2132, 2136, 2137, 2133, 2134, 2140, 2141, + 2146, 2143, 2144, 2147, 2138, 2148, 2137, 2140, 2145, 2144, + 2149, 2139, 2142, 2143, 2150, 2141, 2151, 2152, 2146, 2152, + 2154, 2153, 2155, 2156, 2163, 2140, 2164, 2146, 2143, 2144, + 2147, 2148, 2148, 2153, 2158, 2155, 2150, 2149, 2151, 2162, + 2165, 2150, 2160, 2151, 2152, 2166, 2158, 2162, 2153, 2155, + + 2156, 2160, 2154, 2165, 2167, 2169, 2163, 2170, 2164, 2166, + 2172, 2158, 2167, 2171, 2173, 2174, 2162, 2165, 2169, 2160, + 0, 2171, 2166, 2174, 2172, 2175, 2176, 2177, 2173, 2178, + 2170, 2167, 2169, 2179, 2170, 2177, 2180, 2172, 0, 2181, + 2171, 2173, 2174, 2182, 2185, 2184, 2190, 2175, 2176, 2183, + 0, 0, 2175, 2176, 2177, 2187, 2178, 2183, 2180, 2179, + 2179, 2181, 2194, 2180, 2188, 2182, 2181, 0, 2198, 2192, + 2182, 2185, 2188, 2189, 0, 2187, 2183, 2184, 2190, 2191, + 2195, 2189, 2187, 2192, 2194, 2196, 2199, 2191, 2195, 2194, + 2197, 2188, 2201, 2196, 2198, 2198, 2192, 2200, 0, 2202, + + 2189, 2203, 2204, 2205, 2197, 2200, 2191, 2195, 2199, 2206, + 2210, 2205, 2196, 2199, 2207, 2208, 0, 2197, 2201, 2201, + 0, 2213, 2204, 2203, 2200, 2202, 2202, 2214, 2203, 2204, + 2205, 2209, 2210, 2217, 2207, 2208, 2206, 2210, 2211, 2209, + 2220, 2207, 2208, 2213, 2215, 2216, 2211, 2218, 2213, 2214, + 2221, 2223, 2215, 2216, 2214, 2218, 2219, 2224, 2209, 2217, + 2217, 2222, 2225, 2227, 2219, 2211, 2220, 2220, 2231, 2230, + 2233, 2215, 2216, 2234, 2218, 0, 2231, 2221, 2223, 2232, + 0, 2222, 2225, 2219, 2224, 2227, 0, 2232, 2222, 2225, + 2227, 2230, 0, 0, 0, 2231, 2230, 2233, 0, 0, + + 2234, 0, 0, 0, 0, 0, 2232, 2238, 2238, 2238, + 2238, 2238, 2238, 2238, 2239, 2239, 2239, 2239, 2239, 2239, + 2239, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2241, 2241, + 2241, 2241, 2241, 2241, 2241, 2242, 2242, 2242, 2242, 2242, + 2242, 2242, 2244, 2244, 0, 2244, 2244, 2244, 2244, 2245, + 2245, 0, 0, 0, 2245, 2245, 2246, 2246, 0, 0, + 2246, 0, 2246, 2247, 0, 0, 0, 0, 0, 2247, + 2248, 2248, 0, 0, 0, 2248, 2248, 2249, 0, 0, + 0, 0, 0, 2249, 2250, 2250, 0, 2250, 2250, 2250, + 2250, 2251, 2251, 0, 2251, 2251, 2251, 2251, 2237, 2237, + + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, + 2237, 2237, 2237, 2237, 2237 } ; static yy_state_type yy_last_accepting_state; @@ -2754,7 +2822,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2756 "<stdout>" +#line 2824 "<stdout>" #define INITIAL 0 #define quotedstring 1 @@ -2977,7 +3045,7 @@ YY_DECL { #line 207 "util/configlexer.lex" -#line 2979 "<stdout>" +#line 3047 "<stdout>" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3010,13 +3078,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2165 ) + if ( yy_current_state >= 2238 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6214 ); + while ( yy_base[yy_current_state] != 6399 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3511,580 +3579,620 @@ YY_RULE_SETUP case 94: YY_RULE_SETUP #line 304 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 95: YY_RULE_SETUP #line 305 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 96: YY_RULE_SETUP #line 306 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 97: YY_RULE_SETUP #line 307 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 98: YY_RULE_SETUP #line 308 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 99: YY_RULE_SETUP #line 309 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 100: YY_RULE_SETUP #line 310 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 101: YY_RULE_SETUP #line 311 "util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 102: YY_RULE_SETUP #line 312 "util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 103: YY_RULE_SETUP #line 313 "util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 104: YY_RULE_SETUP #line 314 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 105: YY_RULE_SETUP #line 315 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 106: YY_RULE_SETUP #line 316 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 107: YY_RULE_SETUP #line 317 "util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 108: YY_RULE_SETUP #line 318 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 109: YY_RULE_SETUP #line 319 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 110: YY_RULE_SETUP #line 320 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 111: YY_RULE_SETUP #line 321 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 112: YY_RULE_SETUP #line 322 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 113: YY_RULE_SETUP #line 323 "util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 114: YY_RULE_SETUP #line 324 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 115: YY_RULE_SETUP #line 325 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 116: YY_RULE_SETUP #line 326 "util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 117: YY_RULE_SETUP #line 327 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 118: YY_RULE_SETUP #line 328 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 119: YY_RULE_SETUP #line 329 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 120: YY_RULE_SETUP #line 330 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 121: YY_RULE_SETUP #line 331 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 122: YY_RULE_SETUP #line 332 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 123: YY_RULE_SETUP #line 333 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 124: YY_RULE_SETUP #line 334 "util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 125: YY_RULE_SETUP -#line 336 "util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 335 "util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 126: YY_RULE_SETUP -#line 337 "util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 336 "util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 127: YY_RULE_SETUP #line 338 "util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 128: YY_RULE_SETUP #line 339 "util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 129: YY_RULE_SETUP #line 340 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 130: YY_RULE_SETUP #line 341 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 131: YY_RULE_SETUP #line 342 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 132: YY_RULE_SETUP #line 343 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 133: YY_RULE_SETUP #line 344 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 134: YY_RULE_SETUP #line 345 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 135: YY_RULE_SETUP #line 346 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 136: YY_RULE_SETUP #line 347 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 137: YY_RULE_SETUP #line 348 "util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 138: YY_RULE_SETUP #line 349 "util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 139: YY_RULE_SETUP #line 350 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 140: YY_RULE_SETUP #line 351 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 141: YY_RULE_SETUP #line 352 "util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 142: YY_RULE_SETUP #line 353 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 143: YY_RULE_SETUP #line 354 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 144: YY_RULE_SETUP #line 355 "util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 145: YY_RULE_SETUP #line 356 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 146: YY_RULE_SETUP #line 357 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 147: YY_RULE_SETUP #line 358 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 148: YY_RULE_SETUP #line 359 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 149: YY_RULE_SETUP #line 360 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 150: YY_RULE_SETUP #line 361 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 151: YY_RULE_SETUP #line 362 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 363 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 153: YY_RULE_SETUP #line 364 "util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 154: YY_RULE_SETUP #line 365 "util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 155: YY_RULE_SETUP #line 366 "util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 156: YY_RULE_SETUP #line 367 "util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 157: YY_RULE_SETUP #line 368 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 158: YY_RULE_SETUP #line 369 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 159: YY_RULE_SETUP #line 370 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 160: YY_RULE_SETUP #line 371 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 161: YY_RULE_SETUP #line 372 "util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 162: YY_RULE_SETUP #line 373 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 163: YY_RULE_SETUP #line 374 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 164: YY_RULE_SETUP #line 375 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 165: YY_RULE_SETUP #line 376 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 166: YY_RULE_SETUP #line 377 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 167: YY_RULE_SETUP #line 378 "util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 168: YY_RULE_SETUP #line 379 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 169: YY_RULE_SETUP #line 380 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 170: YY_RULE_SETUP #line 381 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 171: YY_RULE_SETUP #line 382 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 172: YY_RULE_SETUP #line 383 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 173: YY_RULE_SETUP #line 384 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 174: YY_RULE_SETUP #line 385 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 175: YY_RULE_SETUP #line 386 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 176: YY_RULE_SETUP -#line 388 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 387 "util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 177: YY_RULE_SETUP -#line 390 "util/configlexer.lex" +#line 388 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 178: YY_RULE_SETUP -#line 392 "util/configlexer.lex" +#line 390 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 179: YY_RULE_SETUP -#line 394 "util/configlexer.lex" +#line 392 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 180: YY_RULE_SETUP -#line 396 "util/configlexer.lex" +#line 394 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 181: YY_RULE_SETUP -#line 398 "util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 396 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 182: YY_RULE_SETUP -#line 399 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 398 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 183: YY_RULE_SETUP #line 400 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 184: YY_RULE_SETUP #line 401 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 185: YY_RULE_SETUP #line 402 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 186: YY_RULE_SETUP #line 403 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 187: YY_RULE_SETUP #line 404 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 188: YY_RULE_SETUP #line 405 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 189: YY_RULE_SETUP #line 406 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 190: YY_RULE_SETUP #line 407 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 191: YY_RULE_SETUP #line 408 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 192: YY_RULE_SETUP #line 409 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 193: YY_RULE_SETUP #line 410 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 194: YY_RULE_SETUP #line 411 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 195: YY_RULE_SETUP #line 412 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 196: YY_RULE_SETUP #line 413 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 197: YY_RULE_SETUP #line 414 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 198: YY_RULE_SETUP #line 415 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 199: YY_RULE_SETUP #line 416 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 200: YY_RULE_SETUP #line 417 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 201: -/* rule 201 can match eol */ YY_RULE_SETUP #line 418 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 202: YY_RULE_SETUP +#line 419 "util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } + YY_BREAK +case 203: +YY_RULE_SETUP +#line 420 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } + YY_BREAK +case 204: +YY_RULE_SETUP #line 421 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } + YY_BREAK +case 205: +YY_RULE_SETUP +#line 422 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_HOOK) } + YY_BREAK +case 206: +YY_RULE_SETUP +#line 423 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } + YY_BREAK +case 207: +YY_RULE_SETUP +#line 424 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } + YY_BREAK +case 208: +YY_RULE_SETUP +#line 425 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_STRICT) } + YY_BREAK +case 209: +/* rule 209 can match eol */ +YY_RULE_SETUP +#line 426 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 210: +YY_RULE_SETUP +#line 429 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 422 "util/configlexer.lex" +#line 430 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 203: +case 211: YY_RULE_SETUP -#line 427 "util/configlexer.lex" +#line 435 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 204: -/* rule 204 can match eol */ +case 212: +/* rule 212 can match eol */ YY_RULE_SETUP -#line 428 "util/configlexer.lex" +#line 436 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 205: +case 213: YY_RULE_SETUP -#line 430 "util/configlexer.lex" +#line 438 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4097,34 +4205,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 206: +case 214: YY_RULE_SETUP -#line 442 "util/configlexer.lex" +#line 450 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 443 "util/configlexer.lex" +#line 451 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 207: +case 215: YY_RULE_SETUP -#line 448 "util/configlexer.lex" +#line 456 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 208: -/* rule 208 can match eol */ +case 216: +/* rule 216 can match eol */ YY_RULE_SETUP -#line 449 "util/configlexer.lex" +#line 457 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 209: +case 217: YY_RULE_SETUP -#line 451 "util/configlexer.lex" +#line 459 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4137,38 +4245,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 210: +case 218: YY_RULE_SETUP -#line 463 "util/configlexer.lex" +#line 471 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 465 "util/configlexer.lex" +#line 473 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 211: +case 219: YY_RULE_SETUP -#line 469 "util/configlexer.lex" +#line 477 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 212: -/* rule 212 can match eol */ +case 220: +/* rule 220 can match eol */ YY_RULE_SETUP -#line 470 "util/configlexer.lex" +#line 478 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 213: +case 221: YY_RULE_SETUP -#line 471 "util/configlexer.lex" +#line 479 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 214: +case 222: YY_RULE_SETUP -#line 472 "util/configlexer.lex" +#line 480 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4176,27 +4284,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 477 "util/configlexer.lex" +#line 485 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 215: +case 223: YY_RULE_SETUP -#line 481 "util/configlexer.lex" +#line 489 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 216: -/* rule 216 can match eol */ +case 224: +/* rule 224 can match eol */ YY_RULE_SETUP -#line 482 "util/configlexer.lex" +#line 490 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 217: +case 225: YY_RULE_SETUP -#line 484 "util/configlexer.lex" +#line 492 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4206,7 +4314,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 490 "util/configlexer.lex" +#line 498 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4218,33 +4326,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 218: +case 226: YY_RULE_SETUP -#line 501 "util/configlexer.lex" +#line 509 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 219: +case 227: YY_RULE_SETUP -#line 505 "util/configlexer.lex" +#line 513 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 220: +case 228: YY_RULE_SETUP -#line 509 "util/configlexer.lex" +#line 517 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 221: +case 229: YY_RULE_SETUP -#line 513 "util/configlexer.lex" +#line 521 "util/configlexer.lex" ECHO; YY_BREAK -#line 4246 "<stdout>" +#line 4354 "<stdout>" case YY_END_OF_BUFFER: { @@ -4535,7 +4643,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 >= 2165 ) + if ( yy_current_state >= 2238 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -4563,11 +4671,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 >= 2165 ) + if ( yy_current_state >= 2238 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 2164); + yy_is_jam = (yy_current_state == 2237); return yy_is_jam ? 0 : yy_current_state; } @@ -5206,7 +5314,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 513 "util/configlexer.lex" +#line 521 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index a6323f2c1436..d9b8e281c568 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -301,6 +301,7 @@ do-not-query-address{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } do-not-query-localhost{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } access-control{COLON} { YDVAR(2, VAR_ACCESS_CONTROL) } send-client-subnet{COLON} { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +client-subnet-zone{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } client-subnet-always-forward{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } client-subnet-opcode{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } max-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } @@ -317,6 +318,7 @@ trust-anchor-file{COLON} { YDVAR(1, VAR_TRUST_ANCHOR_FILE) } auto-trust-anchor-file{COLON} { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } trusted-keys-file{COLON} { YDVAR(1, VAR_TRUSTED_KEYS_FILE) } trust-anchor{COLON} { YDVAR(1, VAR_TRUST_ANCHOR) } +trust-anchor-signaling{COLON} { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } val-override-date{COLON} { YDVAR(1, VAR_VAL_OVERRIDE_DATE) } val-sig-skew-min{COLON} { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } val-sig-skew-max{COLON} { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } @@ -415,6 +417,12 @@ dnscrypt-port{COLON} { YDVAR(1, VAR_DNSCRYPT_PORT) } dnscrypt-provider{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } dnscrypt-secret-key{COLON} { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } dnscrypt-provider-cert{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } +ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } +ipsecmod-max-ttl{COLON} { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +ipsecmod-whitelist{COLON} { YDVAR(1, VAR_IPSECMOD_WHITELIST) } +ipsecmod-strict{COLON} { YDVAR(1, VAR_IPSECMOD_STRICT) } <INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index f70b948b75d2..9fa436b02886 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -298,39 +298,47 @@ extern int yydebug; VAR_IP_RATELIMIT_FACTOR = 427, VAR_RATELIMIT_FACTOR = 428, VAR_SEND_CLIENT_SUBNET = 429, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 430, - VAR_CLIENT_SUBNET_OPCODE = 431, - VAR_MAX_CLIENT_SUBNET_IPV4 = 432, - VAR_MAX_CLIENT_SUBNET_IPV6 = 433, - VAR_CAPS_WHITELIST = 434, - VAR_CACHE_MAX_NEGATIVE_TTL = 435, - VAR_PERMIT_SMALL_HOLDDOWN = 436, - VAR_QNAME_MINIMISATION = 437, - VAR_QNAME_MINIMISATION_STRICT = 438, - VAR_IP_FREEBIND = 439, - VAR_DEFINE_TAG = 440, - VAR_LOCAL_ZONE_TAG = 441, - VAR_ACCESS_CONTROL_TAG = 442, - VAR_LOCAL_ZONE_OVERRIDE = 443, - VAR_ACCESS_CONTROL_TAG_ACTION = 444, - VAR_ACCESS_CONTROL_TAG_DATA = 445, - VAR_VIEW = 446, - VAR_ACCESS_CONTROL_VIEW = 447, - VAR_VIEW_FIRST = 448, - VAR_SERVE_EXPIRED = 449, - VAR_FAKE_DSA = 450, - VAR_FAKE_SHA1 = 451, - VAR_LOG_IDENTITY = 452, - VAR_HIDE_TRUSTANCHOR = 453, - VAR_USE_SYSTEMD = 454, - VAR_SHM_ENABLE = 455, - VAR_SHM_KEY = 456, - VAR_DNSCRYPT = 457, - VAR_DNSCRYPT_ENABLE = 458, - VAR_DNSCRYPT_PORT = 459, - VAR_DNSCRYPT_PROVIDER = 460, - VAR_DNSCRYPT_SECRET_KEY = 461, - VAR_DNSCRYPT_PROVIDER_CERT = 462 + VAR_CLIENT_SUBNET_ZONE = 430, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 431, + VAR_CLIENT_SUBNET_OPCODE = 432, + VAR_MAX_CLIENT_SUBNET_IPV4 = 433, + VAR_MAX_CLIENT_SUBNET_IPV6 = 434, + VAR_CAPS_WHITELIST = 435, + VAR_CACHE_MAX_NEGATIVE_TTL = 436, + VAR_PERMIT_SMALL_HOLDDOWN = 437, + VAR_QNAME_MINIMISATION = 438, + VAR_QNAME_MINIMISATION_STRICT = 439, + VAR_IP_FREEBIND = 440, + VAR_DEFINE_TAG = 441, + VAR_LOCAL_ZONE_TAG = 442, + VAR_ACCESS_CONTROL_TAG = 443, + VAR_LOCAL_ZONE_OVERRIDE = 444, + VAR_ACCESS_CONTROL_TAG_ACTION = 445, + VAR_ACCESS_CONTROL_TAG_DATA = 446, + VAR_VIEW = 447, + VAR_ACCESS_CONTROL_VIEW = 448, + VAR_VIEW_FIRST = 449, + VAR_SERVE_EXPIRED = 450, + VAR_FAKE_DSA = 451, + VAR_FAKE_SHA1 = 452, + VAR_LOG_IDENTITY = 453, + VAR_HIDE_TRUSTANCHOR = 454, + VAR_TRUST_ANCHOR_SIGNALING = 455, + VAR_USE_SYSTEMD = 456, + VAR_SHM_ENABLE = 457, + VAR_SHM_KEY = 458, + VAR_DNSCRYPT = 459, + VAR_DNSCRYPT_ENABLE = 460, + VAR_DNSCRYPT_PORT = 461, + VAR_DNSCRYPT_PROVIDER = 462, + VAR_DNSCRYPT_SECRET_KEY = 463, + VAR_DNSCRYPT_PROVIDER_CERT = 464, + VAR_IPSECMOD_ENABLED = 465, + VAR_IPSECMOD_HOOK = 466, + VAR_IPSECMOD_IGNORE_BOGUS = 467, + VAR_IPSECMOD_MAX_TTL = 468, + VAR_IPSECMOD_WHITELIST = 469, + VAR_IPSECMOD_STRICT = 470 }; #endif /* Tokens. */ @@ -506,39 +514,47 @@ extern int yydebug; #define VAR_IP_RATELIMIT_FACTOR 427 #define VAR_RATELIMIT_FACTOR 428 #define VAR_SEND_CLIENT_SUBNET 429 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 430 -#define VAR_CLIENT_SUBNET_OPCODE 431 -#define VAR_MAX_CLIENT_SUBNET_IPV4 432 -#define VAR_MAX_CLIENT_SUBNET_IPV6 433 -#define VAR_CAPS_WHITELIST 434 -#define VAR_CACHE_MAX_NEGATIVE_TTL 435 -#define VAR_PERMIT_SMALL_HOLDDOWN 436 -#define VAR_QNAME_MINIMISATION 437 -#define VAR_QNAME_MINIMISATION_STRICT 438 -#define VAR_IP_FREEBIND 439 -#define VAR_DEFINE_TAG 440 -#define VAR_LOCAL_ZONE_TAG 441 -#define VAR_ACCESS_CONTROL_TAG 442 -#define VAR_LOCAL_ZONE_OVERRIDE 443 -#define VAR_ACCESS_CONTROL_TAG_ACTION 444 -#define VAR_ACCESS_CONTROL_TAG_DATA 445 -#define VAR_VIEW 446 -#define VAR_ACCESS_CONTROL_VIEW 447 -#define VAR_VIEW_FIRST 448 -#define VAR_SERVE_EXPIRED 449 -#define VAR_FAKE_DSA 450 -#define VAR_FAKE_SHA1 451 -#define VAR_LOG_IDENTITY 452 -#define VAR_HIDE_TRUSTANCHOR 453 -#define VAR_USE_SYSTEMD 454 -#define VAR_SHM_ENABLE 455 -#define VAR_SHM_KEY 456 -#define VAR_DNSCRYPT 457 -#define VAR_DNSCRYPT_ENABLE 458 -#define VAR_DNSCRYPT_PORT 459 -#define VAR_DNSCRYPT_PROVIDER 460 -#define VAR_DNSCRYPT_SECRET_KEY 461 -#define VAR_DNSCRYPT_PROVIDER_CERT 462 +#define VAR_CLIENT_SUBNET_ZONE 430 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 431 +#define VAR_CLIENT_SUBNET_OPCODE 432 +#define VAR_MAX_CLIENT_SUBNET_IPV4 433 +#define VAR_MAX_CLIENT_SUBNET_IPV6 434 +#define VAR_CAPS_WHITELIST 435 +#define VAR_CACHE_MAX_NEGATIVE_TTL 436 +#define VAR_PERMIT_SMALL_HOLDDOWN 437 +#define VAR_QNAME_MINIMISATION 438 +#define VAR_QNAME_MINIMISATION_STRICT 439 +#define VAR_IP_FREEBIND 440 +#define VAR_DEFINE_TAG 441 +#define VAR_LOCAL_ZONE_TAG 442 +#define VAR_ACCESS_CONTROL_TAG 443 +#define VAR_LOCAL_ZONE_OVERRIDE 444 +#define VAR_ACCESS_CONTROL_TAG_ACTION 445 +#define VAR_ACCESS_CONTROL_TAG_DATA 446 +#define VAR_VIEW 447 +#define VAR_ACCESS_CONTROL_VIEW 448 +#define VAR_VIEW_FIRST 449 +#define VAR_SERVE_EXPIRED 450 +#define VAR_FAKE_DSA 451 +#define VAR_FAKE_SHA1 452 +#define VAR_LOG_IDENTITY 453 +#define VAR_HIDE_TRUSTANCHOR 454 +#define VAR_TRUST_ANCHOR_SIGNALING 455 +#define VAR_USE_SYSTEMD 456 +#define VAR_SHM_ENABLE 457 +#define VAR_SHM_KEY 458 +#define VAR_DNSCRYPT 459 +#define VAR_DNSCRYPT_ENABLE 460 +#define VAR_DNSCRYPT_PORT 461 +#define VAR_DNSCRYPT_PROVIDER 462 +#define VAR_DNSCRYPT_SECRET_KEY 463 +#define VAR_DNSCRYPT_PROVIDER_CERT 464 +#define VAR_IPSECMOD_ENABLED 465 +#define VAR_IPSECMOD_HOOK 466 +#define VAR_IPSECMOD_IGNORE_BOGUS 467 +#define VAR_IPSECMOD_MAX_TTL 468 +#define VAR_IPSECMOD_WHITELIST 469 +#define VAR_IPSECMOD_STRICT 470 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -549,7 +565,7 @@ union YYSTYPE char* str; -#line 553 "util/configparser.c" /* yacc.c:355 */ +#line 569 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -566,7 +582,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 570 "util/configparser.c" /* yacc.c:358 */ +#line 586 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -808,21 +824,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 421 +#define YYLAST 442 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 208 +#define YYNTOKENS 216 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 223 +#define YYNNTS 231 /* YYNRULES -- Number of rules. */ -#define YYNRULES 427 +#define YYNRULES 443 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 643 +#define YYNSTATES 667 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 462 +#define YYMAXUTOK 470 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -877,56 +893,59 @@ static const yytype_uint8 yytranslate[] = 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 + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 149, 149, 149, 150, 150, 151, 151, 152, 152, - 152, 154, 158, 163, 164, 165, 165, 165, 166, 166, - 167, 167, 168, 168, 169, 169, 170, 170, 170, 171, - 171, 171, 172, 172, 173, 173, 174, 174, 175, 175, - 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, - 180, 181, 181, 181, 182, 182, 182, 183, 183, 184, - 184, 185, 185, 186, 186, 187, 187, 187, 188, 188, - 189, 189, 190, 190, 190, 191, 191, 192, 192, 193, - 193, 194, 194, 194, 195, 195, 196, 196, 197, 197, - 198, 198, 199, 199, 200, 200, 200, 201, 201, 202, - 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, - 205, 205, 206, 206, 206, 207, 207, 207, 208, 208, - 209, 209, 210, 210, 211, 211, 212, 212, 212, 213, - 213, 214, 214, 215, 216, 216, 217, 217, 218, 219, - 220, 220, 221, 221, 222, 222, 223, 223, 223, 224, - 224, 225, 225, 226, 226, 227, 227, 228, 228, 228, - 229, 229, 229, 230, 230, 230, 231, 233, 245, 246, - 247, 247, 247, 247, 247, 248, 250, 262, 263, 264, - 264, 264, 264, 265, 267, 281, 282, 283, 283, 283, - 283, 284, 284, 284, 286, 295, 304, 315, 324, 333, - 342, 353, 362, 374, 389, 400, 417, 434, 447, 462, - 471, 480, 489, 498, 507, 516, 525, 534, 543, 552, - 561, 570, 579, 588, 597, 604, 611, 620, 629, 638, - 652, 661, 670, 679, 686, 693, 719, 727, 734, 741, - 748, 755, 763, 771, 779, 786, 793, 802, 811, 820, - 827, 834, 842, 850, 860, 870, 880, 893, 904, 912, - 925, 934, 943, 952, 962, 972, 980, 993, 1002, 1010, - 1019, 1027, 1040, 1049, 1056, 1066, 1076, 1086, 1096, 1106, - 1116, 1126, 1136, 1143, 1150, 1157, 1166, 1175, 1184, 1191, - 1201, 1218, 1225, 1243, 1256, 1269, 1278, 1287, 1296, 1305, - 1315, 1325, 1334, 1343, 1356, 1369, 1378, 1385, 1394, 1403, - 1412, 1421, 1429, 1442, 1450, 1478, 1485, 1500, 1510, 1520, - 1527, 1534, 1543, 1557, 1576, 1595, 1607, 1619, 1631, 1642, - 1661, 1671, 1680, 1688, 1696, 1709, 1722, 1735, 1748, 1757, - 1766, 1776, 1786, 1796, 1803, 1810, 1819, 1829, 1839, 1849, - 1856, 1863, 1872, 1882, 1892, 1921, 1931, 1939, 1948, 1963, - 1972, 1977, 1978, 1979, 1979, 1979, 1980, 1980, 1980, 1981, - 1981, 1983, 1993, 2002, 2009, 2019, 2026, 2033, 2040, 2047, - 2052, 2053, 2054, 2054, 2055, 2055, 2056, 2056, 2057, 2058, - 2059, 2060, 2061, 2062, 2064, 2072, 2079, 2087, 2095, 2102, - 2109, 2118, 2127, 2136, 2145, 2154, 2163, 2168, 2169, 2170, - 2172, 2178, 2188, 2195, 2204, 2212, 2218, 2219, 2221, 2221, - 2221, 2222, 2222, 2224, 2233, 2243, 2250, 2257 + 0, 151, 151, 151, 152, 152, 153, 153, 154, 154, + 154, 156, 160, 165, 166, 167, 167, 167, 168, 168, + 169, 169, 170, 170, 171, 171, 172, 172, 172, 173, + 173, 173, 174, 174, 175, 175, 176, 176, 177, 177, + 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, + 182, 183, 183, 183, 184, 184, 184, 185, 185, 186, + 186, 187, 187, 188, 188, 189, 189, 189, 190, 190, + 191, 191, 192, 192, 192, 193, 193, 194, 194, 195, + 195, 196, 196, 196, 197, 197, 198, 198, 199, 199, + 200, 200, 201, 201, 202, 202, 202, 203, 203, 204, + 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, + 207, 207, 208, 208, 208, 209, 209, 209, 210, 210, + 211, 211, 212, 212, 213, 213, 214, 214, 214, 215, + 215, 216, 216, 217, 218, 218, 219, 219, 220, 220, + 221, 222, 222, 223, 223, 224, 224, 225, 225, 225, + 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, + 230, 231, 231, 231, 232, 232, 232, 233, 233, 234, + 234, 235, 235, 236, 236, 238, 250, 251, 252, 252, + 252, 252, 252, 253, 255, 267, 268, 269, 269, 269, + 269, 270, 272, 286, 287, 288, 288, 288, 288, 289, + 289, 289, 291, 300, 309, 320, 329, 338, 347, 358, + 367, 378, 391, 406, 417, 434, 451, 464, 479, 488, + 497, 506, 515, 524, 533, 542, 551, 560, 569, 578, + 587, 596, 605, 614, 621, 628, 637, 646, 655, 669, + 678, 687, 696, 703, 710, 736, 744, 751, 758, 765, + 772, 780, 788, 796, 803, 814, 821, 830, 839, 848, + 855, 862, 870, 878, 888, 898, 908, 921, 932, 940, + 953, 962, 971, 980, 990, 1000, 1008, 1021, 1030, 1038, + 1047, 1055, 1068, 1077, 1084, 1094, 1104, 1114, 1124, 1134, + 1144, 1154, 1164, 1171, 1178, 1185, 1194, 1203, 1212, 1219, + 1229, 1246, 1253, 1271, 1284, 1297, 1306, 1315, 1324, 1333, + 1343, 1353, 1362, 1371, 1384, 1397, 1406, 1413, 1422, 1431, + 1440, 1449, 1457, 1470, 1478, 1506, 1513, 1528, 1538, 1548, + 1555, 1562, 1571, 1585, 1604, 1623, 1635, 1647, 1659, 1670, + 1689, 1699, 1708, 1716, 1724, 1737, 1750, 1763, 1776, 1785, + 1794, 1804, 1814, 1827, 1840, 1851, 1864, 1875, 1888, 1898, + 1905, 1912, 1921, 1931, 1941, 1951, 1958, 1965, 1974, 1984, + 1994, 2023, 2033, 2041, 2050, 2065, 2074, 2079, 2080, 2081, + 2081, 2081, 2082, 2082, 2082, 2083, 2083, 2085, 2095, 2104, + 2111, 2121, 2128, 2135, 2142, 2149, 2154, 2155, 2156, 2156, + 2157, 2157, 2158, 2158, 2159, 2160, 2161, 2162, 2163, 2164, + 2166, 2174, 2181, 2189, 2197, 2204, 2211, 2220, 2229, 2238, + 2247, 2256, 2265, 2270, 2271, 2272, 2274, 2280, 2290, 2297, + 2306, 2314, 2320, 2321, 2323, 2323, 2323, 2324, 2324, 2326, + 2336, 2346, 2353, 2360 }; #endif @@ -995,30 +1014,33 @@ static const char *const yytname[] = "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", - "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", - "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4", - "VAR_MAX_CLIENT_SUBNET_IPV6", "VAR_CAPS_WHITELIST", - "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN", - "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT", - "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", - "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE", - "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA", - "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST", - "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY", - "VAR_HIDE_TRUSTANCHOR", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", - "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", - "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY", - "VAR_DNSCRYPT_PROVIDER_CERT", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "server_num_threads", "server_verbosity", "server_statistics_interval", + "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE", + "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE", + "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6", + "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", + "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", + "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", + "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG", + "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION", + "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", + "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", + "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", + "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_DNSCRYPT", + "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", + "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", + "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", + "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", + "$accept", "toplevelvars", "toplevelvar", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "server_num_threads", + "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_always_forward", - "server_client_subnet_opcode", "server_max_client_subnet_ipv4", - "server_max_client_subnet_ipv6", "server_interface", - "server_outgoing_interface", "server_outgoing_range", + "server_send_client_subnet", "server_client_subnet_zone", + "server_client_subnet_always_forward", "server_client_subnet_opcode", + "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", + "server_interface", "server_outgoing_interface", "server_outgoing_range", "server_outgoing_port_permit", "server_outgoing_port_avoid", "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", @@ -1031,36 +1053,36 @@ static const char *const yytname[] = "server_pidfile", "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", "server_auto_trust_anchor_file", "server_trust_anchor_file", "server_trusted_keys_file", - "server_trust_anchor", "server_domain_insecure", "server_hide_identity", - "server_hide_version", "server_hide_trustanchor", "server_identity", - "server_version", "server_so_rcvbuf", "server_so_sndbuf", - "server_so_reuseport", "server_ip_transparent", "server_ip_freebind", - "server_edns_buffer_size", "server_msg_buffer_size", - "server_msg_cache_size", "server_msg_cache_slabs", - "server_num_queries_per_thread", "server_jostle_timeout", - "server_delay_close", "server_unblock_lan_zones", - "server_insecure_lan_zones", "server_rrset_cache_size", - "server_rrset_cache_slabs", "server_infra_host_ttl", - "server_infra_lame_ttl", "server_infra_cache_numhosts", - "server_infra_cache_lame_size", "server_infra_cache_slabs", - "server_infra_cache_min_rtt", "server_target_fetch_policy", - "server_harden_short_bufsize", "server_harden_large_queries", - "server_harden_glue", "server_harden_dnssec_stripped", - "server_harden_below_nxdomain", "server_harden_referral_path", - "server_harden_algo_downgrade", "server_use_caps_for_id", - "server_caps_whitelist", "server_private_address", - "server_private_domain", "server_prefetch", "server_prefetch_key", - "server_unwanted_reply_threshold", "server_do_not_query_address", - "server_do_not_query_localhost", "server_access_control", - "server_module_conf", "server_val_override_date", - "server_val_sig_skew_min", "server_val_sig_skew_max", - "server_cache_max_ttl", "server_cache_max_negative_ttl", - "server_cache_min_ttl", "server_bogus_ttl", - "server_val_clean_additional", "server_val_permissive_mode", - "server_ignore_cd_flag", "server_serve_expired", "server_fake_dsa", - "server_fake_sha1", "server_val_log_level", - "server_val_nsec3_keysize_iterations", "server_add_holddown", - "server_del_holddown", "server_keep_missing", + "server_trust_anchor", "server_trust_anchor_signaling", + "server_domain_insecure", "server_hide_identity", "server_hide_version", + "server_hide_trustanchor", "server_identity", "server_version", + "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", + "server_ip_transparent", "server_ip_freebind", "server_edns_buffer_size", + "server_msg_buffer_size", "server_msg_cache_size", + "server_msg_cache_slabs", "server_num_queries_per_thread", + "server_jostle_timeout", "server_delay_close", + "server_unblock_lan_zones", "server_insecure_lan_zones", + "server_rrset_cache_size", "server_rrset_cache_slabs", + "server_infra_host_ttl", "server_infra_lame_ttl", + "server_infra_cache_numhosts", "server_infra_cache_lame_size", + "server_infra_cache_slabs", "server_infra_cache_min_rtt", + "server_target_fetch_policy", "server_harden_short_bufsize", + "server_harden_large_queries", "server_harden_glue", + "server_harden_dnssec_stripped", "server_harden_below_nxdomain", + "server_harden_referral_path", "server_harden_algo_downgrade", + "server_use_caps_for_id", "server_caps_whitelist", + "server_private_address", "server_private_domain", "server_prefetch", + "server_prefetch_key", "server_unwanted_reply_threshold", + "server_do_not_query_address", "server_do_not_query_localhost", + "server_access_control", "server_module_conf", + "server_val_override_date", "server_val_sig_skew_min", + "server_val_sig_skew_max", "server_cache_max_ttl", + "server_cache_max_negative_ttl", "server_cache_min_ttl", + "server_bogus_ttl", "server_val_clean_additional", + "server_val_permissive_mode", "server_ignore_cd_flag", + "server_serve_expired", "server_fake_dsa", "server_fake_sha1", + "server_val_log_level", "server_val_nsec3_keysize_iterations", + "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -1074,18 +1096,21 @@ static const char *const yytname[] = "server_ratelimit_slabs", "server_ratelimit_for_domain", "server_ratelimit_below_domain", "server_ip_ratelimit_factor", "server_ratelimit_factor", "server_qname_minimisation", - "server_qname_minimisation_strict", "stub_name", "stub_host", - "stub_addr", "stub_first", "stub_ssl_upstream", "stub_prime", - "forward_name", "forward_host", "forward_addr", "forward_first", - "forward_ssl_upstream", "view_name", "view_local_zone", - "view_response_ip", "view_response_ip_data", "view_local_data", - "view_local_data_ptr", "view_first", "rcstart", "contents_rc", - "content_rc", "rc_control_enable", "rc_control_port", - "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", - "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", - "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", - "dt_dnstap_socket_path", "dt_dnstap_send_identity", - "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", + "server_qname_minimisation_strict", "server_ipsecmod_enabled", + "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", + "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", + "server_ipsecmod_strict", "stub_name", "stub_host", "stub_addr", + "stub_first", "stub_ssl_upstream", "stub_prime", "forward_name", + "forward_host", "forward_addr", "forward_first", "forward_ssl_upstream", + "view_name", "view_local_zone", "view_response_ip", + "view_response_ip_data", "view_local_data", "view_local_data_ptr", + "view_first", "rcstart", "contents_rc", "content_rc", + "rc_control_enable", "rc_control_port", "rc_control_interface", + "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", + "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", + "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path", + "dt_dnstap_send_identity", "dt_dnstap_send_version", + "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", @@ -1126,14 +1151,15 @@ static const yytype_uint16 yytoknum[] = 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462 + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470 }; # endif -#define YYPACT_NINF -162 +#define YYPACT_NINF -200 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-162))) + (!!((Yystate) == (-200))) #define YYTABLE_NINF -1 @@ -1144,71 +1170,73 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -162, 0, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - 191, -38, -34, -39, -64, -130, -105, -161, -3, -2, - -1, 2, 3, 26, 29, 30, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 53, 54, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, - 86, 89, 91, 92, 93, 94, 95, 96, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 136, 137, 138, 139, 140, 141, 142, - 143, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 221, 222, 223, 224, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, 228, 229, 230, 272, 273, 274, -162, - -162, -162, -162, -162, -162, -162, 275, 276, 277, 278, - 279, -162, -162, -162, -162, -162, -162, 280, 284, 288, - 289, 313, 314, 315, -162, -162, -162, -162, -162, -162, - -162, -162, 316, 326, 327, 328, 329, 330, 331, 332, - -162, -162, -162, -162, -162, -162, -162, -162, -162, 333, - 334, 335, 336, 337, 338, 372, 374, 383, 384, 385, - 386, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, 387, -162, -162, 388, 389, 390, - 391, 392, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, 393, 394, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, 395, 396, - 397, -162, -162, -162, -162, -162, -162, -162, -162, -162, - 398, 399, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, 400, 401, 402, 403, - 404, 405, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, 406, -162, -162, 407, 408, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, 409, 410, 411, -162, -162, -162, -162, - -162, -162, -162 + -200, 0, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + 96, -39, -35, 248, -65, -131, -106, -199, 2, 25, + 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 82, 83, 85, 88, 90, 91, 92, 93, + 94, 95, 126, 127, 128, 129, 133, 134, 177, 178, + 179, 180, 181, 183, 184, 185, 189, 193, 218, 219, + 220, 221, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 280, 290, 291, 292, 293, + 294, 295, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, 361, + 362, 363, 364, 365, 366, -200, -200, -200, -200, -200, + -200, -200, 367, 368, 369, 370, 371, -200, -200, -200, + -200, -200, -200, 372, 373, 374, 375, 376, 377, 378, + -200, -200, -200, -200, -200, -200, -200, -200, 379, 380, + 381, 382, 383, 384, 385, 386, -200, -200, -200, -200, + -200, -200, -200, -200, -200, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 399, 400, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + 401, -200, -200, 402, 403, 404, 405, 406, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + 407, 408, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, 409, 410, 411, -200, -200, -200, + -200, -200, -200, -200, -200, -200, 412, 413, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, 414, 415, 416, 417, 418, 419, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, 420, -200, -200, 421, + 422, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, 423, 424, 425, + -200, -200, -200, -200, -200, -200, -200 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1216,8 +1244,8 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 12, 167, 176, 360, 406, 379, 184, - 415, 3, 14, 169, 178, 186, 362, 381, 408, 417, + 2, 0, 1, 12, 175, 184, 376, 422, 395, 192, + 431, 3, 14, 177, 186, 194, 378, 397, 424, 433, 4, 5, 6, 10, 8, 9, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1234,109 +1262,113 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 15, 16, 75, 78, 87, 163, 164, 17, 137, - 138, 139, 140, 141, 26, 66, 18, 79, 80, 37, - 59, 74, 19, 20, 22, 23, 21, 24, 25, 110, - 111, 112, 113, 114, 159, 76, 65, 91, 108, 109, - 27, 28, 29, 30, 31, 67, 81, 82, 97, 53, - 63, 54, 92, 47, 48, 166, 49, 50, 101, 105, - 118, 126, 146, 102, 60, 32, 33, 34, 89, 119, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 15, + 16, 75, 78, 87, 164, 165, 17, 137, 138, 139, + 140, 141, 142, 26, 66, 18, 79, 80, 37, 59, + 74, 19, 20, 22, 23, 21, 24, 25, 110, 111, + 112, 113, 114, 160, 76, 65, 91, 108, 109, 27, + 28, 29, 30, 31, 67, 81, 82, 97, 53, 63, + 54, 168, 92, 47, 48, 167, 49, 50, 101, 105, + 118, 126, 147, 102, 60, 32, 33, 34, 89, 119, 120, 121, 35, 36, 38, 39, 41, 42, 40, 124, - 43, 44, 45, 51, 70, 106, 84, 125, 77, 142, + 43, 44, 45, 51, 70, 106, 84, 125, 77, 143, 85, 86, 103, 104, 90, 46, 68, 71, 52, 55, - 93, 94, 69, 143, 95, 56, 57, 58, 107, 156, - 157, 165, 96, 64, 98, 99, 100, 144, 61, 62, - 83, 72, 73, 88, 115, 116, 117, 122, 123, 147, - 148, 150, 152, 153, 151, 154, 160, 127, 128, 131, - 132, 129, 130, 133, 134, 136, 135, 145, 155, 149, - 158, 161, 162, 0, 0, 0, 0, 0, 0, 168, - 170, 171, 172, 174, 175, 173, 0, 0, 0, 0, - 0, 177, 179, 180, 181, 182, 183, 0, 0, 0, - 0, 0, 0, 0, 185, 187, 188, 191, 192, 189, - 193, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 361, 363, 365, 364, 370, 366, 367, 368, 369, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 380, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 0, 407, 409, 0, 0, 0, - 0, 0, 416, 418, 419, 420, 422, 421, 195, 194, - 201, 209, 207, 215, 216, 219, 217, 218, 220, 221, - 233, 234, 235, 236, 237, 258, 259, 260, 265, 266, - 212, 267, 268, 271, 269, 270, 273, 274, 275, 288, - 246, 247, 249, 250, 276, 291, 242, 244, 292, 298, - 299, 300, 213, 257, 311, 312, 243, 306, 229, 208, - 238, 289, 295, 277, 0, 0, 315, 214, 196, 228, - 281, 197, 210, 211, 239, 240, 313, 279, 283, 284, - 198, 316, 261, 287, 230, 245, 293, 294, 297, 305, - 241, 309, 307, 308, 251, 256, 285, 286, 252, 253, - 278, 301, 231, 232, 222, 223, 224, 225, 226, 317, - 318, 319, 262, 263, 264, 272, 320, 321, 0, 0, - 0, 280, 254, 411, 330, 334, 332, 331, 335, 333, - 0, 0, 338, 339, 202, 203, 204, 205, 206, 282, - 296, 310, 340, 341, 255, 322, 0, 0, 0, 0, - 0, 0, 302, 303, 304, 412, 248, 227, 199, 200, - 342, 343, 344, 347, 346, 345, 348, 349, 350, 351, - 352, 353, 0, 357, 358, 0, 0, 359, 371, 373, - 372, 375, 376, 377, 378, 374, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 410, 423, - 424, 425, 427, 426, 290, 314, 329, 413, 414, 336, - 337, 323, 324, 0, 0, 0, 328, 354, 355, 356, - 327, 325, 326 + 93, 94, 69, 144, 95, 56, 57, 58, 107, 157, + 158, 166, 96, 64, 98, 99, 100, 145, 61, 62, + 83, 72, 73, 88, 115, 116, 117, 122, 123, 148, + 149, 151, 153, 154, 152, 155, 161, 127, 128, 131, + 132, 129, 130, 133, 134, 136, 135, 146, 156, 169, + 171, 170, 172, 173, 174, 150, 159, 162, 163, 0, + 0, 0, 0, 0, 0, 176, 178, 179, 180, 182, + 183, 181, 0, 0, 0, 0, 0, 185, 187, 188, + 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, + 193, 195, 196, 199, 200, 197, 201, 198, 0, 0, + 0, 0, 0, 0, 0, 0, 377, 379, 381, 380, + 386, 382, 383, 384, 385, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 396, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 0, 423, 425, 0, 0, 0, 0, 0, 432, 434, + 435, 436, 438, 437, 203, 202, 209, 218, 216, 224, + 225, 228, 226, 227, 229, 230, 242, 243, 244, 245, + 246, 268, 269, 270, 275, 276, 221, 277, 278, 281, + 279, 280, 283, 284, 285, 298, 256, 257, 259, 260, + 286, 301, 251, 253, 302, 308, 309, 310, 222, 267, + 321, 322, 252, 316, 238, 217, 247, 299, 305, 287, + 0, 0, 325, 223, 204, 237, 291, 205, 219, 220, + 248, 249, 323, 289, 293, 294, 206, 326, 271, 297, + 239, 255, 303, 304, 307, 315, 250, 319, 317, 318, + 261, 266, 295, 296, 262, 263, 288, 311, 240, 241, + 231, 232, 233, 234, 235, 327, 328, 329, 272, 273, + 274, 282, 330, 331, 0, 0, 0, 290, 264, 427, + 340, 344, 342, 341, 345, 343, 0, 0, 348, 349, + 210, 211, 212, 213, 214, 215, 292, 306, 320, 350, + 351, 265, 332, 0, 0, 0, 0, 0, 0, 312, + 313, 314, 428, 258, 254, 236, 207, 208, 352, 354, + 353, 355, 356, 357, 358, 359, 360, 363, 362, 361, + 364, 365, 366, 367, 368, 369, 0, 373, 374, 0, + 0, 375, 387, 389, 388, 391, 392, 393, 394, 390, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 426, 439, 440, 441, 443, 442, 300, 324, + 339, 429, 430, 346, 347, 333, 334, 0, 0, 0, + 338, 370, 371, 372, 337, 335, 336 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, - -162, -162, -162 + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 11, 12, 20, 180, 13, 21, 339, 14, - 22, 351, 15, 23, 364, 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, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 340, 341, 342, 343, 344, 345, 352, - 353, 354, 355, 356, 365, 366, 367, 368, 369, 370, - 371, 16, 24, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 17, 25, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 18, 26, 415, - 416, 329, 330, 331, 332, 19, 27, 422, 423, 424, - 425, 426, 427 + -1, 1, 11, 12, 20, 188, 13, 21, 355, 14, + 22, 367, 15, 23, 380, 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, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 356, 357, 358, 359, 360, 361, 368, 369, 370, + 371, 372, 381, 382, 383, 384, 385, 386, 387, 16, + 24, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 17, 25, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 18, 26, 431, 432, 345, + 346, 347, 348, 19, 27, 438, 439, 440, 441, 442, + 443 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1344,105 +1376,109 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 357, 333, 414, 334, 335, 346, 428, 429, 430, - 0, 3, 431, 432, 347, 348, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 372, 373, - 374, 375, 376, 377, 378, 379, 433, 358, 359, 434, - 435, 4, 417, 418, 419, 420, 421, 5, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 360, 450, 451, 336, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 6, 477, 478, 479, 337, 480, 338, 349, 481, - 350, 482, 483, 484, 485, 486, 487, 7, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, - 361, 362, 500, 501, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 8, 523, 524, 525, 526, - 527, 528, 529, 530, 363, 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, 558, 559, 560, 561, 562, 563, 564, 565, - 566, 9, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 0, 10, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 576, 577, 578, 579, 56, 57, 58, 580, 581, - 582, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 583, 584, 585, 586, 587, 588, 589, 590, - 591, 100, 101, 102, 592, 103, 104, 105, 593, 594, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 595, 596, 597, 598, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 612, 171, 613, 172, 173, 174, 175, 176, - 177, 178, 179, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 642 + 2, 349, 430, 350, 351, 362, 433, 434, 435, 436, + 437, 3, 444, 363, 364, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 388, 389, 390, + 391, 392, 393, 394, 395, 445, 446, 447, 448, 449, + 450, 4, 451, 452, 453, 454, 455, 5, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 352, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 6, 498, 499, 353, 500, 354, 365, 501, 366, + 502, 503, 504, 505, 506, 507, 0, 7, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 508, 509, 510, 511, + 56, 57, 58, 512, 513, 8, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 514, 515, 516, + 517, 518, 9, 519, 520, 521, 100, 101, 102, 522, + 103, 104, 105, 523, 10, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 524, 525, + 526, 527, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 373, 172, + 541, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 542, 543, 544, 545, 546, 547, 182, 183, 184, 185, + 186, 187, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 374, 375, 560, 561, 562, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 581, 582, 376, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 377, 378, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, + 661, 662, 663, 664, 665, 666, 0, 0, 0, 0, + 0, 0, 379 }; static const yytype_int16 yycheck[] = { - 0, 40, 40, 108, 42, 43, 40, 10, 10, 10, - -1, 11, 10, 10, 48, 49, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 92, 93, - 94, 95, 96, 97, 98, 99, 10, 76, 77, 10, - 10, 41, 203, 204, 205, 206, 207, 47, 10, 10, + 0, 40, 108, 42, 43, 40, 205, 206, 207, 208, + 209, 11, 10, 48, 49, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 92, 93, 94, + 95, 96, 97, 98, 99, 10, 10, 10, 10, 10, + 10, 41, 10, 10, 10, 10, 10, 47, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 101, 10, 10, 103, 10, 10, 10, 10, + 10, 10, 10, 10, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 91, 10, 10, 10, 133, 10, 135, 132, 10, - 134, 10, 10, 10, 10, 10, 10, 107, 10, 10, + 10, 91, 10, 10, 133, 10, 135, 132, 10, 134, + 10, 10, 10, 10, 10, 10, -1, 107, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 10, 10, 10, 10, + 44, 45, 46, 10, 10, 145, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 10, 10, 10, + 10, 10, 192, 10, 10, 10, 100, 101, 102, 10, + 104, 105, 106, 10, 204, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 10, 10, + 10, 10, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 40, 193, + 10, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 10, 10, 10, 10, 10, 10, 210, 211, 212, 213, + 214, 215, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 76, 77, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 101, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 145, 10, 10, 10, 10, - 10, 10, 10, 10, 193, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 191, 10, 10, 10, 10, 10, 10, 10, 10, - 10, -1, 202, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 10, 10, 10, 10, 44, 45, 46, 10, 10, - 10, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 100, 101, 102, 10, 104, 105, 106, 10, 10, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 10, 10, 10, 10, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 10, 192, 10, 194, 195, 196, 197, 198, - 199, 200, 201, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, + -1, -1, 194 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 209, 0, 11, 41, 47, 91, 107, 145, 191, - 202, 210, 211, 214, 217, 220, 389, 400, 415, 423, - 212, 215, 218, 221, 390, 401, 416, 424, 12, 13, + 0, 217, 0, 11, 41, 47, 91, 107, 145, 192, + 204, 218, 219, 222, 225, 228, 405, 416, 431, 439, + 220, 223, 226, 229, 406, 417, 432, 440, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, 45, 46, 50, @@ -1457,8 +1493,8 @@ static const yytype_uint16 yystos[] = 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 192, 194, 195, 196, 197, 198, 199, 200, 201, - 213, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 190, 191, 193, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 210, 211, 212, 213, 214, 215, 221, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, @@ -1472,17 +1508,19 @@ static const yytype_uint16 yystos[] = 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 419, - 420, 421, 422, 40, 42, 43, 103, 133, 135, 216, - 371, 372, 373, 374, 375, 376, 40, 48, 49, 132, - 134, 219, 377, 378, 379, 380, 381, 40, 76, 77, - 101, 159, 160, 193, 222, 382, 383, 384, 385, 386, - 387, 388, 92, 93, 94, 95, 96, 97, 98, 99, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 108, 417, 418, 203, 204, 205, - 206, 207, 425, 426, 427, 428, 429, 430, 10, 10, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 435, 436, 437, 438, 40, + 42, 43, 103, 133, 135, 224, 387, 388, 389, 390, + 391, 392, 40, 48, 49, 132, 134, 227, 393, 394, + 395, 396, 397, 40, 76, 77, 101, 159, 160, 194, + 230, 398, 399, 400, 401, 402, 403, 404, 92, 93, + 94, 95, 96, 97, 98, 99, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 108, 433, 434, 205, 206, 207, 208, 209, 441, 442, + 443, 444, 445, 446, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1504,33 +1542,33 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 208, 209, 209, 210, 210, 210, 210, 210, 210, - 210, 210, 211, 212, 212, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 214, 215, 215, - 216, 216, 216, 216, 216, 216, 217, 218, 218, 219, - 219, 219, 219, 219, 220, 221, 221, 222, 222, 222, - 222, 222, 222, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 0, 216, 217, 217, 218, 218, 218, 218, 218, 218, + 218, 218, 219, 220, 220, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 222, 223, 223, 224, 224, + 224, 224, 224, 224, 225, 226, 226, 227, 227, 227, + 227, 227, 228, 229, 229, 230, 230, 230, 230, 230, + 230, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, @@ -1546,13 +1584,15 @@ static const yytype_uint16 yyr1[] = 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 390, 391, 391, 391, 391, 391, 391, 391, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 401, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 424, 425, 425, - 425, 425, 425, 426, 427, 428, 429, 430 + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 406, 407, + 407, 407, 407, 407, 407, 407, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 417, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 440, 441, 441, 441, 441, 441, 442, + 443, 444, 445, 446 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1574,10 +1614,11 @@ static const yytype_uint8 yyr2[] = 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, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1593,14 +1634,15 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 2, 2, 2, 3, + 3, 1, 2, 0, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2 }; @@ -2277,15 +2319,15 @@ yyreduce: switch (yyn) { case 12: -#line 159 "util/configparser.y" /* yacc.c:1646 */ +#line 161 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2285 "util/configparser.c" /* yacc.c:1646 */ +#line 2327 "util/configparser.c" /* yacc.c:1646 */ break; - case 167: -#line 234 "util/configparser.y" /* yacc.c:1646 */ + case 175: +#line 239 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2296,11 +2338,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2300 "util/configparser.c" /* yacc.c:1646 */ +#line 2342 "util/configparser.c" /* yacc.c:1646 */ break; - case 176: -#line 251 "util/configparser.y" /* yacc.c:1646 */ + case 184: +#line 256 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2311,11 +2353,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2315 "util/configparser.c" /* yacc.c:1646 */ +#line 2357 "util/configparser.c" /* yacc.c:1646 */ break; - case 184: -#line 268 "util/configparser.y" /* yacc.c:1646 */ + case 192: +#line 273 "util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2328,11 +2370,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2332 "util/configparser.c" /* yacc.c:1646 */ +#line 2374 "util/configparser.c" /* yacc.c:1646 */ break; - case 194: -#line 287 "util/configparser.y" /* yacc.c:1646 */ + case 202: +#line 292 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2340,11 +2382,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2344 "util/configparser.c" /* yacc.c:1646 */ +#line 2386 "util/configparser.c" /* yacc.c:1646 */ break; - case 195: -#line 296 "util/configparser.y" /* yacc.c:1646 */ + case 203: +#line 301 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2352,11 +2394,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2356 "util/configparser.c" /* yacc.c:1646 */ +#line 2398 "util/configparser.c" /* yacc.c:1646 */ break; - case 196: -#line 305 "util/configparser.y" /* yacc.c:1646 */ + case 204: +#line 310 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2366,11 +2408,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2370 "util/configparser.c" /* yacc.c:1646 */ +#line 2412 "util/configparser.c" /* yacc.c:1646 */ break; - case 197: -#line 316 "util/configparser.y" /* yacc.c:1646 */ + case 205: +#line 321 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2378,11 +2420,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2382 "util/configparser.c" /* yacc.c:1646 */ +#line 2424 "util/configparser.c" /* yacc.c:1646 */ break; - case 198: -#line 325 "util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 330 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2390,11 +2432,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2394 "util/configparser.c" /* yacc.c:1646 */ +#line 2436 "util/configparser.c" /* yacc.c:1646 */ break; - case 199: -#line 334 "util/configparser.y" /* yacc.c:1646 */ + case 207: +#line 339 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2402,11 +2444,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2406 "util/configparser.c" /* yacc.c:1646 */ +#line 2448 "util/configparser.c" /* yacc.c:1646 */ break; - case 200: -#line 343 "util/configparser.y" /* yacc.c:1646 */ + case 208: +#line 348 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2416,11 +2458,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2420 "util/configparser.c" /* yacc.c:1646 */ +#line 2462 "util/configparser.c" /* yacc.c:1646 */ break; - case 201: -#line 354 "util/configparser.y" /* yacc.c:1646 */ + case 209: +#line 359 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2428,11 +2470,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2432 "util/configparser.c" /* yacc.c:1646 */ +#line 2474 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: -#line 363 "util/configparser.y" /* yacc.c:1646 */ + case 210: +#line 368 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2442,11 +2484,26 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2446 "util/configparser.c" /* yacc.c:1646 */ +#line 2488 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: -#line 375 "util/configparser.y" /* yacc.c:1646 */ + case 211: +#line 379 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, + (yyvsp[0].str))) + fatal_exit("out of memory adding client-subnet-zone"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + } +#line 2503 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 212: +#line 392 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2460,11 +2517,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2464 "util/configparser.c" /* yacc.c:1646 */ +#line 2521 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 390 "util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 407 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2474,11 +2531,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2478 "util/configparser.c" /* yacc.c:1646 */ +#line 2535 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 401 "util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 418 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2494,11 +2551,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2498 "util/configparser.c" /* yacc.c:1646 */ +#line 2555 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 418 "util/configparser.y" /* yacc.c:1646 */ + case 215: +#line 435 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2514,11 +2571,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2518 "util/configparser.c" /* yacc.c:1646 */ +#line 2575 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 435 "util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 452 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2530,11 +2587,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2534 "util/configparser.c" /* yacc.c:1646 */ +#line 2591 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 448 "util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 465 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2548,11 +2605,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2552 "util/configparser.c" /* yacc.c:1646 */ +#line 2609 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 463 "util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 480 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2560,11 +2617,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2564 "util/configparser.c" /* yacc.c:1646 */ +#line 2621 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 472 "util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 489 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2572,11 +2629,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2576 "util/configparser.c" /* yacc.c:1646 */ +#line 2633 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 481 "util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 498 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -2584,11 +2641,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2588 "util/configparser.c" /* yacc.c:1646 */ +#line 2645 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 490 "util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 507 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2596,11 +2653,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2600 "util/configparser.c" /* yacc.c:1646 */ +#line 2657 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 499 "util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 516 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2608,11 +2665,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2612 "util/configparser.c" /* yacc.c:1646 */ +#line 2669 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 508 "util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 525 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2620,11 +2677,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2624 "util/configparser.c" /* yacc.c:1646 */ +#line 2681 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 517 "util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 534 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2632,11 +2689,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2636 "util/configparser.c" /* yacc.c:1646 */ +#line 2693 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 526 "util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 543 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2644,11 +2701,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2648 "util/configparser.c" /* yacc.c:1646 */ +#line 2705 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 535 "util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 552 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2656,11 +2713,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2660 "util/configparser.c" /* yacc.c:1646 */ +#line 2717 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 544 "util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 561 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2668,11 +2725,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2672 "util/configparser.c" /* yacc.c:1646 */ +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 553 "util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 570 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2680,11 +2737,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2684 "util/configparser.c" /* yacc.c:1646 */ +#line 2741 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 562 "util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 579 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2692,11 +2749,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2696 "util/configparser.c" /* yacc.c:1646 */ +#line 2753 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 571 "util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 588 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2704,11 +2761,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2708 "util/configparser.c" /* yacc.c:1646 */ +#line 2765 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 580 "util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 597 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2716,11 +2773,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2720 "util/configparser.c" /* yacc.c:1646 */ +#line 2777 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 589 "util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 606 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2728,31 +2785,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" /* yacc.c:1646 */ +#line 2789 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 598 "util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 615 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 2742 "util/configparser.c" /* yacc.c:1646 */ +#line 2799 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 605 "util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 622 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 2752 "util/configparser.c" /* yacc.c:1646 */ +#line 2809 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 612 "util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 629 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2760,11 +2817,11 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2764 "util/configparser.c" /* yacc.c:1646 */ +#line 2821 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 621 "util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 638 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2772,11 +2829,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2776 "util/configparser.c" /* yacc.c:1646 */ +#line 2833 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 630 "util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 647 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2784,11 +2841,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2788 "util/configparser.c" /* yacc.c:1646 */ +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 639 "util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 656 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2801,11 +2858,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2805 "util/configparser.c" /* yacc.c:1646 */ +#line 2862 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 653 "util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 670 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2813,11 +2870,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2817 "util/configparser.c" /* yacc.c:1646 */ +#line 2874 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 662 "util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 679 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2825,11 +2882,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2829 "util/configparser.c" /* yacc.c:1646 */ +#line 2886 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 671 "util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 688 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2837,31 +2894,31 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2841 "util/configparser.c" /* yacc.c:1646 */ +#line 2898 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 680 "util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 697 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 2851 "util/configparser.c" /* yacc.c:1646 */ +#line 2908 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 687 "util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 704 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 2861 "util/configparser.c" /* yacc.c:1646 */ +#line 2918 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 694 "util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 711 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -2886,115 +2943,129 @@ yyreduce: } } } -#line 2890 "util/configparser.c" /* yacc.c:1646 */ +#line 2947 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 720 "util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 737 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 2901 "util/configparser.c" /* yacc.c:1646 */ +#line 2958 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 728 "util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 745 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 2911 "util/configparser.c" /* yacc.c:1646 */ +#line 2968 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 735 "util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 752 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2921 "util/configparser.c" /* yacc.c:1646 */ +#line 2978 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 742 "util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 759 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 2931 "util/configparser.c" /* yacc.c:1646 */ +#line 2988 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 749 "util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 766 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2941 "util/configparser.c" /* yacc.c:1646 */ +#line 2998 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 756 "util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 773 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2952 "util/configparser.c" /* yacc.c:1646 */ +#line 3009 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 764 "util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 781 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2963 "util/configparser.c" /* yacc.c:1646 */ +#line 3020 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 772 "util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 789 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2974 "util/configparser.c" /* yacc.c:1646 */ +#line 3031 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 780 "util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 797 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2984 "util/configparser.c" /* yacc.c:1646 */ +#line 3041 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 787 "util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 804 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->trust_anchor_signaling = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 3055 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 255: +#line 815 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2994 "util/configparser.c" /* yacc.c:1646 */ +#line 3065 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 794 "util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 822 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3002,11 +3073,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3006 "util/configparser.c" /* yacc.c:1646 */ +#line 3077 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 803 "util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 831 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3014,11 +3085,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3018 "util/configparser.c" /* yacc.c:1646 */ +#line 3089 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 812 "util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 840 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3026,53 +3097,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3030 "util/configparser.c" /* yacc.c:1646 */ +#line 3101 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 821 "util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 849 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3040 "util/configparser.c" /* yacc.c:1646 */ +#line 3111 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 828 "util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 856 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3050 "util/configparser.c" /* yacc.c:1646 */ +#line 3121 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 835 "util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 863 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" /* yacc.c:1646 */ +#line 3132 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 843 "util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 871 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3072 "util/configparser.c" /* yacc.c:1646 */ +#line 3143 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 851 "util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 879 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3081,11 +3152,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3085 "util/configparser.c" /* yacc.c:1646 */ +#line 3156 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 861 "util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 889 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3094,11 +3165,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3098 "util/configparser.c" /* yacc.c:1646 */ +#line 3169 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 871 "util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 899 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3107,11 +3178,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3111 "util/configparser.c" /* yacc.c:1646 */ +#line 3182 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 881 "util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 909 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3123,11 +3194,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" /* yacc.c:1646 */ +#line 3198 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 894 "util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 922 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3137,22 +3208,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3141 "util/configparser.c" /* yacc.c:1646 */ +#line 3212 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 905 "util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 933 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3152 "util/configparser.c" /* yacc.c:1646 */ +#line 3223 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 913 "util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 941 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3164,11 +3235,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3168 "util/configparser.c" /* yacc.c:1646 */ +#line 3239 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 926 "util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 954 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3176,11 +3247,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3180 "util/configparser.c" /* yacc.c:1646 */ +#line 3251 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 935 "util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 963 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3188,11 +3259,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3192 "util/configparser.c" /* yacc.c:1646 */ +#line 3263 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 944 "util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 972 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3200,11 +3271,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3204 "util/configparser.c" /* yacc.c:1646 */ +#line 3275 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 953 "util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 981 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3213,11 +3284,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3217 "util/configparser.c" /* yacc.c:1646 */ +#line 3288 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 963 "util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 991 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3226,22 +3297,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" /* yacc.c:1646 */ +#line 3301 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 973 "util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 1001 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3241 "util/configparser.c" /* yacc.c:1646 */ +#line 3312 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 981 "util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 1009 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3253,11 +3324,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3257 "util/configparser.c" /* yacc.c:1646 */ +#line 3328 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 994 "util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1022 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3265,22 +3336,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3269 "util/configparser.c" /* yacc.c:1646 */ +#line 3340 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 1003 "util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1031 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3280 "util/configparser.c" /* yacc.c:1646 */ +#line 3351 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 1011 "util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1039 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3288,22 +3359,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3292 "util/configparser.c" /* yacc.c:1646 */ +#line 3363 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 1020 "util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1048 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3374 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 1028 "util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1056 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3315,11 +3386,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3319 "util/configparser.c" /* yacc.c:1646 */ +#line 3390 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 1041 "util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1069 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3327,21 +3398,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3331 "util/configparser.c" /* yacc.c:1646 */ +#line 3402 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 1050 "util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1078 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3341 "util/configparser.c" /* yacc.c:1646 */ +#line 3412 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 1057 "util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 1085 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3350,11 +3421,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" /* yacc.c:1646 */ +#line 3425 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 1067 "util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 1095 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3363,11 +3434,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3367 "util/configparser.c" /* yacc.c:1646 */ +#line 3438 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1077 "util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 1105 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3376,11 +3447,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3380 "util/configparser.c" /* yacc.c:1646 */ +#line 3451 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1087 "util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1115 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3389,11 +3460,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3393 "util/configparser.c" /* yacc.c:1646 */ +#line 3464 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1097 "util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1125 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3473,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" /* yacc.c:1646 */ +#line 3477 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1107 "util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1135 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3415,11 +3486,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3419 "util/configparser.c" /* yacc.c:1646 */ +#line 3490 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1117 "util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1145 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3428,11 +3499,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3432 "util/configparser.c" /* yacc.c:1646 */ +#line 3503 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1127 "util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1155 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3441,41 +3512,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3445 "util/configparser.c" /* yacc.c:1646 */ +#line 3516 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1137 "util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1165 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3455 "util/configparser.c" /* yacc.c:1646 */ +#line 3526 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1144 "util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1172 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3465 "util/configparser.c" /* yacc.c:1646 */ +#line 3536 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1151 "util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1179 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3475 "util/configparser.c" /* yacc.c:1646 */ +#line 3546 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1158 "util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1186 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3483,11 +3554,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3487 "util/configparser.c" /* yacc.c:1646 */ +#line 3558 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1167 "util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1195 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3495,11 +3566,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3499 "util/configparser.c" /* yacc.c:1646 */ +#line 3570 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1176 "util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1204 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3507,21 +3578,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3511 "util/configparser.c" /* yacc.c:1646 */ +#line 3582 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1185 "util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1213 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3521 "util/configparser.c" /* yacc.c:1646 */ +#line 3592 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1192 "util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1220 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3530,11 +3601,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3534 "util/configparser.c" /* yacc.c:1646 */ +#line 3605 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1202 "util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1230 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -3550,21 +3621,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3554 "util/configparser.c" /* yacc.c:1646 */ +#line 3625 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1219 "util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1247 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 3564 "util/configparser.c" /* yacc.c:1646 */ +#line 3635 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1226 "util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1254 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3581,11 +3652,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3585 "util/configparser.c" /* yacc.c:1646 */ +#line 3656 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1244 "util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1272 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3597,11 +3668,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3601 "util/configparser.c" /* yacc.c:1646 */ +#line 3672 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1257 "util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1285 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3613,11 +3684,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3617 "util/configparser.c" /* yacc.c:1646 */ +#line 3688 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1270 "util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1298 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3625,11 +3696,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3629 "util/configparser.c" /* yacc.c:1646 */ +#line 3700 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1279 "util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1307 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3637,11 +3708,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3641 "util/configparser.c" /* yacc.c:1646 */ +#line 3712 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1288 "util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1316 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3649,11 +3720,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3653 "util/configparser.c" /* yacc.c:1646 */ +#line 3724 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1297 "util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1325 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3661,11 +3732,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3665 "util/configparser.c" /* yacc.c:1646 */ +#line 3736 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1306 "util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1334 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3674,11 +3745,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3678 "util/configparser.c" /* yacc.c:1646 */ +#line 3749 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1316 "util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1344 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3687,11 +3758,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3691 "util/configparser.c" /* yacc.c:1646 */ +#line 3762 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1326 "util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1354 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3699,11 +3770,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3703 "util/configparser.c" /* yacc.c:1646 */ +#line 3774 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1335 "util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1363 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3711,11 +3782,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3715 "util/configparser.c" /* yacc.c:1646 */ +#line 3786 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1344 "util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1372 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3727,11 +3798,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3731 "util/configparser.c" /* yacc.c:1646 */ +#line 3802 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1357 "util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1385 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3743,11 +3814,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3747 "util/configparser.c" /* yacc.c:1646 */ +#line 3818 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1370 "util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1398 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3755,21 +3826,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3759 "util/configparser.c" /* yacc.c:1646 */ +#line 3830 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1379 "util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1407 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 3769 "util/configparser.c" /* yacc.c:1646 */ +#line 3840 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1386 "util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1414 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3777,11 +3848,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3781 "util/configparser.c" /* yacc.c:1646 */ +#line 3852 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1395 "util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1423 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3789,11 +3860,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3793 "util/configparser.c" /* yacc.c:1646 */ +#line 3864 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1404 "util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1432 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3801,11 +3872,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3805 "util/configparser.c" /* yacc.c:1646 */ +#line 3876 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1413 "util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1441 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3814,22 +3885,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3818 "util/configparser.c" /* yacc.c:1646 */ +#line 3889 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1422 "util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1450 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3829 "util/configparser.c" /* yacc.c:1646 */ +#line 3900 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1430 "util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1458 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3841,22 +3912,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3845 "util/configparser.c" /* yacc.c:1646 */ +#line 3916 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1443 "util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1471 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3856 "util/configparser.c" /* yacc.c:1646 */ +#line 3927 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1451 "util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1479 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -3883,21 +3954,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 3887 "util/configparser.c" /* yacc.c:1646 */ +#line 3958 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1479 "util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1507 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 3897 "util/configparser.c" /* yacc.c:1646 */ +#line 3968 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1486 "util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1514 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -3911,11 +3982,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 3915 "util/configparser.c" /* yacc.c:1646 */ +#line 3986 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1501 "util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1529 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3924,11 +3995,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3928 "util/configparser.c" /* yacc.c:1646 */ +#line 3999 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1511 "util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1539 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3937,31 +4008,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3941 "util/configparser.c" /* yacc.c:1646 */ +#line 4012 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1521 "util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1549 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3951 "util/configparser.c" /* yacc.c:1646 */ +#line 4022 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1528 "util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1556 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 3961 "util/configparser.c" /* yacc.c:1646 */ +#line 4032 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1535 "util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1563 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3969,11 +4040,11 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3973 "util/configparser.c" /* yacc.c:1646 */ +#line 4044 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1544 "util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1572 "util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -3986,11 +4057,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3990 "util/configparser.c" /* yacc.c:1646 */ +#line 4061 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1558 "util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1586 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4008,11 +4079,11 @@ yyreduce: } } } -#line 4012 "util/configparser.c" /* yacc.c:1646 */ +#line 4083 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1577 "util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1605 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4030,11 +4101,11 @@ yyreduce: } } } -#line 4034 "util/configparser.c" /* yacc.c:1646 */ +#line 4105 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1596 "util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1624 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4045,11 +4116,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4049 "util/configparser.c" /* yacc.c:1646 */ +#line 4120 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1608 "util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1636 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4060,11 +4131,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4064 "util/configparser.c" /* yacc.c:1646 */ +#line 4135 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1620 "util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1648 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4075,11 +4146,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4079 "util/configparser.c" /* yacc.c:1646 */ +#line 4150 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1632 "util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1660 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4089,11 +4160,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4093 "util/configparser.c" /* yacc.c:1646 */ +#line 4164 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1643 "util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1671 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4111,11 +4182,11 @@ yyreduce: } } } -#line 4115 "util/configparser.c" /* yacc.c:1646 */ +#line 4186 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1662 "util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1690 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4123,11 +4194,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4127 "util/configparser.c" /* yacc.c:1646 */ +#line 4198 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1672 "util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1700 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4135,33 +4206,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4139 "util/configparser.c" /* yacc.c:1646 */ +#line 4210 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1681 "util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1709 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4150 "util/configparser.c" /* yacc.c:1646 */ +#line 4221 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1689 "util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1717 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4161 "util/configparser.c" /* yacc.c:1646 */ +#line 4232 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1697 "util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1725 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4173,11 +4244,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4177 "util/configparser.c" /* yacc.c:1646 */ +#line 4248 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1710 "util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1738 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4189,11 +4260,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4193 "util/configparser.c" /* yacc.c:1646 */ +#line 4264 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1723 "util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1751 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4205,11 +4276,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4209 "util/configparser.c" /* yacc.c:1646 */ +#line 4280 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1736 "util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1764 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4221,11 +4292,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4225 "util/configparser.c" /* yacc.c:1646 */ +#line 4296 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1749 "util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1777 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4233,11 +4304,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4237 "util/configparser.c" /* yacc.c:1646 */ +#line 4308 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1758 "util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1786 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4245,11 +4316,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4249 "util/configparser.c" /* yacc.c:1646 */ +#line 4320 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1767 "util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1795 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4258,11 +4329,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4262 "util/configparser.c" /* yacc.c:1646 */ +#line 4333 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1777 "util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1805 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4271,11 +4342,103 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4275 "util/configparser.c" /* yacc.c:1646 */ +#line 4346 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1787 "util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1815 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4362 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 353: +#line 1828 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4378 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 354: +#line 1841 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->ipsecmod_hook); + cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4392 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 355: +#line 1852 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4408 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 356: +#line 1865 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str))) + yyerror("out of memory"); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4422 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 357: +#line 1876 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } +#line 4438 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 358: +#line 1889 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4284,31 +4447,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4288 "util/configparser.c" /* yacc.c:1646 */ +#line 4451 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1797 "util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1899 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4298 "util/configparser.c" /* yacc.c:1646 */ +#line 4461 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1804 "util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1906 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4308 "util/configparser.c" /* yacc.c:1646 */ +#line 4471 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1811 "util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1913 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4316,11 +4479,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4320 "util/configparser.c" /* yacc.c:1646 */ +#line 4483 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1820 "util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1922 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4329,11 +4492,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4333 "util/configparser.c" /* yacc.c:1646 */ +#line 4496 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1830 "util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1932 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4342,11 +4505,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4346 "util/configparser.c" /* yacc.c:1646 */ +#line 4509 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1840 "util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1942 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4355,31 +4518,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4359 "util/configparser.c" /* yacc.c:1646 */ +#line 4522 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1850 "util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1952 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4369 "util/configparser.c" /* yacc.c:1646 */ +#line 4532 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1857 "util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1959 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4379 "util/configparser.c" /* yacc.c:1646 */ +#line 4542 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1864 "util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1966 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4387,11 +4550,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4391 "util/configparser.c" /* yacc.c:1646 */ +#line 4554 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1873 "util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1975 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4400,11 +4563,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4404 "util/configparser.c" /* yacc.c:1646 */ +#line 4567 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1883 "util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1985 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4413,11 +4576,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4417 "util/configparser.c" /* yacc.c:1646 */ +#line 4580 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1893 "util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1995 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4445,11 +4608,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4449 "util/configparser.c" /* yacc.c:1646 */ +#line 4612 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1922 "util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 2024 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4458,22 +4621,22 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4462 "util/configparser.c" /* yacc.c:1646 */ +#line 4625 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1932 "util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 2034 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4473 "util/configparser.c" /* yacc.c:1646 */ +#line 4636 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1940 "util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 2042 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { @@ -4481,11 +4644,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4485 "util/configparser.c" /* yacc.c:1646 */ +#line 4648 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1949 "util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 2051 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4499,11 +4662,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4503 "util/configparser.c" /* yacc.c:1646 */ +#line 4666 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1964 "util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 2066 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4511,19 +4674,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4515 "util/configparser.c" /* yacc.c:1646 */ +#line 4678 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1973 "util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 2075 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4523 "util/configparser.c" /* yacc.c:1646 */ +#line 4686 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1984 "util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 2086 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4532,11 +4695,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4536 "util/configparser.c" /* yacc.c:1646 */ +#line 4699 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1994 "util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 2096 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4544,21 +4707,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4548 "util/configparser.c" /* yacc.c:1646 */ +#line 4711 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 2003 "util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 2105 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4558 "util/configparser.c" /* yacc.c:1646 */ +#line 4721 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 2010 "util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 2112 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4567,122 +4730,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4571 "util/configparser.c" /* yacc.c:1646 */ +#line 4734 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 2020 "util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 2122 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 4581 "util/configparser.c" /* yacc.c:1646 */ +#line 4744 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 2027 "util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 2129 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 4591 "util/configparser.c" /* yacc.c:1646 */ +#line 4754 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 2034 "util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 2136 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 4601 "util/configparser.c" /* yacc.c:1646 */ +#line 4764 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 2041 "util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 2143 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 4611 "util/configparser.c" /* yacc.c:1646 */ +#line 4774 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 2048 "util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2150 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4619 "util/configparser.c" /* yacc.c:1646 */ +#line 4782 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 2065 "util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 2167 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4630 "util/configparser.c" /* yacc.c:1646 */ +#line 4793 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 2073 "util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2175 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 4640 "util/configparser.c" /* yacc.c:1646 */ +#line 4803 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 2080 "util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2182 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4651 "util/configparser.c" /* yacc.c:1646 */ +#line 4814 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 2088 "util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2190 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4662 "util/configparser.c" /* yacc.c:1646 */ +#line 4825 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 2096 "util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2198 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 4672 "util/configparser.c" /* yacc.c:1646 */ +#line 4835 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 2103 "util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2205 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 4682 "util/configparser.c" /* yacc.c:1646 */ +#line 4845 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 2110 "util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2212 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4690,11 +4853,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4694 "util/configparser.c" /* yacc.c:1646 */ +#line 4857 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 2119 "util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2221 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4702,11 +4865,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4706 "util/configparser.c" /* yacc.c:1646 */ +#line 4869 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 2128 "util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2230 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4714,11 +4877,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4718 "util/configparser.c" /* yacc.c:1646 */ +#line 4881 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 2137 "util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2239 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4726,11 +4889,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4730 "util/configparser.c" /* yacc.c:1646 */ +#line 4893 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 2146 "util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2248 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4738,11 +4901,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4742 "util/configparser.c" /* yacc.c:1646 */ +#line 4905 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 2155 "util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2257 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4750,29 +4913,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4754 "util/configparser.c" /* yacc.c:1646 */ +#line 4917 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 2164 "util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2266 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4762 "util/configparser.c" /* yacc.c:1646 */ +#line 4925 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2173 "util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2275 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 4772 "util/configparser.c" /* yacc.c:1646 */ +#line 4935 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2179 "util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2281 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4781,21 +4944,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4785 "util/configparser.c" /* yacc.c:1646 */ +#line 4948 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2189 "util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2291 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 4795 "util/configparser.c" /* yacc.c:1646 */ +#line 4958 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2196 "util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2298 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4803,42 +4966,43 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 4807 "util/configparser.c" /* yacc.c:1646 */ +#line 4970 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2205 "util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2307 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4818 "util/configparser.c" /* yacc.c:1646 */ +#line 4981 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2213 "util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2315 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 4827 "util/configparser.c" /* yacc.c:1646 */ +#line 4990 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2225 "util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2327 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); } -#line 4838 "util/configparser.c" /* yacc.c:1646 */ +#line 5002 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2234 "util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2337 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -4847,41 +5011,41 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4851 "util/configparser.c" /* yacc.c:1646 */ +#line 5015 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2244 "util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2347 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 4861 "util/configparser.c" /* yacc.c:1646 */ +#line 5025 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2251 "util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2354 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 4871 "util/configparser.c" /* yacc.c:1646 */ +#line 5035 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2258 "util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2361 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 4881 "util/configparser.c" /* yacc.c:1646 */ +#line 5045 "util/configparser.c" /* yacc.c:1646 */ break; -#line 4885 "util/configparser.c" /* yacc.c:1646 */ +#line 5049 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5109,7 +5273,7 @@ yyreturn: #endif return yyresult; } -#line 2264 "util/configparser.y" /* yacc.c:1906 */ +#line 2367 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 937754cfef8f..30373da46cdf 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -217,39 +217,47 @@ extern int yydebug; VAR_IP_RATELIMIT_FACTOR = 427, VAR_RATELIMIT_FACTOR = 428, VAR_SEND_CLIENT_SUBNET = 429, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 430, - VAR_CLIENT_SUBNET_OPCODE = 431, - VAR_MAX_CLIENT_SUBNET_IPV4 = 432, - VAR_MAX_CLIENT_SUBNET_IPV6 = 433, - VAR_CAPS_WHITELIST = 434, - VAR_CACHE_MAX_NEGATIVE_TTL = 435, - VAR_PERMIT_SMALL_HOLDDOWN = 436, - VAR_QNAME_MINIMISATION = 437, - VAR_QNAME_MINIMISATION_STRICT = 438, - VAR_IP_FREEBIND = 439, - VAR_DEFINE_TAG = 440, - VAR_LOCAL_ZONE_TAG = 441, - VAR_ACCESS_CONTROL_TAG = 442, - VAR_LOCAL_ZONE_OVERRIDE = 443, - VAR_ACCESS_CONTROL_TAG_ACTION = 444, - VAR_ACCESS_CONTROL_TAG_DATA = 445, - VAR_VIEW = 446, - VAR_ACCESS_CONTROL_VIEW = 447, - VAR_VIEW_FIRST = 448, - VAR_SERVE_EXPIRED = 449, - VAR_FAKE_DSA = 450, - VAR_FAKE_SHA1 = 451, - VAR_LOG_IDENTITY = 452, - VAR_HIDE_TRUSTANCHOR = 453, - VAR_USE_SYSTEMD = 454, - VAR_SHM_ENABLE = 455, - VAR_SHM_KEY = 456, - VAR_DNSCRYPT = 457, - VAR_DNSCRYPT_ENABLE = 458, - VAR_DNSCRYPT_PORT = 459, - VAR_DNSCRYPT_PROVIDER = 460, - VAR_DNSCRYPT_SECRET_KEY = 461, - VAR_DNSCRYPT_PROVIDER_CERT = 462 + VAR_CLIENT_SUBNET_ZONE = 430, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 431, + VAR_CLIENT_SUBNET_OPCODE = 432, + VAR_MAX_CLIENT_SUBNET_IPV4 = 433, + VAR_MAX_CLIENT_SUBNET_IPV6 = 434, + VAR_CAPS_WHITELIST = 435, + VAR_CACHE_MAX_NEGATIVE_TTL = 436, + VAR_PERMIT_SMALL_HOLDDOWN = 437, + VAR_QNAME_MINIMISATION = 438, + VAR_QNAME_MINIMISATION_STRICT = 439, + VAR_IP_FREEBIND = 440, + VAR_DEFINE_TAG = 441, + VAR_LOCAL_ZONE_TAG = 442, + VAR_ACCESS_CONTROL_TAG = 443, + VAR_LOCAL_ZONE_OVERRIDE = 444, + VAR_ACCESS_CONTROL_TAG_ACTION = 445, + VAR_ACCESS_CONTROL_TAG_DATA = 446, + VAR_VIEW = 447, + VAR_ACCESS_CONTROL_VIEW = 448, + VAR_VIEW_FIRST = 449, + VAR_SERVE_EXPIRED = 450, + VAR_FAKE_DSA = 451, + VAR_FAKE_SHA1 = 452, + VAR_LOG_IDENTITY = 453, + VAR_HIDE_TRUSTANCHOR = 454, + VAR_TRUST_ANCHOR_SIGNALING = 455, + VAR_USE_SYSTEMD = 456, + VAR_SHM_ENABLE = 457, + VAR_SHM_KEY = 458, + VAR_DNSCRYPT = 459, + VAR_DNSCRYPT_ENABLE = 460, + VAR_DNSCRYPT_PORT = 461, + VAR_DNSCRYPT_PROVIDER = 462, + VAR_DNSCRYPT_SECRET_KEY = 463, + VAR_DNSCRYPT_PROVIDER_CERT = 464, + VAR_IPSECMOD_ENABLED = 465, + VAR_IPSECMOD_HOOK = 466, + VAR_IPSECMOD_IGNORE_BOGUS = 467, + VAR_IPSECMOD_MAX_TTL = 468, + VAR_IPSECMOD_WHITELIST = 469, + VAR_IPSECMOD_STRICT = 470 }; #endif /* Tokens. */ @@ -425,39 +433,47 @@ extern int yydebug; #define VAR_IP_RATELIMIT_FACTOR 427 #define VAR_RATELIMIT_FACTOR 428 #define VAR_SEND_CLIENT_SUBNET 429 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 430 -#define VAR_CLIENT_SUBNET_OPCODE 431 -#define VAR_MAX_CLIENT_SUBNET_IPV4 432 -#define VAR_MAX_CLIENT_SUBNET_IPV6 433 -#define VAR_CAPS_WHITELIST 434 -#define VAR_CACHE_MAX_NEGATIVE_TTL 435 -#define VAR_PERMIT_SMALL_HOLDDOWN 436 -#define VAR_QNAME_MINIMISATION 437 -#define VAR_QNAME_MINIMISATION_STRICT 438 -#define VAR_IP_FREEBIND 439 -#define VAR_DEFINE_TAG 440 -#define VAR_LOCAL_ZONE_TAG 441 -#define VAR_ACCESS_CONTROL_TAG 442 -#define VAR_LOCAL_ZONE_OVERRIDE 443 -#define VAR_ACCESS_CONTROL_TAG_ACTION 444 -#define VAR_ACCESS_CONTROL_TAG_DATA 445 -#define VAR_VIEW 446 -#define VAR_ACCESS_CONTROL_VIEW 447 -#define VAR_VIEW_FIRST 448 -#define VAR_SERVE_EXPIRED 449 -#define VAR_FAKE_DSA 450 -#define VAR_FAKE_SHA1 451 -#define VAR_LOG_IDENTITY 452 -#define VAR_HIDE_TRUSTANCHOR 453 -#define VAR_USE_SYSTEMD 454 -#define VAR_SHM_ENABLE 455 -#define VAR_SHM_KEY 456 -#define VAR_DNSCRYPT 457 -#define VAR_DNSCRYPT_ENABLE 458 -#define VAR_DNSCRYPT_PORT 459 -#define VAR_DNSCRYPT_PROVIDER 460 -#define VAR_DNSCRYPT_SECRET_KEY 461 -#define VAR_DNSCRYPT_PROVIDER_CERT 462 +#define VAR_CLIENT_SUBNET_ZONE 430 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 431 +#define VAR_CLIENT_SUBNET_OPCODE 432 +#define VAR_MAX_CLIENT_SUBNET_IPV4 433 +#define VAR_MAX_CLIENT_SUBNET_IPV6 434 +#define VAR_CAPS_WHITELIST 435 +#define VAR_CACHE_MAX_NEGATIVE_TTL 436 +#define VAR_PERMIT_SMALL_HOLDDOWN 437 +#define VAR_QNAME_MINIMISATION 438 +#define VAR_QNAME_MINIMISATION_STRICT 439 +#define VAR_IP_FREEBIND 440 +#define VAR_DEFINE_TAG 441 +#define VAR_LOCAL_ZONE_TAG 442 +#define VAR_ACCESS_CONTROL_TAG 443 +#define VAR_LOCAL_ZONE_OVERRIDE 444 +#define VAR_ACCESS_CONTROL_TAG_ACTION 445 +#define VAR_ACCESS_CONTROL_TAG_DATA 446 +#define VAR_VIEW 447 +#define VAR_ACCESS_CONTROL_VIEW 448 +#define VAR_VIEW_FIRST 449 +#define VAR_SERVE_EXPIRED 450 +#define VAR_FAKE_DSA 451 +#define VAR_FAKE_SHA1 452 +#define VAR_LOG_IDENTITY 453 +#define VAR_HIDE_TRUSTANCHOR 454 +#define VAR_TRUST_ANCHOR_SIGNALING 455 +#define VAR_USE_SYSTEMD 456 +#define VAR_SHM_ENABLE 457 +#define VAR_SHM_KEY 458 +#define VAR_DNSCRYPT 459 +#define VAR_DNSCRYPT_ENABLE 460 +#define VAR_DNSCRYPT_PORT 461 +#define VAR_DNSCRYPT_PROVIDER 462 +#define VAR_DNSCRYPT_SECRET_KEY 463 +#define VAR_DNSCRYPT_PROVIDER_CERT 464 +#define VAR_IPSECMOD_ENABLED 465 +#define VAR_IPSECMOD_HOOK 466 +#define VAR_IPSECMOD_IGNORE_BOGUS 467 +#define VAR_IPSECMOD_MAX_TTL 468 +#define VAR_IPSECMOD_WHITELIST 469 +#define VAR_IPSECMOD_STRICT 470 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -468,7 +484,7 @@ union YYSTYPE char* str; -#line 472 "util/configparser.h" /* yacc.c:1909 */ +#line 488 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 4a04367f4d41..7c8161442ccd 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -131,8 +131,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR -%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ALWAYS_FORWARD -%token VAR_CLIENT_SUBNET_OPCODE +%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE +%token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND @@ -140,10 +140,12 @@ extern struct config_parser_state* cfg_parser; %token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA VAR_FAKE_SHA1 -%token VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR +%token VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR VAR_TRUST_ANCHOR_SIGNALING %token VAR_USE_SYSTEMD VAR_SHM_ENABLE VAR_SHM_KEY %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT +%token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS +%token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -215,7 +217,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_ratelimit_for_domain | server_ratelimit_below_domain | server_ratelimit_factor | server_ip_ratelimit_factor | server_send_client_subnet | - server_client_subnet_always_forward | + server_client_subnet_zone | server_client_subnet_always_forward | server_client_subnet_opcode | server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | server_caps_whitelist | server_cache_max_negative_ttl | @@ -228,7 +230,10 @@ content_server: server_num_threads | server_verbosity | server_port | server_fake_dsa | server_log_identity | server_use_systemd | server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key | server_fake_sha1 | - server_hide_trustanchor + server_hide_trustanchor | server_trust_anchor_signaling | + server_ipsecmod_enabled | server_ipsecmod_hook | + server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | + server_ipsecmod_whitelist | server_ipsecmod_strict ; stubstart: VAR_STUB_ZONE { @@ -370,6 +375,18 @@ server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG #endif } ; +server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_client_subnet_zone:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, + $2)) + fatal_exit("out of memory adding client-subnet-zone"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + } + ; server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG { @@ -783,6 +800,17 @@ server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG yyerror("out of memory"); } ; +server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG + { + OUTYY(("P(server_trust_anchor_signaling:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->trust_anchor_signaling = + (strcmp($2, "yes")==0); + free($2); + } + ; server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG { OUTYY(("P(server_domain_insecure:%s)\n", $2)); @@ -1783,6 +1811,80 @@ server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG free($2); } ; +server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_enabled:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_enabled = (strcmp($2, "yes")==0); + free($2); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; +server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp($2, "yes")==0); + free($2); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; +server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_hook:%s)\n", $2)); + free(cfg_parser->cfg->ipsecmod_hook); + cfg_parser->cfg->ipsecmod_hook = $2; + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; +server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ipsecmod_max_ttl = atoi($2); + free($2); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; +server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_whitelist:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, $2)) + yyerror("out of memory"); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; +server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG + { + #ifdef USE_IPSECMOD + OUTYY(("P(server_ipsecmod_strict:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ipsecmod_strict = (strcmp($2, "yes")==0); + free($2); + #else + OUTYY(("P(Compiled without IPsec module, ignoring)\n")); + #endif + } + ; stub_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); @@ -2227,6 +2329,7 @@ dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp($2, "yes")==0); + free($2); } ; diff --git a/util/data/msgencode.c b/util/data/msgencode.c index 1f72a03b8c64..aab7f5dfecba 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -647,6 +647,8 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep, sldns_buffer_clear(buffer); if(udpsize < sldns_buffer_limit(buffer)) sldns_buffer_set_limit(buffer, udpsize); + else if(sldns_buffer_limit(buffer) < udpsize) + udpsize = sldns_buffer_limit(buffer); if(sldns_buffer_remaining(buffer) < LDNS_HEADER_SIZE) return 0; @@ -810,7 +812,7 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, struct edns_data* edns, int dnssec, int secure) { uint16_t flags; - int attach_edns = 1; + unsigned int attach_edns = 0; if(!cached || rep->authoritative) { /* original flags, copy RD and CD bits from query. */ @@ -833,12 +835,15 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, log_assert(flags & BIT_QR); /* QR bit must be on in our replies */ if(udpsize < LDNS_HEADER_SIZE) return 0; + if(sldns_buffer_capacity(pkt) < udpsize) + udpsize = sldns_buffer_capacity(pkt); if(udpsize < LDNS_HEADER_SIZE + calc_edns_field_size(edns)) { /* packet too small to contain edns, omit it. */ attach_edns = 0; } else { /* reserve space for edns record */ - udpsize -= calc_edns_field_size(edns); + attach_edns = (unsigned int)calc_edns_field_size(edns); + udpsize -= attach_edns; } if(!reply_info_encode(qinf, rep, id, flags, pkt, timenow, region, @@ -846,7 +851,8 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, log_err("reply encode: out of memory"); return 0; } - if(attach_edns) + if(attach_edns && sldns_buffer_capacity(pkt) >= + sldns_buffer_limit(pkt)+attach_edns) attach_edns_record(pkt, edns); return 1; } diff --git a/util/data/msgparse.c b/util/data/msgparse.c index 5381500e1523..288720068b10 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -1018,7 +1018,7 @@ parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, edns->opt_list = NULL; /* take the options */ - rdata_len = found->rr_first->size; + rdata_len = found->rr_first->size-2; rdata_ptr = found->rr_first->ttl_data+6; if(!parse_edns_options(rdata_ptr, rdata_len, edns, region)) return 0; diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 03244a123d69..2797d1fe8449 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -49,6 +49,7 @@ #include "services/outside_network.h" #include "services/mesh.h" #include "services/localzone.h" +#include "services/authzone.h" #include "services/cache/infra.h" #include "services/cache/rrset.h" #include "services/view.h" @@ -83,6 +84,9 @@ #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif +#ifdef USE_IPSECMOD +#include "ipsecmod/ipsecmod.h" +#endif #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif @@ -209,6 +213,8 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &probetree_cmp) return 1; else if(fptr == &replay_var_compare) return 1; else if(fptr == &view_cmp) return 1; + else if(fptr == &auth_zone_cmp) return 1; + else if(fptr == &auth_data_cmp) return 1; return 0; } @@ -307,6 +313,16 @@ fptr_whitelist_modenv_attach_sub(int (*fptr)( } int +fptr_whitelist_modenv_add_sub(int (*fptr)( + struct module_qstate* qstate, struct query_info* qinfo, + uint16_t qflags, int prime, int valrec, struct module_qstate** newq, + struct mesh_state** sub)) +{ + if(fptr == &mesh_add_sub) return 1; + return 0; +} + +int fptr_whitelist_modenv_kill_sub(void (*fptr)(struct module_qstate* newq)) { if(fptr == &mesh_state_delete) return 1; @@ -335,6 +351,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_init) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_init) return 1; #endif @@ -354,6 +373,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_deinit) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_deinit) return 1; #endif @@ -374,6 +396,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_operate) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_operate) return 1; #endif @@ -394,6 +419,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)( #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_inform_super) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_inform_super) return 1; #endif @@ -414,6 +442,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_clear) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_clear) return 1; #endif @@ -433,6 +464,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; #endif +#ifdef USE_IPSECMOD + else if(fptr == &ipsecmod_get_mem) return 1; +#endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_get_mem) return 1; #endif diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h index 653f8f0e75d4..39e3f2d7f21b 100644 --- a/util/fptr_wlist.h +++ b/util/fptr_wlist.h @@ -234,6 +234,15 @@ int fptr_whitelist_modenv_attach_sub(int (*fptr)( uint16_t qflags, int prime, int valrec, struct module_qstate** newq)); /** + * Check function pointer whitelist for module_env add_sub callback values. + * + * @param fptr: function pointer to check. + * @return false if not in whitelist. + */ +int fptr_whitelist_modenv_add_sub(int (*fptr)(struct module_qstate* qstate, + struct query_info* qinfo, uint16_t qflags, int prime, int valrec, + struct module_qstate** newq, struct mesh_state** sub)); +/** * Check function pointer whitelist for module_env kill_sub callback values. * * @param fptr: function pointer to check. diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 2555b2591525..dba3e62270c6 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -29,7 +29,6 @@ 44, 45, 46, -47, 48, 49, 50, @@ -41,7 +40,6 @@ 57, 58, 59, -61, 62, 63, 64, @@ -4575,6 +4573,7 @@ 7014, 7015, 7016, +7017, 7019, 7020, 7021, @@ -4855,6 +4854,7 @@ 8793, 8800, 8804, +8805, 8808, 8873, 8880, @@ -5463,3 +5463,4 @@ 48556, 48619, 48653, +49001, diff --git a/util/log.c b/util/log.c index 439541a7ce4a..c14b45834add 100644 --- a/util/log.c +++ b/util/log.c @@ -103,8 +103,12 @@ log_init(const char* filename, int use_syslog, const char* chrootdir) use_syslog?"syslog":(filename&&filename[0]?filename:"stderr")); lock_quick_lock(&log_lock); } - if(logfile && logfile != stderr) - fclose(logfile); + if(logfile && logfile != stderr) { + FILE* cl = logfile; + logfile = NULL; /* set to NULL before it is closed, so that + other threads have a valid logfile or NULL */ + fclose(cl); + } #ifdef HAVE_SYSLOG_H if(logging_to_syslog) { closelog(); diff --git a/util/module.h b/util/module.h index 82b50ccd7d06..6e75539d9169 100644 --- a/util/module.h +++ b/util/module.h @@ -383,6 +383,37 @@ struct module_env { int valrec, struct module_qstate** newq); /** + * Add detached query. + * Creates it if it does not exist already. + * Does not make super/sub references. + * Performs a cycle detection - for double check - and fails if there is + * one. + * Updates stat items in mesh_area structure. + * Pass if it is priming query or not. + * return: + * o if error (malloc) happened. + * o need to initialise the new state (module init; it is a new state). + * so that the next run of the query with this module is successful. + * o no init needed, attachment successful. + * o added subquery, created if it did not exist already. + * + * @param qstate: the state to find mesh state, and that wants to receive + * the results from the new subquery. + * @param qinfo: what to query for (copied). + * @param qflags: what flags to use (RD / CD flag or not). + * @param prime: if it is a (stub) priming query. + * @param valrec: if it is a validation recursion query (lookup of key, DS). + * @param newq: If the new subquery needs initialisation, it is returned, + * otherwise NULL is returned. + * @param sub: The added mesh state, created if it did not exist already. + * @return: false on error, true if success (and init may be needed). + */ + int (*add_sub)(struct module_qstate* qstate, + struct query_info* qinfo, uint16_t qflags, int prime, + int valrec, struct module_qstate** newq, + struct mesh_state** sub); + + /** * Kill newly attached sub. If attach_sub returns newq for * initialisation, but that fails, then this routine will cleanup and * delete the fresly created sub. diff --git a/util/netevent.c b/util/netevent.c index 2084cea3ec01..6990cdb36f36 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -666,7 +666,7 @@ comm_point_udp_callback(int fd, short event, void* arg) struct comm_reply rep; ssize_t rcv; int i; - struct sldns_buffer *buffer; + struct sldns_buffer *buffer; rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); @@ -704,9 +704,9 @@ comm_point_udp_callback(int fd, short event, void* arg) if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ #ifdef USE_DNSCRYPT - buffer = rep.c->dnscrypt_buffer; + buffer = rep.c->dnscrypt_buffer; #else - buffer = rep.c->buffer; + buffer = rep.c->buffer; #endif (void)comm_point_send_udp_msg(rep.c, buffer, (struct sockaddr*)&rep.addr, rep.addrlen); @@ -725,8 +725,8 @@ setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) log_assert(c->fd == -1); sldns_buffer_clear(c->buffer); #ifdef USE_DNSCRYPT - if (c->dnscrypt) - sldns_buffer_clear(c->dnscrypt_buffer); + if (c->dnscrypt) + sldns_buffer_clear(c->dnscrypt_buffer); #endif c->tcp_is_reading = 1; c->tcp_byte_count = 0; @@ -1407,12 +1407,34 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if(errno == EINTR || errno == EAGAIN) return 1; /* Not handling EISCONN here as shouldn't ever hit that case.*/ - if(errno != 0 && verbosity < 2) + if(errno != EPIPE && errno != 0 && verbosity < 2) return 0; /* silence lots of chatter in the logs */ - else if(errno != 0) + if(errno != EPIPE && errno != 0) { log_err_addr("tcp sendmsg", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); - return 0; + return 0; + } + /* fallthrough to nonFASTOPEN + * (MSG_FASTOPEN on Linux 3 produces EPIPE) + * we need to perform connect() */ + if(connect(fd, (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen) == -1) { +#ifdef EINPROGRESS + if(errno == EINPROGRESS) + return 1; /* wait until connect done*/ +#endif +#ifdef USE_WINSOCK + if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEWOULDBLOCK) + return 1; /* wait until connect done*/ +#endif + if(tcp_connect_errno_needs_log( + (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen)) { + log_err_addr("outgoing tcp: connect after EPIPE for fastopen", + strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); + } + return 0; + } + } else { c->tcp_byte_count += r; if(c->tcp_byte_count < sizeof(uint16_t)) @@ -1525,13 +1547,13 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) if(c->tcp_parent) { c->dnscrypt = c->tcp_parent->dnscrypt; } - if(c->dnscrypt && c->dnscrypt_buffer == c->buffer) { - c->dnscrypt_buffer = sldns_buffer_new(sldns_buffer_capacity(c->buffer)); - if(!c->dnscrypt_buffer) { - log_err("Could not allocate dnscrypt buffer"); - return; - } - } + if(c->dnscrypt && c->dnscrypt_buffer == c->buffer) { + c->dnscrypt_buffer = sldns_buffer_new(sldns_buffer_capacity(c->buffer)); + if(!c->dnscrypt_buffer) { + log_err("Could not allocate dnscrypt buffer"); + return; + } + } #endif if(event&UB_EV_READ) { @@ -1691,8 +1713,8 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, c->tcp_do_close = 0; c->do_not_close = 0; #ifdef USE_DNSCRYPT - c->dnscrypt = 0; - c->dnscrypt_buffer = buffer; + c->dnscrypt = 0; + c->dnscrypt_buffer = buffer; #endif c->inuse = 0; c->tcp_do_toggle_rw = 0; @@ -1766,10 +1788,10 @@ comm_point_create_tcp_handler(struct comm_base *base, c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT - c->dnscrypt = 0; - // We don't know just yet if this is a dnscrypt channel. Allocation - // will be done when handling the callback. - c->dnscrypt_buffer = c->buffer; + c->dnscrypt = 0; + /* We don't know just yet if this is a dnscrypt channel. Allocation + * will be done when handling the callback. */ + c->dnscrypt_buffer = c->buffer; #endif c->repinfo.c = c; c->callback = callback; @@ -2098,11 +2120,11 @@ comm_point_delete(struct comm_point* c) if(c->type == comm_tcp || c->type == comm_local) { sldns_buffer_free(c->buffer); #ifdef USE_DNSCRYPT - if(c->dnscrypt && c->dnscrypt_buffer != c->buffer) { - sldns_buffer_free(c->dnscrypt_buffer); - } + if(c->dnscrypt && c->dnscrypt_buffer != c->buffer) { + sldns_buffer_free(c->dnscrypt_buffer); + } #endif - } + } ub_event_free(c->ev->ev); free(c->ev); free(c); @@ -2115,7 +2137,7 @@ comm_point_send_reply(struct comm_reply *repinfo) log_assert(repinfo && repinfo->c); #ifdef USE_DNSCRYPT buffer = repinfo->c->dnscrypt_buffer; - if(!dnsc_handle_uncurved_request(repinfo)) { + if(!dnsc_handle_uncurved_request(repinfo)) { return; } #else @@ -2239,12 +2261,12 @@ size_t comm_point_get_mem(struct comm_point* c) if(c->type == comm_tcp || c->type == comm_local) { s += sizeof(*c->buffer) + sldns_buffer_capacity(c->buffer); #ifdef USE_DNSCRYPT - s += sizeof(*c->dnscrypt_buffer); - if(c->buffer != c->dnscrypt_buffer) { - s += sldns_buffer_capacity(c->dnscrypt_buffer); - } + s += sizeof(*c->dnscrypt_buffer); + if(c->buffer != c->dnscrypt_buffer) { + s += sldns_buffer_capacity(c->dnscrypt_buffer); + } #endif - } + } if(c->type == comm_tcp_accept) { int i; for(i=0; i<c->max_tcp_count; i++) diff --git a/util/netevent.h b/util/netevent.h index cb8eb86b9f74..54740266d0a4 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -120,7 +120,7 @@ struct comm_reply { #ifdef USE_DNSCRYPT uint8_t client_nonce[crypto_box_HALF_NONCEBYTES]; uint8_t nmkey[crypto_box_BEFORENMBYTES]; - const KeyPair *keypair; + const dnsccert *dnsc_cert; int is_dnscrypted; #endif /** the return source interface data */ @@ -133,11 +133,11 @@ struct comm_reply { #elif defined(IP_RECVDSTADDR) struct in_addr v4addr; #endif - } + } /** variable with return source data */ pktinfo; - /** max udp size for udp packets */ - size_t max_udp_size; + /** max udp size for udp packets */ + size_t max_udp_size; }; /** @@ -248,7 +248,7 @@ struct comm_point { #endif #ifdef USE_DNSCRYPT - /** Is this a dnscrypt channel */ + /** Is this a dnscrypt channel */ int dnscrypt; /** encrypted buffer pointer. Either to perthread, or own buffer or NULL */ struct sldns_buffer* dnscrypt_buffer; diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index cab9aed560bd..bba2a8396333 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -65,17 +65,17 @@ #ifdef HAVE_SHMGET /** subtract timers and the values do not overflow or become negative */ static void -timeval_subtract(struct timeval* d, const struct timeval* end, +stat_timeval_subtract(long long *d_sec, long long *d_usec, const struct timeval* end, const struct timeval* start) { #ifndef S_SPLINT_S time_t end_usec = end->tv_usec; - d->tv_sec = end->tv_sec - start->tv_sec; + *d_sec = end->tv_sec - start->tv_sec; if(end_usec < start->tv_usec) { end_usec += 1000000; - d->tv_sec--; + (*d_sec)--; } - d->tv_usec = end_usec - start->tv_usec; + *d_usec = end_usec - start->tv_usec; #endif } #endif /* HAVE_SHMGET */ @@ -83,7 +83,7 @@ timeval_subtract(struct timeval* d, const struct timeval* end, int shm_main_init(struct daemon* daemon) { #ifdef HAVE_SHMGET - struct shm_stat_info *shm_stat; + struct ub_shm_stat_info *shm_stat; size_t shm_size; /* sanitize */ @@ -95,7 +95,7 @@ int shm_main_init(struct daemon* daemon) log_warn("shm-enable is yes but statistics-interval is 0"); /* Statistics to maintain the number of thread + total */ - shm_size = (sizeof(struct stats_info) * (daemon->num + 1)); + shm_size = (sizeof(struct ub_stats_info) * (daemon->num + 1)); /* Allocation of needed memory */ daemon->shm_info = (struct shm_main_info*)calloc(1, shm_size); @@ -121,7 +121,7 @@ int shm_main_init(struct daemon* daemon) shmctl(daemon->shm_info->id_arr, IPC_RMID, NULL); /* SHM: Create the segment */ - daemon->shm_info->id_ctl = shmget(daemon->shm_info->key, sizeof(struct shm_stat_info), IPC_CREAT | 0666); + daemon->shm_info->id_ctl = shmget(daemon->shm_info->key, sizeof(struct ub_shm_stat_info), IPC_CREAT | 0666); if (daemon->shm_info->id_ctl < 0) { @@ -148,7 +148,7 @@ int shm_main_init(struct daemon* daemon) } /* SHM: attach the segment */ - daemon->shm_info->ptr_ctl = (struct shm_stat_info*) + daemon->shm_info->ptr_ctl = (struct ub_shm_stat_info*) shmat(daemon->shm_info->id_ctl, NULL, 0); if(daemon->shm_info->ptr_ctl == (void *) -1) { log_err("SHM failed(ctl) cannot shmat(%d) %s", @@ -160,7 +160,7 @@ int shm_main_init(struct daemon* daemon) return 0; } - daemon->shm_info->ptr_arr = (struct stats_info*) + daemon->shm_info->ptr_arr = (struct ub_stats_info*) shmat(daemon->shm_info->id_arr, NULL, 0); if (daemon->shm_info->ptr_arr == (void *) -1) @@ -175,7 +175,7 @@ int shm_main_init(struct daemon* daemon) } /* Zero fill SHM to stand clean while is not filled by other events */ - memset(daemon->shm_info->ptr_ctl, 0, sizeof(struct shm_stat_info)); + memset(daemon->shm_info->ptr_ctl, 0, sizeof(struct ub_shm_stat_info)); memset(daemon->shm_info->ptr_arr, 0, shm_size); shm_stat = daemon->shm_info->ptr_ctl; @@ -218,10 +218,9 @@ void shm_main_shutdown(struct daemon* daemon) void shm_main_run(struct worker *worker) { #ifdef HAVE_SHMGET - struct shm_stat_info *shm_stat; - struct stats_info *stat_total; - struct stats_info *stat_info; - int modstack; + struct ub_shm_stat_info *shm_stat; + struct ub_stats_info *stat_total; + struct ub_stats_info *stat_info; int offset; verbose(VERB_DETAIL, "SHM run - worker [%d] - daemon [%p] - timenow(%u) - timeboot(%u)", @@ -238,40 +237,40 @@ void shm_main_run(struct worker *worker) if (worker->thread_num == 0) { /* Copy data to the current position */ - memset(stat_total, 0, sizeof(struct stats_info)); + memset(stat_total, 0, sizeof(struct ub_stats_info)); /* Point to data into SHM */ shm_stat = worker->daemon->shm_info->ptr_ctl; - shm_stat->time.now = *worker->env.now_tv; - - timeval_subtract(&shm_stat->time.up, &shm_stat->time.now, &worker->daemon->time_boot); - timeval_subtract(&shm_stat->time.elapsed, &shm_stat->time.now, &worker->daemon->time_last_stat); - - shm_stat->mem.msg = slabhash_get_mem(worker->env.msg_cache); - shm_stat->mem.rrset = slabhash_get_mem(&worker->env.rrset_cache->table); - shm_stat->mem.val = 0; - shm_stat->mem.iter = 0; - - modstack = modstack_find(&worker->env.mesh->mods, "validator"); - if(modstack != -1) { - fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem)); - shm_stat->mem.val = (*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack); - } - modstack = modstack_find(&worker->env.mesh->mods, "iterator"); - if(modstack != -1) { - fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem)); - shm_stat->mem.iter = (*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack); - } + shm_stat->time.now_sec = (long long)worker->env.now_tv->tv_sec; + shm_stat->time.now_usec = (long long)worker->env.now_tv->tv_usec; + + stat_timeval_subtract(&shm_stat->time.up_sec, &shm_stat->time.up_usec, worker->env.now_tv, &worker->daemon->time_boot); + stat_timeval_subtract(&shm_stat->time.elapsed_sec, &shm_stat->time.elapsed_usec, worker->env.now_tv, &worker->daemon->time_last_stat); + + shm_stat->mem.msg = (long long)slabhash_get_mem(worker->env.msg_cache); + shm_stat->mem.rrset = (long long)slabhash_get_mem(&worker->env.rrset_cache->table); + shm_stat->mem.val = (long long)mod_get_mem(&worker->env, + "validator"); + shm_stat->mem.iter = (long long)mod_get_mem(&worker->env, + "iterator"); + shm_stat->mem.respip = (long long)mod_get_mem(&worker->env, + "respip"); + /* subnet mem value is available in shm, also when not enabled, * to make the struct easier to memmap by other applications, * independent of the configuration of unbound */ shm_stat->mem.subnet = 0; #ifdef CLIENT_SUBNET - modstack = modstack_find(&worker->env.mesh->mods, "subnet"); - if(modstack != -1) { - fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem)); - shm_stat->mem.subnet = (*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack); - } + shm_stat->mem.subnet = (long long)mod_get_mem(&worker->env, + "subnet"); +#endif + /* ipsecmod mem value is available in shm, also when not enabled, + * to make the struct easier to memmap by other applications, + * independent of the configuration of unbound */ + shm_stat->mem.ipsecmod = 0; +#ifdef USE_IPSECMOD + shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env, + "ipsecmod"); #endif } diff --git a/util/shm_side/shm_main.h b/util/shm_side/shm_main.h index 8e4f4d051026..76c60e484860 100644 --- a/util/shm_side/shm_main.h +++ b/util/shm_side/shm_main.h @@ -44,26 +44,8 @@ struct daemon; struct worker; -/** Some global statistics that are not in struct stats_info, - * this struct is shared on a shm segment */ -struct shm_stat_info { - - int num_threads; - - struct { - struct timeval now; - struct timeval up; - struct timeval elapsed; - } time; - - struct { - size_t msg; - size_t rrset; - size_t val; - size_t iter; - size_t subnet; - } mem; -}; +/* get struct ub_shm_stat_info */ +#include "libunbound/unbound.h" /** * The SHM info. @@ -71,9 +53,9 @@ struct shm_stat_info { struct shm_main_info { /** stats_info array, shared memory segment. * [0] is totals, [1..thread_num] are per-thread stats */ - struct stats_info* ptr_arr; + struct ub_stats_info* ptr_arr; /** the global stats block, shared memory segment */ - struct shm_stat_info* ptr_ctl; + struct ub_shm_stat_info* ptr_ctl; int key; int id_ctl; int id_arr; diff --git a/util/timehist.c b/util/timehist.c index dbf5b98417c2..61cc995fd8ef 100644 --- a/util/timehist.c +++ b/util/timehist.c @@ -225,23 +225,23 @@ timehist_quartile(struct timehist* hist, double q) } void -timehist_export(struct timehist* hist, size_t* array, size_t sz) +timehist_export(struct timehist* hist, long long* array, size_t sz) { size_t i; if(!hist) return; if(sz > hist->num) sz = hist->num; for(i=0; i<sz; i++) - array[i] = hist->buckets[i].count; + array[i] = (long long)hist->buckets[i].count; } void -timehist_import(struct timehist* hist, size_t* array, size_t sz) +timehist_import(struct timehist* hist, long long* array, size_t sz) { size_t i; if(!hist) return; if(sz > hist->num) sz = hist->num; for(i=0; i<sz; i++) - hist->buckets[i].count = array[i]; + hist->buckets[i].count = (size_t)array[i]; } diff --git a/util/timehist.h b/util/timehist.h index 5c65048b9bb3..5f88a38a9fdf 100644 --- a/util/timehist.h +++ b/util/timehist.h @@ -121,7 +121,7 @@ void timehist_log(struct timehist* hist, const char* name); * @param array: the array to export to. * @param sz: number of items in array. */ -void timehist_export(struct timehist* hist, size_t* array, size_t sz); +void timehist_export(struct timehist* hist, long long* array, size_t sz); /** * Import histogram from an array. @@ -129,6 +129,6 @@ void timehist_export(struct timehist* hist, size_t* array, size_t sz); * @param array: the array to import from. * @param sz: number of items in array. */ -void timehist_import(struct timehist* hist, size_t* array, size_t sz); +void timehist_import(struct timehist* hist, long long* array, size_t sz); #endif /* UTIL_TIMEHIST_H */ |